package main import ( "strings" "testing" "github.com/deis/tiller/cmd/tiller/environment" "github.com/deis/tiller/pkg/proto/hapi/chart" "github.com/deis/tiller/pkg/proto/hapi/services" "github.com/deis/tiller/pkg/storage" "golang.org/x/net/context" ) func rsFixture() *releaseServer { return &releaseServer{ env: mockEnvironment(), } } func TestInstallRelease(t *testing.T) { c := context.Background() rs := rsFixture() req := &services.InstallReleaseRequest{ Chart: &chart.Chart{ Metadata: &chart.Metadata{Name: "hello"}, Templates: []*chart.Template{ {Name: "hello", Data: []byte("hello: world")}, }, }, } res, err := rs.InstallRelease(c, req) if err != nil { t.Errorf("Failed install: %s", err) } if res.Release.Name == "" { t.Errorf("Expected release name.") } rel, err := rs.env.Releases.Read(res.Release.Name) if err != nil { t.Errorf("Expected release for %s (%v).", res.Release.Name, rs.env.Releases) } t.Logf("rel: %v", rel) if len(res.Release.Manifest) == 0 { t.Errorf("No manifest returned: %v", res.Release) } if len(rel.Manifest) == 0 { t.Errorf("Expected manifest in %v", res) } if !strings.Contains(rel.Manifest, "---\n# Source: hello\nhello: world") { t.Errorf("unexpected output: %s", rel.Manifest) } } func TestInstallReleaseDryRun(t *testing.T) { c := context.Background() rs := rsFixture() req := &services.InstallReleaseRequest{ Chart: &chart.Chart{ Metadata: &chart.Metadata{Name: "hello"}, Templates: []*chart.Template{ {Name: "hello", Data: []byte("hello: world")}, {Name: "goodbye", Data: []byte("goodbye: world")}, {Name: "empty", Data: []byte("")}, }, }, DryRun: true, } res, err := rs.InstallRelease(c, req) if err != nil { t.Errorf("Failed install: %s", err) } if res.Release.Name == "" { t.Errorf("Expected release name.") } if !strings.Contains(res.Release.Manifest, "---\n# Source: hello\nhello: world") { t.Errorf("unexpected output: %s", res.Release.Manifest) } if !strings.Contains(res.Release.Manifest, "---\n# Source: goodbye\ngoodbye: world") { t.Errorf("unexpected output: %s", res.Release.Manifest) } if strings.Contains(res.Release.Manifest, "empty") { t.Errorf("Should not contain template data for an empty file. %s", res.Release.Manifest) } if _, err := rs.env.Releases.Read(res.Release.Name); err == nil { t.Errorf("Expected no stored release.") } } func mockEnvironment() *environment.Environment { e := environment.New() e.Releases = storage.NewMemory() return e }