add multiple user agents to kaniko if upstream_client_type value is set
This commit is contained in:
		
							parent
							
								
									7adf2fcb50
								
							
						
					
					
						commit
						6daffd8dd7
					
				|  | @ -21,6 +21,8 @@ import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"os" | ||||||
|  | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/GoogleContainerTools/kaniko/pkg/cache" | 	"github.com/GoogleContainerTools/kaniko/pkg/cache" | ||||||
|  | @ -43,8 +45,16 @@ type withUserAgent struct { | ||||||
| 	t http.RoundTripper | 	t http.RoundTripper | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	UPSTREAM_CLIENT_UA_KEY = "UPSTREAM_CLIENT_TYPE" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) { | func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) { | ||||||
| 	r.Header.Set("User-Agent", fmt.Sprintf("kaniko/%s", version.Version())) | 	ua := []string{fmt.Sprintf("kaniko/%s", version.Version())} | ||||||
|  | 	if upstream := os.Getenv(UPSTREAM_CLIENT_UA_KEY); upstream != "" { | ||||||
|  | 		ua = append(ua, upstream) | ||||||
|  | 	} | ||||||
|  | 	r.Header.Set("User-Agent", strings.Join(ua, ",")) | ||||||
| 	return w.t.RoundTrip(r) | 	return w.t.RoundTrip(r) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,71 @@ | ||||||
|  | /* | ||||||
|  | Copyright 2018 Google LLC | ||||||
|  | 
 | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  | 
 | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  | 
 | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package executor | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"io/ioutil" | ||||||
|  | 	"net/http" | ||||||
|  | 	"os" | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/GoogleContainerTools/kaniko/testutil" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestHeaderAdded(t *testing.T) { | ||||||
|  | 	tests := []struct { | ||||||
|  | 		name     string | ||||||
|  | 		upstream string | ||||||
|  | 		expected string | ||||||
|  | 	}{{ | ||||||
|  | 		name:     "upstream env variable set", | ||||||
|  | 		upstream: "skaffold-v0.25.45", | ||||||
|  | 		expected: "kaniko/unset,skaffold-v0.25.45", | ||||||
|  | 	}, { | ||||||
|  | 		name:     "upstream env variable not set", | ||||||
|  | 		expected: "kaniko/unset", | ||||||
|  | 	}, | ||||||
|  | 	} | ||||||
|  | 	for _, test := range tests { | ||||||
|  | 
 | ||||||
|  | 		t.Run(test.name, func(t *testing.T) { | ||||||
|  | 			rt := &withUserAgent{t: &mockRoundTripper{}} | ||||||
|  | 			if test.upstream != "" { | ||||||
|  | 				os.Setenv("UPSTREAM_CLIENT_TYPE", test.upstream) | ||||||
|  | 				defer func() { os.Unsetenv("UPSTREAM_CLIENT_TYPE") }() | ||||||
|  | 			} | ||||||
|  | 			req, err := http.NewRequest("GET", "dummy", nil) | ||||||
|  | 			if err != nil { | ||||||
|  | 				t.Fatalf("culd not create a req due to %s", err) | ||||||
|  | 			} | ||||||
|  | 			resp, err := rt.RoundTrip(req) | ||||||
|  | 			testutil.CheckError(t, false, err) | ||||||
|  | 			defer resp.Body.Close() | ||||||
|  | 			body, err := ioutil.ReadAll(resp.Body) | ||||||
|  | 			testutil.CheckErrorAndDeepEqual(t, false, err, test.expected, string(body)) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type mockRoundTripper struct { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *mockRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) { | ||||||
|  | 	ua := r.UserAgent() | ||||||
|  | 	return &http.Response{Body: ioutil.NopCloser(bytes.NewBufferString(ua))}, nil | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue