mirror of https://github.com/helm/helm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
3.8 KiB
151 lines
3.8 KiB
/*
|
|
Copyright The Helm Authors.
|
|
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 resolver
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"helm.sh/helm/pkg/chart"
|
|
)
|
|
|
|
func TestResolve(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
req []*chart.Dependency
|
|
expect *chart.Lock
|
|
err bool
|
|
}{
|
|
{
|
|
name: "version failure",
|
|
req: []*chart.Dependency{
|
|
{Name: "oedipus-rex", Repository: "http://example.com", Version: ">a1"},
|
|
},
|
|
err: true,
|
|
},
|
|
{
|
|
name: "cache index failure",
|
|
req: []*chart.Dependency{
|
|
{Name: "oedipus-rex", Repository: "http://example.com", Version: "1.0.0"},
|
|
},
|
|
err: true,
|
|
},
|
|
{
|
|
name: "chart not found failure",
|
|
req: []*chart.Dependency{
|
|
{Name: "redis", Repository: "http://example.com", Version: "1.0.0"},
|
|
},
|
|
err: true,
|
|
},
|
|
{
|
|
name: "constraint not satisfied failure",
|
|
req: []*chart.Dependency{
|
|
{Name: "alpine", Repository: "http://example.com", Version: ">=1.0.0"},
|
|
},
|
|
err: true,
|
|
},
|
|
{
|
|
name: "valid lock",
|
|
req: []*chart.Dependency{
|
|
{Name: "alpine", Repository: "http://example.com", Version: ">=0.1.0"},
|
|
},
|
|
expect: &chart.Lock{
|
|
Dependencies: []*chart.Dependency{
|
|
{Name: "alpine", Repository: "http://example.com", Version: "0.2.0"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "repo from valid local path",
|
|
req: []*chart.Dependency{
|
|
{Name: "signtest", Repository: "file://../../../../cmd/helm/testdata/testcharts/signtest", Version: "0.1.0"},
|
|
},
|
|
expect: &chart.Lock{
|
|
Dependencies: []*chart.Dependency{
|
|
{Name: "signtest", Repository: "file://../../../../cmd/helm/testdata/testcharts/signtest", Version: "0.1.0"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "repo from invalid local path",
|
|
req: []*chart.Dependency{
|
|
{Name: "notexist", Repository: "file://../testdata/notexist", Version: "0.1.0"},
|
|
},
|
|
err: true,
|
|
},
|
|
}
|
|
|
|
repoNames := map[string]string{"alpine": "kubernetes-charts", "redis": "kubernetes-charts"}
|
|
r := New("testdata/chartpath", "testdata/helmhome")
|
|
for _, tt := range tests {
|
|
l, err := r.Resolve(tt.req, repoNames)
|
|
if err != nil {
|
|
if tt.err {
|
|
continue
|
|
}
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if tt.err {
|
|
t.Fatalf("Expected error in test %q", tt.name)
|
|
}
|
|
|
|
if h, err := HashReq(tt.expect.Dependencies); err != nil {
|
|
t.Fatal(err)
|
|
} else if h != l.Digest {
|
|
t.Errorf("%q: hashes don't match.", tt.name)
|
|
}
|
|
|
|
// Check fields.
|
|
if len(l.Dependencies) != len(tt.req) {
|
|
t.Errorf("%s: wrong number of dependencies in lock", tt.name)
|
|
}
|
|
d0 := l.Dependencies[0]
|
|
e0 := tt.expect.Dependencies[0]
|
|
if d0.Name != e0.Name {
|
|
t.Errorf("%s: expected name %s, got %s", tt.name, e0.Name, d0.Name)
|
|
}
|
|
if d0.Repository != e0.Repository {
|
|
t.Errorf("%s: expected repo %s, got %s", tt.name, e0.Repository, d0.Repository)
|
|
}
|
|
if d0.Version != e0.Version {
|
|
t.Errorf("%s: expected version %s, got %s", tt.name, e0.Version, d0.Version)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestHashReq(t *testing.T) {
|
|
expect := "sha256:d661820b01ed7bcf26eed8f01cf16380e0a76326ba33058d3150f919d9b15bc0"
|
|
req := []*chart.Dependency{
|
|
{Name: "alpine", Version: "0.1.0", Repository: "http://localhost:8879/charts"},
|
|
}
|
|
h, err := HashReq(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if expect != h {
|
|
t.Errorf("Expected %q, got %q", expect, h)
|
|
}
|
|
|
|
req = []*chart.Dependency{}
|
|
h, err = HashReq(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if expect == h {
|
|
t.Errorf("Expected %q != %q", expect, h)
|
|
}
|
|
}
|