github.com/cloudposse/helm@v2.2.3+incompatible/pkg/resolver/resolver_test.go (about)

     1  /*
     2  Copyright 2016 The Kubernetes Authors All rights reserved.
     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 resolver
    17  
    18  import (
    19  	"testing"
    20  
    21  	"k8s.io/helm/pkg/chartutil"
    22  )
    23  
    24  func TestResolve(t *testing.T) {
    25  	tests := []struct {
    26  		name   string
    27  		req    *chartutil.Requirements
    28  		expect *chartutil.RequirementsLock
    29  		err    bool
    30  	}{
    31  		{
    32  			name: "version failure",
    33  			req: &chartutil.Requirements{
    34  				Dependencies: []*chartutil.Dependency{
    35  					{Name: "oedipus-rex", Repository: "http://example.com", Version: ">a1"},
    36  				},
    37  			},
    38  			err: true,
    39  		},
    40  		{
    41  			name: "cache index failure",
    42  			req: &chartutil.Requirements{
    43  				Dependencies: []*chartutil.Dependency{
    44  					{Name: "oedipus-rex", Repository: "http://example.com", Version: "1.0.0"},
    45  				},
    46  			},
    47  			err: true,
    48  		},
    49  		{
    50  			name: "chart not found failure",
    51  			req: &chartutil.Requirements{
    52  				Dependencies: []*chartutil.Dependency{
    53  					{Name: "redis", Repository: "http://example.com", Version: "1.0.0"},
    54  				},
    55  			},
    56  			err: true,
    57  		},
    58  		{
    59  			name: "constraint not satisfied failure",
    60  			req: &chartutil.Requirements{
    61  				Dependencies: []*chartutil.Dependency{
    62  					{Name: "alpine", Repository: "http://example.com", Version: ">=1.0.0"},
    63  				},
    64  			},
    65  			err: true,
    66  		},
    67  		{
    68  			name: "valid lock",
    69  			req: &chartutil.Requirements{
    70  				Dependencies: []*chartutil.Dependency{
    71  					{Name: "alpine", Repository: "http://example.com", Version: ">=0.1.0"},
    72  				},
    73  			},
    74  			expect: &chartutil.RequirementsLock{
    75  				Dependencies: []*chartutil.Dependency{
    76  					{Name: "alpine", Repository: "http://example.com", Version: "0.2.0"},
    77  				},
    78  			},
    79  		},
    80  		{
    81  			name: "repo from valid local path",
    82  			req: &chartutil.Requirements{
    83  				Dependencies: []*chartutil.Dependency{
    84  					{Name: "signtest", Repository: "file://../../cmd/helm/testdata/testcharts/signtest", Version: "0.1.0"},
    85  				},
    86  			},
    87  			expect: &chartutil.RequirementsLock{
    88  				Dependencies: []*chartutil.Dependency{
    89  					{Name: "signtest", Repository: "file://../../cmd/helm/testdata/testcharts/signtest", Version: "0.1.0"},
    90  				},
    91  			},
    92  		},
    93  		{
    94  			name: "repo from invalid local path",
    95  			req: &chartutil.Requirements{
    96  				Dependencies: []*chartutil.Dependency{
    97  					{Name: "notexist", Repository: "file://../testdata/notexist", Version: "0.1.0"},
    98  				},
    99  			},
   100  			err: true,
   101  		},
   102  	}
   103  
   104  	repoNames := map[string]string{"alpine": "kubernetes-charts", "redis": "kubernetes-charts"}
   105  	r := New("testdata/chartpath", "testdata/helmhome")
   106  	for _, tt := range tests {
   107  		l, err := r.Resolve(tt.req, repoNames)
   108  		if err != nil {
   109  			if tt.err {
   110  				continue
   111  			}
   112  			t.Fatal(err)
   113  		}
   114  
   115  		if tt.err {
   116  			t.Fatalf("Expected error in test %q", tt.name)
   117  		}
   118  
   119  		if h, err := HashReq(tt.req); err != nil {
   120  			t.Fatal(err)
   121  		} else if h != l.Digest {
   122  			t.Errorf("%q: hashes don't match.", tt.name)
   123  		}
   124  
   125  		// Check fields.
   126  		if len(l.Dependencies) != len(tt.req.Dependencies) {
   127  			t.Errorf("%s: wrong number of dependencies in lock", tt.name)
   128  		}
   129  		d0 := l.Dependencies[0]
   130  		e0 := tt.expect.Dependencies[0]
   131  		if d0.Name != e0.Name {
   132  			t.Errorf("%s: expected name %s, got %s", tt.name, e0.Name, d0.Name)
   133  		}
   134  		if d0.Repository != e0.Repository {
   135  			t.Errorf("%s: expected repo %s, got %s", tt.name, e0.Repository, d0.Repository)
   136  		}
   137  		if d0.Version != e0.Version {
   138  			t.Errorf("%s: expected version %s, got %s", tt.name, e0.Version, d0.Version)
   139  		}
   140  	}
   141  }
   142  
   143  func TestHashReq(t *testing.T) {
   144  	expect := "sha256:c8250374210bd909cef274be64f871bd4e376d4ecd34a1589b5abf90b68866ba"
   145  	req := &chartutil.Requirements{
   146  		Dependencies: []*chartutil.Dependency{
   147  			{Name: "alpine", Version: "0.1.0", Repository: "http://localhost:8879/charts"},
   148  		},
   149  	}
   150  	h, err := HashReq(req)
   151  	if err != nil {
   152  		t.Fatal(err)
   153  	}
   154  	if expect != h {
   155  		t.Errorf("Expected %q, got %q", expect, h)
   156  	}
   157  
   158  	req = &chartutil.Requirements{Dependencies: []*chartutil.Dependency{}}
   159  	h, err = HashReq(req)
   160  	if err != nil {
   161  		t.Fatal(err)
   162  	}
   163  	if expect == h {
   164  		t.Errorf("Expected %q !=  %q", expect, h)
   165  	}
   166  }