Added tests for --repo flag for helm fetch command

- [ ] Added tests for --repo flag on `helm fetch` command
- [ ] Also added tests for (pkg/repo).FindChartInRepoURL
pull/2375/head
Sushil Kumar 8 years ago
parent b6586fdb50
commit dce9d88c25

@ -40,6 +40,8 @@ func TestFetchCmd(t *testing.T) {
settings.Home = old settings.Home = old
os.RemoveAll(hh.String()) os.RemoveAll(hh.String())
}() }()
srv := repotest.NewServer(hh.String())
defer srv.Stop()
// all flags will get "--home=TMDIR -d outdir" appended. // all flags will get "--home=TMDIR -d outdir" appended.
tests := []struct { tests := []struct {
@ -105,11 +107,34 @@ func TestFetchCmd(t *testing.T) {
expectDir: true, expectDir: true,
expectVerify: true, expectVerify: true,
}, },
{
name: "Chart fetch using repo URL",
chart: "signtest",
expectFile: "./signtest-0.1.0.tgz",
flags: []string{"--repo", srv.URL()},
},
{
name: "Fail fetching non-existent chart on repo URL",
chart: "someChart",
flags: []string{"--repo", srv.URL()},
failExpect: "Failed to fetch chart",
fail: true,
},
{
name: "Specific version chart fetch using repo URL",
chart: "signtest",
expectFile: "./signtest-0.1.0.tgz",
flags: []string{"--repo", srv.URL(), "--version", "0.1.0"},
},
{
name: "Specific version chart fetch using repo URL",
chart: "signtest",
flags: []string{"--repo", srv.URL(), "--version", "0.2.0"},
failExpect: "Failed to fetch chart version",
fail: true,
},
} }
srv := repotest.NewServer(hh.String())
defer srv.Stop()
if _, err := srv.CopyCharts("testdata/testcharts/*.tgz*"); err != nil { if _, err := srv.CopyCharts("testdata/testcharts/*.tgz*"); err != nil {
t.Fatal(err) t.Fatal(err)
} }

@ -17,9 +17,13 @@ limitations under the License.
package repo package repo
import ( import (
"io/ioutil"
"net/http"
"net/http/httptest"
"os" "os"
"path/filepath" "path/filepath"
"reflect" "reflect"
"strings"
"testing" "testing"
"time" "time"
@ -185,3 +189,82 @@ func verifyIndex(t *testing.T, actual *IndexFile) {
} }
} }
} }
// StartLocalServerForTests Start the local helm server
func StartLocalServerForTests(handler http.Handler) (*httptest.Server, error) {
if handler == nil {
fileBytes, err := ioutil.ReadFile("testdata/local-index.yaml")
if err != nil {
return nil, err
}
handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write(fileBytes)
})
}
return httptest.NewServer(handler), nil
}
func TestFindChartInRepoURL(t *testing.T) {
srv, err := StartLocalServerForTests(nil)
if err != nil {
t.Fatal(err)
}
defer srv.Close()
chartURL, err := FindChartInRepoURL(srv.URL, "nginx", "", "", "", "", getter.All(environment.EnvSettings{}))
if err != nil {
t.Errorf("%s", err)
}
if chartURL != "https://kubernetes-charts.storage.googleapis.com/nginx-0.2.0.tgz" {
t.Errorf("%s is not the valid URL", chartURL)
}
chartURL, err = FindChartInRepoURL(srv.URL, "nginx", "0.1.0", "", "", "", getter.All(environment.EnvSettings{}))
if err != nil {
t.Errorf("%s", err)
}
if chartURL != "https://kubernetes-charts.storage.googleapis.com/nginx-0.1.0.tgz" {
t.Errorf("%s is not the valid URL", chartURL)
}
}
func TestErrorFindChartInRepoURL(t *testing.T) {
_, err := FindChartInRepoURL("http://someserver/something", "nginx", "", "", "", "", getter.All(environment.EnvSettings{}))
if err == nil {
t.Errorf("Expected error for bad chart URL, but did not get any errors")
}
if err != nil && !strings.Contains(err.Error(), `Looks like "http://someserver/something" is not a valid chart repository or cannot be reached: Get http://someserver/something/index.yaml`) {
t.Errorf("Expected error for bad chart URL, but got a different error (%v)", err)
}
srv, err := StartLocalServerForTests(nil)
if err != nil {
t.Fatal(err)
}
defer srv.Close()
_, err = FindChartInRepoURL(srv.URL, "nginx1", "", "", "", "", getter.All(environment.EnvSettings{}))
if err == nil {
t.Errorf("Expected error for chart not found, but did not get any errors")
}
if err != nil && err.Error() != `chart "nginx1" not found in `+srv.URL+` repository` {
t.Errorf("Expected error for chart not found, but got a different error (%v)", err)
}
_, err = FindChartInRepoURL(srv.URL, "nginx1", "0.1.0", "", "", "", getter.All(environment.EnvSettings{}))
if err == nil {
t.Errorf("Expected error for chart not found, but did not get any errors")
}
if err != nil && err.Error() != `chart "nginx1" version "0.1.0" not found in `+srv.URL+` repository` {
t.Errorf("Expected error for chart not found, but got a different error (%v)", err)
}
_, err = FindChartInRepoURL(srv.URL, "chartWithNoURL", "", "", "", "", getter.All(environment.EnvSettings{}))
if err == nil {
t.Errorf("Expected error for no chart URLs available, but did not get any errors")
}
if err != nil && err.Error() != `chart "chartWithNoURL" has no downloadable URLs` {
t.Errorf("Expected error for chart not found, but got a different error (%v)", err)
}
}

@ -18,8 +18,6 @@ package repo
import ( import (
"io/ioutil" "io/ioutil"
"net/http"
"net/http/httptest"
"os" "os"
"path/filepath" "path/filepath"
"testing" "testing"
@ -131,14 +129,10 @@ func TestMerge(t *testing.T) {
} }
func TestDownloadIndexFile(t *testing.T) { func TestDownloadIndexFile(t *testing.T) {
fileBytes, err := ioutil.ReadFile("testdata/local-index.yaml") srv, err := StartLocalServerForTests(nil)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write(fileBytes)
}))
defer srv.Close() defer srv.Close()
dirName, err := ioutil.TempDir("", "tmp") dirName, err := ioutil.TempDir("", "tmp")
@ -181,8 +175,8 @@ func TestDownloadIndexFile(t *testing.T) {
func verifyLocalIndex(t *testing.T, i *IndexFile) { func verifyLocalIndex(t *testing.T, i *IndexFile) {
numEntries := len(i.Entries) numEntries := len(i.Entries)
if numEntries != 2 { if numEntries != 3 {
t.Errorf("Expected 2 entries in index file but got %d", numEntries) t.Errorf("Expected 3 entries in index file but got %d", numEntries)
} }
alpine, ok := i.Entries["alpine"] alpine, ok := i.Entries["alpine"]

@ -19,7 +19,6 @@ package repo
import ( import (
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/http/httptest"
"strings" "strings"
"testing" "testing"
) )
@ -43,7 +42,10 @@ func TestRepositoryServer(t *testing.T) {
} }
s := &RepositoryServer{RepoPath: "testdata/server"} s := &RepositoryServer{RepoPath: "testdata/server"}
srv := httptest.NewServer(s) srv, err := StartLocalServerForTests(s)
if err != nil {
t.Fatal(err)
}
defer srv.Close() defer srv.Close()
for _, tt := range tests { for _, tt := range tests {

@ -37,3 +37,12 @@ entries:
- small - small
- sumtin - sumtin
digest: "sha256:1234567890abcdef" digest: "sha256:1234567890abcdef"
chartWithNoURL:
- name: chartWithNoURL
description: string
version: 1.0.0
home: https://github.com/something
keywords:
- small
- sumtin
digest: "sha256:1234567890abcdef"

@ -37,3 +37,12 @@ entries:
- small - small
- sumtin - sumtin
digest: "sha256:1234567890abcdef" digest: "sha256:1234567890abcdef"
chartWithNoURL:
- name: chartWithNoURL
description: string
version: 1.0.0
home: https://github.com/something
keywords:
- small
- sumtin
digest: "sha256:1234567890abcdef"

Loading…
Cancel
Save