Commit 519ccac2 authored by Karuppiah Natarajan's avatar Karuppiah Natarajan Committed by Martin Hickey

fix repo url being decoded while downloading repo index (#6060)

Signed-off-by: 's avatarKaruppiah Natarajan <karuppiah7890@gmail.com>
parent fb2cbb00
......@@ -21,6 +21,7 @@ import (
"io/ioutil"
"net/url"
"os"
"path"
"path/filepath"
"strings"
......@@ -111,14 +112,13 @@ func (r *ChartRepository) Load() error {
// cachePath is prepended to any index that does not have an absolute path. This
// is for pre-2.2.0 repo files.
func (r *ChartRepository) DownloadIndexFile(cachePath string) error {
var indexURL string
parsedURL, err := url.Parse(r.Config.URL)
if err != nil {
return err
}
parsedURL.Path = strings.TrimSuffix(parsedURL.Path, "/") + "/index.yaml"
indexURL = parsedURL.String()
parsedURL.RawPath = path.Join(parsedURL.RawPath, "index.yaml")
parsedURL.Path = path.Join(parsedURL.Path, "index.yaml")
indexURL := parsedURL.String()
r.setCredentials()
resp, err := r.Client.Get(indexURL)
......
......@@ -18,6 +18,7 @@ package repo
import (
"io/ioutil"
"net/http"
"os"
"path/filepath"
"strings"
......@@ -143,48 +144,105 @@ func TestMerge(t *testing.T) {
}
func TestDownloadIndexFile(t *testing.T) {
srv, err := startLocalServerForTests(nil)
if err != nil {
t.Fatal(err)
}
defer srv.Close()
t.Run("should download index file", func(t *testing.T) {
srv, err := startLocalServerForTests(nil)
if err != nil {
t.Fatal(err)
}
defer srv.Close()
dirName, err := ioutil.TempDir("", "tmp")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dirName)
indexFilePath := filepath.Join(dirName, testRepo+"-index.yaml")
r, err := NewChartRepository(&Entry{
Name: testRepo,
URL: srv.URL,
Cache: indexFilePath,
}, getter.All(environment.EnvSettings{}))
if err != nil {
t.Errorf("Problem creating chart repository from %s: %v", testRepo, err)
}
dirName, err := ioutil.TempDir("", "tmp")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dirName)
indexFilePath := filepath.Join(dirName, testRepo+"-index.yaml")
r, err := NewChartRepository(&Entry{
Name: testRepo,
URL: srv.URL,
Cache: indexFilePath,
}, getter.All(environment.EnvSettings{}))
if err != nil {
t.Errorf("Problem creating chart repository from %s: %v", testRepo, err)
}
if err := r.DownloadIndexFile(""); err != nil {
t.Errorf("%#v", err)
}
if err := r.DownloadIndexFile(""); err != nil {
t.Errorf("%#v", err)
}
if _, err := os.Stat(indexFilePath); err != nil {
t.Errorf("error finding created index file: %#v", err)
}
if _, err := os.Stat(indexFilePath); err != nil {
t.Errorf("error finding created index file: %#v", err)
}
b, err := ioutil.ReadFile(indexFilePath)
if err != nil {
t.Errorf("error reading index file: %#v", err)
}
b, err := ioutil.ReadFile(indexFilePath)
if err != nil {
t.Errorf("error reading index file: %#v", err)
}
i, err := loadIndex(b)
if err != nil {
t.Errorf("Index %q failed to parse: %s", testfile, err)
return
}
i, err := loadIndex(b)
if err != nil {
t.Errorf("Index %q failed to parse: %s", testfile, err)
return
}
verifyLocalIndex(t, i)
verifyLocalIndex(t, i)
})
t.Run("should not decode the path in the repo url while downloading index", func(t *testing.T) {
chartRepoURLPath := "/some%2Fpath/test"
fileBytes, err := ioutil.ReadFile("testdata/local-index.yaml")
if err != nil {
t.Fatal(err)
}
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.RawPath == chartRepoURLPath+"/index.yaml" {
w.Write(fileBytes)
}
})
srv, err := startLocalServerForTests(handler)
if err != nil {
t.Fatal(err)
}
defer srv.Close()
dirName, err := ioutil.TempDir("", "tmp")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dirName)
indexFilePath := filepath.Join(dirName, testRepo+"-index.yaml")
r, err := NewChartRepository(&Entry{
Name: testRepo,
URL: srv.URL + chartRepoURLPath,
Cache: indexFilePath,
}, getter.All(environment.EnvSettings{}))
if err != nil {
t.Errorf("Problem creating chart repository from %s: %v", "testrepo", err)
}
if err := r.DownloadIndexFile(""); err != nil {
t.Errorf("%#v", err)
}
if _, err := os.Stat(indexFilePath); err != nil {
t.Errorf("error finding created index file: %#v", err)
}
b, err := ioutil.ReadFile(indexFilePath)
if err != nil {
t.Errorf("error reading index file: %#v", err)
}
i, err := loadIndex(b)
if err != nil {
t.Errorf("Index %q failed to parse: %s", testfile, err)
return
}
verifyLocalIndex(t, i)
})
}
func verifyLocalIndex(t *testing.T, i *IndexFile) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment