github.com/azure-devops-engineer/helm@v3.0.0-alpha.2+incompatible/pkg/getter/httpgetter_test.go (about)

     1  /*
     2  Copyright The Helm Authors.
     3  Licensed under the Apache License, Version 2.0 (the "License");
     4  you may not use this file except in compliance with the License.
     5  You may obtain a copy of the License at
     6  
     7  http://www.apache.org/licenses/LICENSE-2.0
     8  
     9  Unless required by applicable law or agreed to in writing, software
    10  distributed under the License is distributed on an "AS IS" BASIS,
    11  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  See the License for the specific language governing permissions and
    13  limitations under the License.
    14  */
    15  
    16  package getter
    17  
    18  import (
    19  	"fmt"
    20  	"net/http"
    21  	"net/http/httptest"
    22  	"net/url"
    23  	"path/filepath"
    24  	"testing"
    25  
    26  	"helm.sh/helm/internal/test"
    27  	"helm.sh/helm/pkg/cli"
    28  )
    29  
    30  func TestHTTPGetter(t *testing.T) {
    31  	g, err := NewHTTPGetter(WithURL("http://example.com"))
    32  	if err != nil {
    33  		t.Fatal(err)
    34  	}
    35  
    36  	if hg, ok := g.(*HTTPGetter); !ok {
    37  		t.Fatal("Expected NewHTTPGetter to produce an *HTTPGetter")
    38  	} else if hg.client != http.DefaultClient {
    39  		t.Fatal("Expected NewHTTPGetter to return a default HTTP client.")
    40  	}
    41  
    42  	// Test with SSL:
    43  	cd := "../../testdata"
    44  	join := filepath.Join
    45  	ca, pub, priv := join(cd, "ca.pem"), join(cd, "crt.pem"), join(cd, "key.pem")
    46  	g, err = NewHTTPGetter(
    47  		WithURL("http://example.com"),
    48  		WithTLSClientConfig(pub, priv, ca),
    49  	)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  
    54  	hg, ok := g.(*HTTPGetter)
    55  	if !ok {
    56  		t.Fatal("Expected NewHTTPGetter to produce an *HTTPGetter")
    57  	}
    58  
    59  	transport, ok := hg.client.Transport.(*http.Transport)
    60  	if !ok {
    61  		t.Errorf("Expected NewHTTPGetter to set up an HTTP transport")
    62  	}
    63  
    64  	test.AssertGoldenString(t, transport.TLSClientConfig.ServerName, "output/httpgetter-servername.txt")
    65  
    66  	// Test other options
    67  	g, err = NewHTTPGetter(
    68  		WithBasicAuth("I", "Am"),
    69  		WithUserAgent("Groot"),
    70  	)
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  
    75  	hg, ok = g.(*HTTPGetter)
    76  	if !ok {
    77  		t.Fatal("expected NewHTTPGetter to produce an *HTTPGetter")
    78  	}
    79  
    80  	if hg.opts.username != "I" {
    81  		t.Errorf("Expected NewHTTPGetter to contain %q as the username, got %q", "I", hg.opts.username)
    82  	}
    83  
    84  	if hg.opts.password != "Am" {
    85  		t.Errorf("Expected NewHTTPGetter to contain %q as the password, got %q", "Am", hg.opts.password)
    86  	}
    87  
    88  	if hg.opts.userAgent != "Groot" {
    89  		t.Errorf("Expected NewHTTPGetter to contain %q as the user agent, got %q", "Groot", hg.opts.userAgent)
    90  	}
    91  }
    92  
    93  func TestDownload(t *testing.T) {
    94  	expect := "Call me Ishmael"
    95  	srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    96  		fmt.Fprint(w, expect)
    97  	}))
    98  	defer srv.Close()
    99  
   100  	provider, err := ByScheme("http", cli.EnvSettings{})
   101  	if err != nil {
   102  		t.Fatal("No http provider found")
   103  	}
   104  
   105  	g, err := provider.New(WithURL(srv.URL))
   106  	if err != nil {
   107  		t.Fatal(err)
   108  	}
   109  	got, err := g.Get(srv.URL)
   110  	if err != nil {
   111  		t.Fatal(err)
   112  	}
   113  
   114  	if got.String() != expect {
   115  		t.Errorf("Expected %q, got %q", expect, got.String())
   116  	}
   117  
   118  	// test with server backed by basic auth
   119  	basicAuthSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
   120  		username, password, ok := r.BasicAuth()
   121  		if !ok || username != "username" || password != "password" {
   122  			t.Errorf("Expected request to use basic auth and for username == 'username' and password == 'password', got '%v', '%s', '%s'", ok, username, password)
   123  		}
   124  		fmt.Fprint(w, expect)
   125  	}))
   126  
   127  	defer basicAuthSrv.Close()
   128  
   129  	u, _ := url.ParseRequestURI(basicAuthSrv.URL)
   130  	httpgetter, err := NewHTTPGetter(
   131  		WithURL(u.String()),
   132  		WithBasicAuth("username", "password"),
   133  	)
   134  	if err != nil {
   135  		t.Fatal(err)
   136  	}
   137  	got, err = httpgetter.Get(u.String())
   138  	if err != nil {
   139  		t.Fatal(err)
   140  	}
   141  
   142  	if got.String() != expect {
   143  		t.Errorf("Expected %q, got %q", expect, got.String())
   144  	}
   145  }