From 100dd3b09a3113b6dd09e99c6e4015c4465cd309 Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 29 Mar 2016 16:16:56 -0700 Subject: [PATCH 1/4] Add chart content test --- pkg/chart/chart_test.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pkg/chart/chart_test.go b/pkg/chart/chart_test.go index c8a5d6f78..60114042f 100644 --- a/pkg/chart/chart_test.go +++ b/pkg/chart/chart_test.go @@ -21,9 +21,11 @@ import ( "fmt" "io/ioutil" "path/filepath" + "reflect" "testing" "github.com/kubernetes/helm/pkg/log" + "github.com/kubernetes/helm/pkg/util" ) const ( @@ -238,6 +240,39 @@ func TestLoadMember(t *testing.T) { } } +func TestLoadContent(t *testing.T) { + c, err := LoadDir(testdir) + if err != nil { + t.Errorf("Failed to load chart: %s", err) + } + + content, err := c.LoadContent() + if err != nil { + t.Errorf("Failed to load chart content: %s", err) + } + + want := c.Chartfile() + have := content.Chartfile + if !reflect.DeepEqual(want, have) { + t.Errorf("Unexpected chart file\nwant:\n%s\nhave:\n%s\n", + util.ToYAMLOrError(want), util.ToYAMLOrError(have)) + } + + for _, member := range content.Members { + have := member.Content + wantMember, err := c.LoadMember(member.Path) + if err != nil { + t.Errorf("Failed to load chart member: %s", err) + } + + t.Logf("%s:\n%s\n\n", member.Path, member.Content) + want := wantMember.Content + if !reflect.DeepEqual(want, have) { + t.Errorf("Unexpected chart member %s\nwant:\n%s\nhave:\n%s\n", member.Path, want, have) + } + } +} + func compareContent(filename, content string) error { b, err := ioutil.ReadFile(filename) if err != nil { From 242ad69d35c944547cdfaf7bf77435168b5bc81b Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 29 Mar 2016 17:55:14 -0700 Subject: [PATCH 2/4] Remove base64 chart member encoding --- pkg/chart/chart.go | 7 +++---- pkg/chart/chart_test.go | 16 +++++++--------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/pkg/chart/chart.go b/pkg/chart/chart.go index 4a3281745..d36c15f1e 100644 --- a/pkg/chart/chart.go +++ b/pkg/chart/chart.go @@ -20,7 +20,6 @@ import ( "archive/tar" "bytes" "compress/gzip" - "encoding/base64" "errors" "fmt" "io" @@ -412,16 +411,16 @@ func (c *Chart) loadMember(filename string) (*Member, error) { return nil, err } - b, err := ioutil.ReadFile(filename) + content, err := ioutil.ReadFile(filename) if err != nil { return nil, err } path := strings.TrimPrefix(filename, dir) - content := base64.StdEncoding.EncodeToString(b) + path = strings.TrimLeft(path, "/") result := &Member{ Path: path, - Content: []byte(content), + Content: content, } return result, nil diff --git a/pkg/chart/chart_test.go b/pkg/chart/chart_test.go index 60114042f..b4f93a2b9 100644 --- a/pkg/chart/chart_test.go +++ b/pkg/chart/chart_test.go @@ -17,7 +17,6 @@ limitations under the License. package chart import ( - "encoding/base64" "fmt" "io/ioutil" "path/filepath" @@ -204,7 +203,7 @@ func findMember(root, path string, members []*Member) error { for _, member := range members { if member.Path == path { filename := filepath.Join(root, path) - if err := compareContent(filename, string(member.Content)); err != nil { + if err := compareContent(filename, member.Content); err != nil { return err } @@ -235,7 +234,7 @@ func TestLoadMember(t *testing.T) { } filename := filepath.Join(c.loader.dir(), testmember) - if err := compareContent(filename, string(member.Content)); err != nil { + if err := compareContent(filename, member.Content); err != nil { t.Fatal(err) } } @@ -268,20 +267,19 @@ func TestLoadContent(t *testing.T) { t.Logf("%s:\n%s\n\n", member.Path, member.Content) want := wantMember.Content if !reflect.DeepEqual(want, have) { - t.Errorf("Unexpected chart member %s\nwant:\n%s\nhave:\n%s\n", member.Path, want, have) + t.Errorf("Unexpected chart member %s\nwant:\n%v\nhave:\n%v\n", member.Path, want, have) } } } -func compareContent(filename, content string) error { - b, err := ioutil.ReadFile(filename) +func compareContent(filename string, content []byte) error { + compare, err := ioutil.ReadFile(filename) if err != nil { return fmt.Errorf("Cannot read test file %s: %s", filename, err) } - compare := base64.StdEncoding.EncodeToString(b) - if content != compare { - return fmt.Errorf("Expected member content\n%v\ngot\n%v", []byte(compare), []byte(content)) + if !reflect.DeepEqual(compare, content) { + return fmt.Errorf("Expected member content\n%v\ngot\n%v", compare, content) } return nil From c245006d16fe6901beadfe4158d0872b8423dfa4 Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 29 Mar 2016 17:55:50 -0700 Subject: [PATCH 3/4] Add expansion request and response logging --- pkg/expansion/service.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/expansion/service.go b/pkg/expansion/service.go index e7c135b75..8a589a063 100644 --- a/pkg/expansion/service.go +++ b/pkg/expansion/service.go @@ -49,14 +49,18 @@ func NewService(address string, port int, backend Expander) *Service { badRequest(resp, err.Error()) return } + + reqMsg := fmt.Sprintf("\nhandling request:\n%s\n", util.ToYAMLOrError(request)) + util.LogHandlerText("expansion service", reqMsg) response, err := backend.ExpandChart(request) if err != nil { badRequest(resp, fmt.Sprintf("error expanding chart: %s", err)) return } + util.LogHandlerExit("expansion service", http.StatusOK, "OK", resp.ResponseWriter) - message := fmt.Sprintf("\nResources:\n%s\n", response.Resources) - util.LogHandlerText("expansion service", message) + respMsg := fmt.Sprintf("\nreturning response:\n%s\n", util.ToYAMLOrError(response.Resources)) + util.LogHandlerText("expansion service", respMsg) resp.WriteEntity(response) } webService.Route( From b20a7c53a2e16bd67e3d6763f556d655b5359ac0 Mon Sep 17 00:00:00 2001 From: jackgr Date: Tue, 29 Mar 2016 18:24:24 -0700 Subject: [PATCH 4/4] Updated replicatedservice chart --- examples/charts/replicatedservice-3.tgz | Bin 0 -> 2848 bytes examples/charts/replicatedservice-v3.tgz | Bin 2847 -> 0 bytes examples/charts/replicatedservice/Chart.yaml | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 examples/charts/replicatedservice-3.tgz delete mode 100644 examples/charts/replicatedservice-v3.tgz diff --git a/examples/charts/replicatedservice-3.tgz b/examples/charts/replicatedservice-3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..adc9cf39b0efab4db5b038d8fdfe76737ee3a745 GIT binary patch literal 2848 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 x18$*(7FuYbg%(<9p@kM&XrYA`T4