From 488ca6fdd86d1158523db3db1bf2daccd65d0226 Mon Sep 17 00:00:00 2001 From: Michelle Noorali Date: Mon, 8 May 2017 21:33:42 -0400 Subject: [PATCH] fix(*): return non-zero exit code on test failure * resolves #2089 --- _proto/hapi/release/test_run.proto | 1 + _proto/hapi/services/tiller.proto | 3 + cmd/helm/helm_test.go | 28 +++- cmd/helm/release_testing.go | 20 +++ cmd/helm/release_testing_test.go | 105 +++++++++++++++ pkg/proto/hapi/chart/chart.pb.go | 2 +- pkg/proto/hapi/chart/config.pb.go | 2 +- pkg/proto/hapi/chart/metadata.pb.go | 2 +- pkg/proto/hapi/chart/template.pb.go | 2 +- pkg/proto/hapi/release/hook.pb.go | 2 +- pkg/proto/hapi/release/info.pb.go | 2 +- pkg/proto/hapi/release/release.pb.go | 2 +- pkg/proto/hapi/release/status.pb.go | 2 +- pkg/proto/hapi/release/test_run.pb.go | 40 +++--- pkg/proto/hapi/release/test_suite.pb.go | 2 +- pkg/proto/hapi/services/tiller.pb.go | 163 +++++++++++++----------- pkg/proto/hapi/version/version.pb.go | 2 +- pkg/releasetesting/environment.go | 14 +- pkg/releasetesting/environment_test.go | 29 ++++- pkg/releasetesting/test_suite.go | 6 +- pkg/tiller/release_server.go | 6 +- 21 files changed, 317 insertions(+), 118 deletions(-) create mode 100644 cmd/helm/release_testing_test.go diff --git a/_proto/hapi/release/test_run.proto b/_proto/hapi/release/test_run.proto index a441e729f..60734ae03 100644 --- a/_proto/hapi/release/test_run.proto +++ b/_proto/hapi/release/test_run.proto @@ -26,6 +26,7 @@ message TestRun { UNKNOWN = 0; SUCCESS = 1; FAILURE = 2; + RUNNING = 3; } string name = 1; diff --git a/_proto/hapi/services/tiller.proto b/_proto/hapi/services/tiller.proto index f16d68238..f29c364c0 100644 --- a/_proto/hapi/services/tiller.proto +++ b/_proto/hapi/services/tiller.proto @@ -20,6 +20,7 @@ import "hapi/chart/chart.proto"; import "hapi/chart/config.proto"; import "hapi/release/release.proto"; import "hapi/release/info.proto"; +import "hapi/release/test_run.proto"; import "hapi/release/status.proto"; import "hapi/version/version.proto"; @@ -327,4 +328,6 @@ message TestReleaseRequest { // TestReleaseResponse represents a message from executing a test message TestReleaseResponse { string msg = 1; + hapi.release.TestRun.Status status = 2; + } diff --git a/cmd/helm/helm_test.go b/cmd/helm/helm_test.go index 016b79d6b..a50b63dba 100644 --- a/cmd/helm/helm_test.go +++ b/cmd/helm/helm_test.go @@ -24,6 +24,7 @@ import ( "math/rand" "os" "regexp" + "sync" "testing" "github.com/golang/protobuf/ptypes/timestamp" @@ -122,8 +123,9 @@ func releaseMock(opts *releaseOptions) *release.Release { } type fakeReleaseClient struct { - rels []*release.Release - err error + rels []*release.Release + responses map[string]release.TestRun_Status + err error } var _ helm.Interface = &fakeReleaseClient{} @@ -198,7 +200,27 @@ func (c *fakeReleaseClient) ReleaseHistory(rlsName string, opts ...helm.HistoryO } func (c *fakeReleaseClient) RunReleaseTest(rlsName string, opts ...helm.ReleaseTestOption) (<-chan *rls.TestReleaseResponse, <-chan error) { - return nil, nil + + results := make(chan *rls.TestReleaseResponse, len(c.responses)) + errc := make(chan error, 1) + + go func() { + var wg sync.WaitGroup + for m, s := range c.responses { + wg.Add(1) + + go func(msg string, status release.TestRun_Status) { + defer wg.Done() + results <- &rls.TestReleaseResponse{Msg: msg, Status: status} + }(m, s) + } + + wg.Wait() + close(results) + close(errc) + }() + + return results, errc } func (c *fakeReleaseClient) Option(opt ...helm.Option) helm.Interface { diff --git a/cmd/helm/release_testing.go b/cmd/helm/release_testing.go index 76a8f40e3..a196f7809 100644 --- a/cmd/helm/release_testing.go +++ b/cmd/helm/release_testing.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "k8s.io/helm/pkg/helm" + "k8s.io/helm/pkg/proto/hapi/release" ) const releaseTestDesc = ` @@ -75,16 +76,35 @@ func (t *releaseTestCmd) run() (err error) { helm.ReleaseTestTimeout(t.timeout), helm.ReleaseTestCleanup(t.cleanup), ) + testErr := &testErr{} for { select { case err := <-errc: + if prettyError(err) == nil && testErr.failed > 0 { + return testErr.Error() + } return prettyError(err) case res, ok := <-c: if !ok { break } + + if res.Status == release.TestRun_FAILURE { + testErr.failed++ + } + fmt.Fprintf(t.out, res.Msg+"\n") + } } + +} + +type testErr struct { + failed int +} + +func (err *testErr) Error() error { + return fmt.Errorf("%v test(s) failed", err.failed) } diff --git a/cmd/helm/release_testing_test.go b/cmd/helm/release_testing_test.go new file mode 100644 index 000000000..2c7a5867a --- /dev/null +++ b/cmd/helm/release_testing_test.go @@ -0,0 +1,105 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +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 main + +import ( + "bytes" + "testing" + + "k8s.io/helm/pkg/proto/hapi/release" +) + +func TestReleaseTesting(t *testing.T) { + tests := []struct { + name string + args []string + flags []string + responses map[string]release.TestRun_Status + fail bool + }{ + { + name: "basic test", + args: []string{"example-release"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{"PASSED: green lights everywhere": release.TestRun_SUCCESS}, + fail: false, + }, + { + name: "test failure", + args: []string{"example-fail"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{"FAILURE: red lights everywhere": release.TestRun_FAILURE}, + fail: true, + }, + { + name: "test unknown", + args: []string{"example-unknown"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{"UNKNOWN: yellow lights everywhere": release.TestRun_UNKNOWN}, + fail: false, + }, + { + name: "test error", + args: []string{"example-error"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{"ERROR: yellow lights everywhere": release.TestRun_FAILURE}, + fail: true, + }, + { + name: "test running", + args: []string{"example-running"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{"RUNNING: things are happpeningggg": release.TestRun_RUNNING}, + fail: false, + }, + { + name: "multiple tests example", + args: []string{"example-suite"}, + flags: []string{}, + responses: map[string]release.TestRun_Status{ + "RUNNING: things are happpeningggg": release.TestRun_RUNNING, + "PASSED: party time": release.TestRun_SUCCESS, + "RUNNING: things are happening again": release.TestRun_RUNNING, + "FAILURE: good thing u checked :)": release.TestRun_FAILURE, + "RUNNING: things are happpeningggg yet again": release.TestRun_RUNNING, + "PASSED: feel free to party again": release.TestRun_SUCCESS}, + fail: true, + }, + } + + for _, tt := range tests { + c := &fakeReleaseClient{responses: tt.responses} + + buf := bytes.NewBuffer(nil) + cmd := newReleaseTestCmd(c, buf) + cmd.ParseFlags(tt.flags) + + err := cmd.RunE(cmd, tt.args) + if err == nil && tt.fail { + t.Errorf("%q did not fail but should have failed", tt.name) + } + + if err != nil { + if tt.fail { + continue + } else { + t.Errorf("%q reported error: %s", tt.name, err) + } + } + + } +} diff --git a/pkg/proto/hapi/chart/chart.pb.go b/pkg/proto/hapi/chart/chart.pb.go index dbb188e91..c3afc3f44 100644 --- a/pkg/proto/hapi/chart/chart.pb.go +++ b/pkg/proto/hapi/chart/chart.pb.go @@ -101,7 +101,7 @@ func init() { proto.RegisterFile("hapi/chart/chart.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 242 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xb1, 0x4e, 0xc3, 0x30, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x90, 0xb1, 0x4e, 0xc3, 0x30, 0x10, 0x86, 0x15, 0x4a, 0x0a, 0x1c, 0x2c, 0x58, 0x08, 0x4c, 0xa7, 0x8a, 0x09, 0x75, 0x70, 0x50, 0x11, 0x0f, 0x00, 0xcc, 0x2c, 0x16, 0x13, 0xdb, 0xb5, 0xb9, 0xa4, 0x91, 0x52, 0x3b, 0xaa, 0x5d, 0xa4, 0xbe, 0x3b, 0x03, 0xea, 0xd9, 0xa6, 0x09, 0xea, 0x12, 0x29, 0xf7, 0x7d, 0xff, 0xe5, 0xbf, diff --git a/pkg/proto/hapi/chart/config.pb.go b/pkg/proto/hapi/chart/config.pb.go index 4a8b36d89..8ce01968d 100644 --- a/pkg/proto/hapi/chart/config.pb.go +++ b/pkg/proto/hapi/chart/config.pb.go @@ -64,7 +64,7 @@ func init() { proto.RegisterFile("hapi/chart/config.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ // 182 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcf, 0x48, 0x2c, 0xc8, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0xcf, 0x48, 0x2c, 0xc8, 0xd4, 0x4f, 0xce, 0x48, 0x2c, 0x2a, 0xd1, 0x4f, 0xce, 0xcf, 0x4b, 0xcb, 0x4c, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x49, 0xe8, 0x81, 0x25, 0x94, 0x16, 0x30, 0x72, 0xb1, 0x39, 0x83, 0x25, 0x85, 0x04, 0xb8, 0x98, 0x8b, 0x12, 0xcb, 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, diff --git a/pkg/proto/hapi/chart/metadata.pb.go b/pkg/proto/hapi/chart/metadata.pb.go index 82abb04ff..24b3da70f 100644 --- a/pkg/proto/hapi/chart/metadata.pb.go +++ b/pkg/proto/hapi/chart/metadata.pb.go @@ -218,7 +218,7 @@ func init() { proto.RegisterFile("hapi/chart/metadata.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ // 354 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x5f, 0x4b, 0xe3, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x92, 0x5f, 0x4b, 0xe3, 0x40, 0x14, 0xc5, 0x37, 0x9b, 0xe6, 0xdf, 0xcd, 0x76, 0xb7, 0x0c, 0x4b, 0x99, 0x5d, 0x44, 0x42, 0xf1, 0x21, 0x4f, 0x29, 0x28, 0x88, 0xcf, 0x82, 0xf8, 0xa0, 0x6d, 0x25, 0xf8, 0x07, 0x7c, 0x1b, 0x93, 0x4b, 0x3b, 0xd8, 0xcc, 0x84, 0xc9, 0xa8, 0xf8, 0x7d, 0xfd, 0x20, 0x32, 0x93, 0xa4, 0x8d, 0xe0, diff --git a/pkg/proto/hapi/chart/template.pb.go b/pkg/proto/hapi/chart/template.pb.go index 416269d18..862efa372 100644 --- a/pkg/proto/hapi/chart/template.pb.go +++ b/pkg/proto/hapi/chart/template.pb.go @@ -51,7 +51,7 @@ func init() { proto.RegisterFile("hapi/chart/template.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ // 107 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0x48, 0x2c, 0xc8, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0xcc, 0x48, 0x2c, 0xc8, 0xd4, 0x4f, 0xce, 0x48, 0x2c, 0x2a, 0xd1, 0x2f, 0x49, 0xcd, 0x2d, 0xc8, 0x49, 0x2c, 0x49, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x49, 0xe9, 0x81, 0xa5, 0x94, 0x8c, 0xb8, 0x38, 0x42, 0xa0, 0xb2, 0x42, 0x42, 0x5c, 0x2c, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, diff --git a/pkg/proto/hapi/release/hook.pb.go b/pkg/proto/hapi/release/hook.pb.go index 1724842e3..787fb4497 100644 --- a/pkg/proto/hapi/release/hook.pb.go +++ b/pkg/proto/hapi/release/hook.pb.go @@ -167,7 +167,7 @@ func init() { proto.RegisterFile("hapi/release/hook.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 371 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xdf, 0x8e, 0x93, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x64, 0x90, 0xdf, 0x8e, 0x93, 0x40, 0x14, 0x87, 0x65, 0x5b, 0xa0, 0x3d, 0x5d, 0xd7, 0x71, 0x62, 0x74, 0xd2, 0x1b, 0xc9, 0x5e, 0x71, 0x35, 0x98, 0x35, 0x3e, 0x00, 0xdb, 0x1d, 0x75, 0xb3, 0x84, 0x36, 0x03, 0xc4, 0xc4, 0x1b, 0xc2, 0xc6, 0x69, 0x21, 0x2d, 0x0c, 0x29, 0x53, 0x7d, 0x33, 0x9f, 0xc4, 0x07, 0x32, 0x33, 0xfc, 0x89, diff --git a/pkg/proto/hapi/release/info.pb.go b/pkg/proto/hapi/release/info.pb.go index 9485ad058..fd57fecf9 100644 --- a/pkg/proto/hapi/release/info.pb.go +++ b/pkg/proto/hapi/release/info.pb.go @@ -73,7 +73,7 @@ func init() { proto.RegisterFile("hapi/release/info.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ // 235 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x8f, 0x31, 0x4f, 0xc3, 0x30, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x8f, 0x31, 0x4f, 0xc3, 0x30, 0x10, 0x85, 0x95, 0x52, 0x5a, 0xd5, 0x6d, 0x19, 0x2c, 0x24, 0x42, 0x16, 0x22, 0xa6, 0x0e, 0xc8, 0x91, 0x80, 0x1d, 0x81, 0xba, 0xb0, 0x06, 0x26, 0x16, 0xe4, 0xe2, 0x73, 0xb1, 0xe4, 0xe6, 0x2c, 0xfb, 0x3a, 0xf0, 0x2f, 0xf8, 0xc9, 0xa8, 0xb6, 0x83, 0xd2, 0xa9, 0xab, 0xbf, 0xf7, 0x3e, 0xbf, diff --git a/pkg/proto/hapi/release/release.pb.go b/pkg/proto/hapi/release/release.pb.go index 47b321b50..69c7ea1b7 100644 --- a/pkg/proto/hapi/release/release.pb.go +++ b/pkg/proto/hapi/release/release.pb.go @@ -106,7 +106,7 @@ func init() { proto.RegisterFile("hapi/release/release.proto", fileDescriptor2) var fileDescriptor2 = []byte{ // 256 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xbf, 0x4e, 0xc3, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x64, 0x90, 0xbf, 0x4e, 0xc3, 0x40, 0x0c, 0xc6, 0x95, 0x36, 0x7f, 0x1a, 0xc3, 0x82, 0x07, 0xb0, 0x22, 0x86, 0x88, 0x01, 0x22, 0x86, 0x54, 0x82, 0x37, 0x80, 0x05, 0xd6, 0x1b, 0xd9, 0x8e, 0xe8, 0x42, 0x4e, 0xa5, 0xe7, 0x28, 0x17, 0xf1, 0x2c, 0x3c, 0x2e, 0xba, 0x3f, 0x85, 0x94, 0x2e, 0x4e, 0xec, 0xdf, 0xa7, 0xcf, 0xdf, 0x19, diff --git a/pkg/proto/hapi/release/status.pb.go b/pkg/proto/hapi/release/status.pb.go index 0098207a7..f6f6c2605 100644 --- a/pkg/proto/hapi/release/status.pb.go +++ b/pkg/proto/hapi/release/status.pb.go @@ -106,7 +106,7 @@ func init() { proto.RegisterFile("hapi/release/status.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ // 291 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xdf, 0x6a, 0xc2, 0x30, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x54, 0x90, 0xdf, 0x6a, 0xc2, 0x30, 0x14, 0xc6, 0x57, 0xad, 0x3a, 0x8f, 0x22, 0x21, 0x1b, 0xac, 0xca, 0x06, 0xc5, 0xab, 0xde, 0xac, 0x05, 0xf7, 0x04, 0xdb, 0x12, 0x87, 0xac, 0x54, 0x69, 0x2b, 0xfb, 0x73, 0x53, 0xaa, 0x9e, 0x39, 0xa1, 0x34, 0xd2, 0x24, 0x17, 0x7b, 0x88, 0xbd, 0xf3, 0x68, 0x2b, 0x74, 0x5e, 0x7e, 0xf9, 0xfd, diff --git a/pkg/proto/hapi/release/test_run.pb.go b/pkg/proto/hapi/release/test_run.pb.go index 79fce4ab4..ba935ee26 100644 --- a/pkg/proto/hapi/release/test_run.pb.go +++ b/pkg/proto/hapi/release/test_run.pb.go @@ -20,17 +20,20 @@ const ( TestRun_UNKNOWN TestRun_Status = 0 TestRun_SUCCESS TestRun_Status = 1 TestRun_FAILURE TestRun_Status = 2 + TestRun_RUNNING TestRun_Status = 3 ) var TestRun_Status_name = map[int32]string{ 0: "UNKNOWN", 1: "SUCCESS", 2: "FAILURE", + 3: "RUNNING", } var TestRun_Status_value = map[string]int32{ "UNKNOWN": 0, "SUCCESS": 1, "FAILURE": 2, + "RUNNING": 3, } func (x TestRun_Status) String() string { @@ -94,22 +97,23 @@ func init() { func init() { proto.RegisterFile("hapi/release/test_run.proto", fileDescriptor4) } var fileDescriptor4 = []byte{ - // 265 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x8f, 0x41, 0x4b, 0xfb, 0x40, - 0x14, 0xc4, 0xff, 0xc9, 0xbf, 0x26, 0x64, 0x53, 0x24, 0xec, 0x29, 0x54, 0xc1, 0xd0, 0x53, 0x4e, - 0xbb, 0x50, 0xbd, 0x78, 0xf0, 0x10, 0x4b, 0x05, 0x51, 0x22, 0x6c, 0x1a, 0x04, 0x2f, 0x65, 0xab, - 0xaf, 0x35, 0x90, 0x64, 0x43, 0xf6, 0xe5, 0x8b, 0xf8, 0x89, 0x65, 0x93, 0xad, 0x78, 0xf3, 0xf6, - 0x86, 0xf9, 0xcd, 0x30, 0x8f, 0x5c, 0x7c, 0xca, 0xae, 0xe2, 0x3d, 0xd4, 0x20, 0x35, 0x70, 0x04, - 0x8d, 0xbb, 0x7e, 0x68, 0x59, 0xd7, 0x2b, 0x54, 0x74, 0x6e, 0x4c, 0x66, 0xcd, 0xc5, 0xd5, 0x51, - 0xa9, 0x63, 0x0d, 0x7c, 0xf4, 0xf6, 0xc3, 0x81, 0x63, 0xd5, 0x80, 0x46, 0xd9, 0x74, 0x13, 0xbe, - 0xfc, 0x72, 0x89, 0xbf, 0x05, 0x8d, 0x62, 0x68, 0x29, 0x25, 0xb3, 0x56, 0x36, 0x10, 0x3b, 0x89, - 0x93, 0x06, 0x62, 0xbc, 0xe9, 0x0d, 0xf1, 0x34, 0x4a, 0x1c, 0x74, 0xec, 0x26, 0x4e, 0x7a, 0xbe, - 0xba, 0x64, 0xbf, 0xfb, 0x99, 0x8d, 0xb2, 0x62, 0x64, 0x84, 0x65, 0x4d, 0x53, 0xd5, 0x1e, 0x54, - 0xfc, 0x7f, 0x6a, 0x32, 0x37, 0xbd, 0x25, 0x44, 0xa3, 0xec, 0x11, 0x3e, 0x76, 0x12, 0xe3, 0x59, - 0xe2, 0xa4, 0xe1, 0x6a, 0xc1, 0xa6, 0x7d, 0xec, 0xb4, 0x8f, 0x6d, 0x4f, 0xfb, 0x44, 0x60, 0xe9, - 0x0c, 0xe9, 0x1d, 0x99, 0xbf, 0xab, 0xa6, 0xab, 0xc1, 0x86, 0xcf, 0xfe, 0x0c, 0x87, 0x3f, 0x7c, - 0x86, 0x4b, 0x4e, 0xbc, 0x69, 0x1f, 0x0d, 0x89, 0x5f, 0xe6, 0x4f, 0xf9, 0xcb, 0x6b, 0x1e, 0xfd, - 0x33, 0xa2, 0x28, 0xd7, 0xeb, 0x4d, 0x51, 0x44, 0x8e, 0x11, 0x0f, 0xd9, 0xe3, 0x73, 0x29, 0x36, - 0x91, 0x7b, 0x1f, 0xbc, 0xf9, 0xf6, 0xc1, 0xbd, 0x37, 0x96, 0x5f, 0x7f, 0x07, 0x00, 0x00, 0xff, - 0xff, 0x8d, 0xb9, 0xce, 0x57, 0x74, 0x01, 0x00, 0x00, + // 274 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x8f, 0xc1, 0x4b, 0xfb, 0x30, + 0x1c, 0xc5, 0x7f, 0xe9, 0xf6, 0x6b, 0x69, 0x3a, 0xa4, 0xe4, 0x54, 0xa6, 0x60, 0xd9, 0xa9, 0xa7, + 0x14, 0xa6, 0x17, 0x41, 0x0f, 0x75, 0x4c, 0x19, 0x4a, 0x84, 0x74, 0x45, 0xf0, 0x32, 0x32, 0xcd, + 0x66, 0xa1, 0x6d, 0x4a, 0xf3, 0xed, 0xdf, 0xe3, 0xbf, 0x2a, 0x69, 0x33, 0xf1, 0xe6, 0xed, 0xfb, + 0x78, 0x9f, 0xf7, 0xf2, 0x82, 0xcf, 0x3f, 0x45, 0x5b, 0xa6, 0x9d, 0xac, 0xa4, 0xd0, 0x32, 0x05, + 0xa9, 0x61, 0xd7, 0xf5, 0x0d, 0x6d, 0x3b, 0x05, 0x8a, 0xcc, 0x8c, 0x49, 0xad, 0x39, 0xbf, 0x3c, + 0x2a, 0x75, 0xac, 0x64, 0x3a, 0x78, 0xfb, 0xfe, 0x90, 0x42, 0x59, 0x4b, 0x0d, 0xa2, 0x6e, 0x47, + 0x7c, 0xf1, 0xe5, 0x60, 0x6f, 0x2b, 0x35, 0xf0, 0xbe, 0x21, 0x04, 0x4f, 0x1b, 0x51, 0xcb, 0x08, + 0xc5, 0x28, 0xf1, 0xf9, 0x70, 0x93, 0x6b, 0xec, 0x6a, 0x10, 0xd0, 0xeb, 0xc8, 0x89, 0x51, 0x72, + 0xb6, 0xbc, 0xa0, 0xbf, 0xfb, 0xa9, 0x8d, 0xd2, 0x7c, 0x60, 0xb8, 0x65, 0x4d, 0x53, 0xd9, 0x1c, + 0x54, 0x34, 0x19, 0x9b, 0xcc, 0x4d, 0x6e, 0x30, 0xd6, 0x20, 0x3a, 0x90, 0x1f, 0x3b, 0x01, 0xd1, + 0x34, 0x46, 0x49, 0xb0, 0x9c, 0xd3, 0x71, 0x1f, 0x3d, 0xed, 0xa3, 0xdb, 0xd3, 0x3e, 0xee, 0x5b, + 0x3a, 0x03, 0x72, 0x87, 0x67, 0xef, 0xaa, 0x6e, 0x2b, 0x69, 0xc3, 0xff, 0xff, 0x0c, 0x07, 0x3f, + 0x7c, 0x06, 0x8b, 0x5b, 0xec, 0x8e, 0xfb, 0x48, 0x80, 0xbd, 0x82, 0x3d, 0xb1, 0x97, 0x57, 0x16, + 0xfe, 0x33, 0x22, 0x2f, 0x56, 0xab, 0x75, 0x9e, 0x87, 0xc8, 0x88, 0x87, 0x6c, 0xf3, 0x5c, 0xf0, + 0x75, 0xe8, 0x18, 0xc1, 0x0b, 0xc6, 0x36, 0xec, 0x31, 0x9c, 0xdc, 0xfb, 0x6f, 0x9e, 0xfd, 0xed, + 0xde, 0x1d, 0x5e, 0xba, 0xfa, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x31, 0x86, 0x46, 0xdb, 0x81, 0x01, + 0x00, 0x00, } diff --git a/pkg/proto/hapi/release/test_suite.pb.go b/pkg/proto/hapi/release/test_suite.pb.go index f168bf1d2..27fe45ac5 100644 --- a/pkg/proto/hapi/release/test_suite.pb.go +++ b/pkg/proto/hapi/release/test_suite.pb.go @@ -58,7 +58,7 @@ func init() { proto.RegisterFile("hapi/release/test_suite.proto", fileDescriptor var fileDescriptor5 = []byte{ // 207 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x8f, 0xc1, 0x4a, 0x86, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x8f, 0xc1, 0x4a, 0x86, 0x40, 0x14, 0x85, 0x31, 0x21, 0x71, 0x74, 0x35, 0x10, 0x88, 0x11, 0x49, 0x2b, 0x57, 0x33, 0x60, 0xab, 0x16, 0x2d, 0xec, 0x11, 0xcc, 0x55, 0x1b, 0x19, 0xeb, 0x66, 0xc2, 0xe8, 0x0c, 0x73, 0xef, 0xbc, 0x5a, 0xcf, 0x17, 0xea, 0x18, 0x41, 0x8b, 0x7f, 0xfd, 0x7d, 0xe7, 0x9c, 0x7b, 0xd9, 0xdd, 0x97, diff --git a/pkg/proto/hapi/services/tiller.pb.go b/pkg/proto/hapi/services/tiller.pb.go index d3f8676fc..21d8a7b42 100644 --- a/pkg/proto/hapi/services/tiller.pb.go +++ b/pkg/proto/hapi/services/tiller.pb.go @@ -40,6 +40,7 @@ import hapi_chart3 "k8s.io/helm/pkg/proto/hapi/chart" import hapi_chart "k8s.io/helm/pkg/proto/hapi/chart" import hapi_release5 "k8s.io/helm/pkg/proto/hapi/release" import hapi_release4 "k8s.io/helm/pkg/proto/hapi/release" +import hapi_release1 "k8s.io/helm/pkg/proto/hapi/release" import hapi_release3 "k8s.io/helm/pkg/proto/hapi/release" import hapi_version "k8s.io/helm/pkg/proto/hapi/version" @@ -848,7 +849,8 @@ func (m *TestReleaseRequest) GetCleanup() bool { // TestReleaseResponse represents a message from executing a test type TestReleaseResponse struct { - Msg string `protobuf:"bytes,1,opt,name=msg" json:"msg,omitempty"` + Msg string `protobuf:"bytes,1,opt,name=msg" json:"msg,omitempty"` + Status hapi_release1.TestRun_Status `protobuf:"varint,2,opt,name=status,enum=hapi.release.TestRun_Status" json:"status,omitempty"` } func (m *TestReleaseResponse) Reset() { *m = TestReleaseResponse{} } @@ -863,6 +865,13 @@ func (m *TestReleaseResponse) GetMsg() string { return "" } +func (m *TestReleaseResponse) GetStatus() hapi_release1.TestRun_Status { + if m != nil { + return m.Status + } + return hapi_release1.TestRun_UNKNOWN +} + func init() { proto.RegisterType((*ListReleasesRequest)(nil), "hapi.services.tiller.ListReleasesRequest") proto.RegisterType((*ListSort)(nil), "hapi.services.tiller.ListSort") @@ -1342,79 +1351,81 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("hapi/services/tiller.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1170 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xdb, 0x6e, 0xe3, 0x44, - 0x18, 0xae, 0xe3, 0x1c, 0xff, 0x1e, 0x48, 0xa7, 0x27, 0xd7, 0x02, 0x54, 0x8c, 0xa0, 0xd9, 0x85, - 0x4d, 0x21, 0x5c, 0x21, 0x21, 0xa4, 0x6e, 0x37, 0x6a, 0x0b, 0xa5, 0x2b, 0x39, 0xdb, 0x45, 0x42, - 0x88, 0xc8, 0x4d, 0x26, 0xad, 0x59, 0xc7, 0x13, 0x3c, 0xe3, 0xb2, 0xbd, 0xe5, 0x8e, 0x47, 0xe1, - 0x2d, 0x78, 0x01, 0x78, 0x01, 0x5e, 0x06, 0x79, 0x0e, 0x6e, 0xc6, 0xb5, 0x5b, 0x6f, 0x6e, 0x62, - 0xcf, 0xfc, 0xe7, 0xef, 0xff, 0xfd, 0xcd, 0x04, 0xec, 0x6b, 0x6f, 0xe6, 0x1f, 0x50, 0x1c, 0xdd, - 0xf8, 0x23, 0x4c, 0x0f, 0x98, 0x1f, 0x04, 0x38, 0xea, 0xce, 0x22, 0xc2, 0x08, 0xda, 0x4c, 0x64, - 0x5d, 0x25, 0xeb, 0x0a, 0x99, 0xbd, 0xcd, 0x2d, 0x46, 0xd7, 0x5e, 0xc4, 0xc4, 0xaf, 0xd0, 0xb6, - 0x77, 0xe6, 0xf7, 0x49, 0x38, 0xf1, 0xaf, 0xa4, 0x40, 0x84, 0x88, 0x70, 0x80, 0x3d, 0x8a, 0xd5, - 0x53, 0x33, 0x52, 0x32, 0x3f, 0x9c, 0x10, 0x29, 0xd8, 0xd5, 0x04, 0x94, 0x79, 0x2c, 0xa6, 0x9a, - 0xbf, 0x1b, 0x1c, 0x51, 0x9f, 0x84, 0xea, 0x29, 0x64, 0xce, 0xdf, 0x15, 0xd8, 0x38, 0xf3, 0x29, - 0x73, 0x85, 0x21, 0x75, 0xf1, 0x6f, 0x31, 0xa6, 0x0c, 0x6d, 0x42, 0x2d, 0xf0, 0xa7, 0x3e, 0xb3, - 0x8c, 0x3d, 0xa3, 0x63, 0xba, 0x62, 0x81, 0xb6, 0xa1, 0x4e, 0x26, 0x13, 0x8a, 0x99, 0x55, 0xd9, - 0x33, 0x3a, 0x2d, 0x57, 0xae, 0xd0, 0xb7, 0xd0, 0xa0, 0x24, 0x62, 0xc3, 0xcb, 0x5b, 0xcb, 0xdc, - 0x33, 0x3a, 0x6b, 0xbd, 0x4f, 0xba, 0x79, 0x50, 0x74, 0x93, 0x48, 0x03, 0x12, 0xb1, 0x6e, 0xf2, - 0xf3, 0xfc, 0xd6, 0xad, 0x53, 0xfe, 0x4c, 0xfc, 0x4e, 0xfc, 0x80, 0xe1, 0xc8, 0xaa, 0x0a, 0xbf, - 0x62, 0x85, 0x8e, 0x01, 0xb8, 0x5f, 0x12, 0x8d, 0x71, 0x64, 0xd5, 0xb8, 0xeb, 0x4e, 0x09, 0xd7, - 0x2f, 0x13, 0x7d, 0xb7, 0x45, 0xd5, 0x2b, 0xfa, 0x06, 0x56, 0x04, 0x24, 0xc3, 0x11, 0x19, 0x63, - 0x6a, 0xd5, 0xf7, 0xcc, 0xce, 0x5a, 0x6f, 0x57, 0xb8, 0x52, 0x08, 0x0f, 0x04, 0x68, 0x47, 0x64, - 0x8c, 0xdd, 0x65, 0xa1, 0x9e, 0xbc, 0x53, 0xf4, 0x3e, 0xb4, 0x42, 0x6f, 0x8a, 0xe9, 0xcc, 0x1b, - 0x61, 0xab, 0xc1, 0x33, 0xbc, 0xdb, 0x70, 0x7e, 0x81, 0xa6, 0x0a, 0xee, 0xf4, 0xa0, 0x2e, 0x4a, - 0x43, 0xcb, 0xd0, 0xb8, 0x38, 0xff, 0xfe, 0xfc, 0xe5, 0x8f, 0xe7, 0xed, 0x25, 0xd4, 0x84, 0xea, - 0xf9, 0xe1, 0x0f, 0xfd, 0xb6, 0x81, 0xd6, 0x61, 0xf5, 0xec, 0x70, 0xf0, 0x6a, 0xe8, 0xf6, 0xcf, - 0xfa, 0x87, 0x83, 0xfe, 0x8b, 0x76, 0xc5, 0xf9, 0x10, 0x5a, 0x69, 0xce, 0xa8, 0x01, 0xe6, 0xe1, - 0xe0, 0x48, 0x98, 0xbc, 0xe8, 0x0f, 0x8e, 0xda, 0x86, 0xf3, 0xa7, 0x01, 0x9b, 0x7a, 0x8b, 0xe8, - 0x8c, 0x84, 0x14, 0x27, 0x3d, 0x1a, 0x91, 0x38, 0x4c, 0x7b, 0xc4, 0x17, 0x08, 0x41, 0x35, 0xc4, - 0x6f, 0x55, 0x87, 0xf8, 0x7b, 0xa2, 0xc9, 0x08, 0xf3, 0x02, 0xde, 0x1d, 0xd3, 0x15, 0x0b, 0xf4, - 0x25, 0x34, 0x65, 0xe9, 0xd4, 0xaa, 0xee, 0x99, 0x9d, 0xe5, 0xde, 0x96, 0x0e, 0x88, 0x8c, 0xe8, - 0xa6, 0x6a, 0xce, 0x31, 0xec, 0x1c, 0x63, 0x95, 0x89, 0xc0, 0x4b, 0x4d, 0x4c, 0x12, 0xd7, 0x9b, - 0x62, 0x9e, 0x4c, 0x12, 0xd7, 0x9b, 0x62, 0x64, 0x41, 0x43, 0x8e, 0x1b, 0x4f, 0xa7, 0xe6, 0xaa, - 0xa5, 0xc3, 0xc0, 0xba, 0xef, 0x48, 0xd6, 0x95, 0xe7, 0xe9, 0x53, 0xa8, 0x26, 0xc3, 0xce, 0xdd, - 0x2c, 0xf7, 0x90, 0x9e, 0xe7, 0x69, 0x38, 0x21, 0x2e, 0x97, 0xeb, 0xad, 0x32, 0xb3, 0xad, 0x3a, - 0x99, 0x8f, 0x7a, 0x44, 0x42, 0x86, 0x43, 0xb6, 0x58, 0xfe, 0x67, 0xb0, 0x9b, 0xe3, 0x49, 0x16, - 0x70, 0x00, 0x0d, 0x99, 0x1a, 0xf7, 0x56, 0x88, 0xab, 0xd2, 0x72, 0xfe, 0xa9, 0xc0, 0xe6, 0xc5, - 0x6c, 0xec, 0x31, 0xac, 0x44, 0x0f, 0x24, 0xb5, 0x0f, 0x35, 0x4e, 0x1a, 0x12, 0x8b, 0x75, 0xe1, - 0x5b, 0x30, 0xcb, 0x51, 0xf2, 0xeb, 0x0a, 0x39, 0x7a, 0x0a, 0xf5, 0x1b, 0x2f, 0x88, 0x31, 0xe5, - 0x40, 0xa4, 0xa8, 0x49, 0x4d, 0xce, 0x38, 0xae, 0xd4, 0x40, 0x3b, 0xd0, 0x18, 0x47, 0xb7, 0xc3, - 0x28, 0x0e, 0xf9, 0x27, 0xd8, 0x74, 0xeb, 0xe3, 0xe8, 0xd6, 0x8d, 0x43, 0xf4, 0x31, 0xac, 0x8e, - 0x7d, 0xea, 0x5d, 0x06, 0x78, 0x78, 0x4d, 0xc8, 0x1b, 0xca, 0xbf, 0xc2, 0xa6, 0xbb, 0x22, 0x37, - 0x4f, 0x92, 0x3d, 0x64, 0x27, 0x93, 0x34, 0x8a, 0xb0, 0xc7, 0xb0, 0x55, 0xe7, 0xf2, 0x74, 0x9d, - 0x60, 0xc8, 0xfc, 0x29, 0x26, 0x31, 0xe3, 0x9f, 0x8e, 0xe9, 0xaa, 0x25, 0xfa, 0x08, 0x56, 0x22, - 0x4c, 0x31, 0x1b, 0xca, 0x2c, 0x9b, 0xdc, 0x72, 0x99, 0xef, 0xbd, 0x16, 0x69, 0x21, 0xa8, 0xfe, - 0xee, 0xf9, 0xcc, 0x6a, 0x71, 0x11, 0x7f, 0x17, 0x66, 0x31, 0xc5, 0xca, 0x0c, 0x94, 0x59, 0x4c, - 0xb1, 0x30, 0x73, 0x4e, 0x60, 0x2b, 0x03, 0xe7, 0xa2, 0x9d, 0xf9, 0xd7, 0x80, 0x6d, 0x97, 0x04, - 0xc1, 0xa5, 0x37, 0x7a, 0x53, 0xa2, 0x37, 0x73, 0x30, 0x56, 0x1e, 0x86, 0xd1, 0xcc, 0x81, 0x71, - 0x6e, 0xdc, 0xaa, 0xda, 0xb8, 0x69, 0x00, 0xd7, 0x8a, 0x01, 0xae, 0xeb, 0x00, 0x2b, 0xf4, 0x1a, - 0x77, 0xe8, 0x39, 0xdf, 0xc1, 0xce, 0xbd, 0x7a, 0x16, 0x05, 0xe7, 0xaf, 0x0a, 0x6c, 0x9d, 0x86, - 0x94, 0x79, 0x41, 0x90, 0xc1, 0x26, 0x9d, 0x51, 0xa3, 0xf4, 0x8c, 0x56, 0xde, 0x65, 0x46, 0x4d, - 0x0d, 0x5c, 0xd5, 0x89, 0xea, 0x5c, 0x27, 0x4a, 0xcd, 0xad, 0xc6, 0x16, 0xf5, 0x0c, 0x5b, 0xa0, - 0x0f, 0x00, 0xc4, 0xa0, 0x71, 0xe7, 0x02, 0xc4, 0x16, 0xdf, 0x39, 0x97, 0xe4, 0xa0, 0x70, 0x6f, - 0xe6, 0xe3, 0x3e, 0x37, 0xb5, 0xce, 0x29, 0x6c, 0x67, 0xa1, 0x5a, 0x14, 0xf6, 0x3f, 0x0c, 0xd8, - 0xb9, 0x08, 0xfd, 0x5c, 0xe0, 0xf3, 0x86, 0xf2, 0x1e, 0x14, 0x95, 0x1c, 0x28, 0x36, 0xa1, 0x36, - 0x8b, 0xa3, 0x2b, 0x2c, 0xa1, 0x15, 0x8b, 0xf9, 0x1a, 0xab, 0x5a, 0x8d, 0xce, 0x10, 0xac, 0xfb, - 0x39, 0x2c, 0x58, 0x51, 0x92, 0x75, 0xca, 0xee, 0x2d, 0xc1, 0xe4, 0xce, 0x06, 0xac, 0x1f, 0x63, - 0xf6, 0x5a, 0x7c, 0x00, 0xb2, 0x3c, 0xa7, 0x0f, 0x68, 0x7e, 0xf3, 0x2e, 0x9e, 0xdc, 0xd2, 0xe3, - 0xa9, 0xab, 0x8e, 0xd2, 0x57, 0x5a, 0xce, 0xd7, 0xdc, 0xf7, 0x89, 0x4f, 0x19, 0x89, 0x6e, 0x1f, - 0x82, 0xae, 0x0d, 0xe6, 0xd4, 0x7b, 0x2b, 0xc9, 0x3f, 0x79, 0x75, 0x8e, 0x79, 0x06, 0xa9, 0xa9, - 0xcc, 0x60, 0xfe, 0x28, 0x35, 0xca, 0x1d, 0xa5, 0x3f, 0x03, 0x7a, 0x85, 0xd3, 0x53, 0xfd, 0x91, - 0x53, 0x48, 0x35, 0xa1, 0xa2, 0x0f, 0x9a, 0x05, 0x8d, 0x51, 0x80, 0xbd, 0x30, 0x9e, 0xc9, 0xb6, - 0xa9, 0xa5, 0xb3, 0x0f, 0x1b, 0x9a, 0x77, 0x99, 0x67, 0x52, 0x0f, 0xbd, 0x92, 0xde, 0x93, 0xd7, - 0xde, 0x7f, 0x4d, 0x58, 0x53, 0xc7, 0xb0, 0xb8, 0x52, 0x21, 0x1f, 0x56, 0xe6, 0xef, 0x1b, 0xe8, - 0x49, 0xf1, 0x8d, 0x2b, 0x73, 0x6d, 0xb4, 0x9f, 0x96, 0x51, 0x15, 0xb9, 0x38, 0x4b, 0x5f, 0x18, - 0x88, 0x42, 0x3b, 0x7b, 0x0d, 0x40, 0xcf, 0xf2, 0x7d, 0x14, 0xdc, 0x3b, 0xec, 0x6e, 0x59, 0x75, - 0x15, 0x16, 0xdd, 0xf0, 0xee, 0xeb, 0x67, 0x37, 0x7a, 0xd4, 0x8d, 0x7e, 0x5d, 0xb0, 0x0f, 0x4a, - 0xeb, 0xa7, 0x71, 0x7f, 0x85, 0x55, 0xed, 0x54, 0x42, 0x05, 0x68, 0xe5, 0xdd, 0x04, 0xec, 0xcf, - 0x4a, 0xe9, 0xa6, 0xb1, 0xa6, 0xb0, 0xa6, 0xd3, 0x0d, 0x2a, 0x70, 0x90, 0xcb, 0xdf, 0xf6, 0xe7, - 0xe5, 0x94, 0xd3, 0x70, 0x14, 0xda, 0x59, 0x36, 0x28, 0xea, 0x63, 0x01, 0x73, 0x15, 0xf5, 0xb1, - 0x88, 0x64, 0x9c, 0x25, 0xe4, 0x01, 0xdc, 0x91, 0x01, 0xda, 0x2f, 0x6c, 0x88, 0xce, 0x21, 0x76, - 0xe7, 0x71, 0xc5, 0x34, 0xc4, 0x0c, 0xde, 0xcb, 0x9c, 0x96, 0xa8, 0x00, 0x9a, 0xfc, 0x4b, 0x82, - 0xfd, 0xac, 0xa4, 0x76, 0xa6, 0x28, 0xc9, 0x2f, 0x0f, 0x14, 0xa5, 0x93, 0xd7, 0x03, 0x45, 0x65, - 0xa8, 0xca, 0x59, 0x42, 0x3e, 0xac, 0xb9, 0x71, 0x28, 0x43, 0x27, 0x2c, 0x81, 0x0a, 0xac, 0xef, - 0xf3, 0x93, 0xfd, 0xa4, 0x84, 0xe6, 0xdd, 0xf7, 0xfd, 0x1c, 0x7e, 0x6a, 0x2a, 0xd5, 0xcb, 0x3a, - 0xff, 0xc7, 0xf9, 0xd5, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x30, 0x80, 0xed, 0x18, 0x42, 0x0f, - 0x00, 0x00, + // 1203 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x57, 0xdd, 0x6e, 0xe3, 0xc4, + 0x17, 0xaf, 0xf3, 0xe1, 0x24, 0xa7, 0x6d, 0xfe, 0xe9, 0xf4, 0xcb, 0xf5, 0x7f, 0x41, 0xc5, 0x08, + 0x36, 0xbb, 0xb0, 0x29, 0x04, 0x6e, 0x90, 0x10, 0x52, 0xb7, 0x1b, 0xb5, 0x85, 0xd2, 0x95, 0x9c, + 0xed, 0x22, 0x21, 0x20, 0x72, 0x93, 0x49, 0x6b, 0xd6, 0xb1, 0x83, 0x67, 0x5c, 0xb6, 0xb7, 0xdc, + 0xf1, 0x28, 0xbc, 0x05, 0x2f, 0x00, 0x2f, 0xc0, 0xcb, 0xa0, 0xf9, 0x72, 0x33, 0xae, 0xdd, 0x9a, + 0xde, 0xc4, 0x33, 0x73, 0xbe, 0x7f, 0xe7, 0xcc, 0x99, 0x13, 0xb0, 0x2f, 0xbd, 0xb9, 0xbf, 0x47, + 0x70, 0x7c, 0xe5, 0x8f, 0x31, 0xd9, 0xa3, 0x7e, 0x10, 0xe0, 0xb8, 0x37, 0x8f, 0x23, 0x1a, 0xa1, + 0x0d, 0x46, 0xeb, 0x29, 0x5a, 0x4f, 0xd0, 0xec, 0x2d, 0x2e, 0x31, 0xbe, 0xf4, 0x62, 0x2a, 0x7e, + 0x05, 0xb7, 0xbd, 0xbd, 0x78, 0x1e, 0x85, 0x53, 0xff, 0x42, 0x12, 0x84, 0x89, 0x18, 0x07, 0xd8, + 0x23, 0x58, 0x7d, 0x35, 0x21, 0x45, 0xf3, 0xc3, 0x69, 0x24, 0x09, 0xff, 0xd7, 0x08, 0x14, 0x13, + 0x3a, 0x8a, 0x93, 0x50, 0x12, 0x77, 0x34, 0x22, 0xa1, 0x1e, 0x4d, 0x88, 0x66, 0xec, 0x0a, 0xc7, + 0xc4, 0x8f, 0x42, 0xf5, 0x15, 0x34, 0xe7, 0xcf, 0x0a, 0xac, 0x9f, 0xf8, 0x84, 0xba, 0x42, 0x90, + 0xb8, 0xf8, 0x97, 0x04, 0x13, 0x8a, 0x36, 0xa0, 0x1e, 0xf8, 0x33, 0x9f, 0x5a, 0xc6, 0xae, 0xd1, + 0xad, 0xba, 0x62, 0x83, 0xb6, 0xc0, 0x8c, 0xa6, 0x53, 0x82, 0xa9, 0x55, 0xd9, 0x35, 0xba, 0x2d, + 0x57, 0xee, 0xd0, 0x57, 0xd0, 0x20, 0x51, 0x4c, 0x47, 0xe7, 0xd7, 0x56, 0x75, 0xd7, 0xe8, 0xb6, + 0xfb, 0x1f, 0xf4, 0xf2, 0x70, 0xea, 0x31, 0x4b, 0xc3, 0x28, 0xa6, 0x3d, 0xf6, 0xf3, 0xfc, 0xda, + 0x35, 0x09, 0xff, 0x32, 0xbd, 0x53, 0x3f, 0xa0, 0x38, 0xb6, 0x6a, 0x42, 0xaf, 0xd8, 0xa1, 0x43, + 0x00, 0xae, 0x37, 0x8a, 0x27, 0x38, 0xb6, 0xea, 0x5c, 0x75, 0xb7, 0x84, 0xea, 0x97, 0x8c, 0xdf, + 0x6d, 0x11, 0xb5, 0x44, 0x5f, 0xc2, 0x8a, 0x80, 0x64, 0x34, 0x8e, 0x26, 0x98, 0x58, 0xe6, 0x6e, + 0xb5, 0xdb, 0xee, 0xef, 0x08, 0x55, 0x0a, 0xfe, 0xa1, 0x00, 0xed, 0x20, 0x9a, 0x60, 0x77, 0x59, + 0xb0, 0xb3, 0x35, 0x41, 0x8f, 0xa0, 0x15, 0x7a, 0x33, 0x4c, 0xe6, 0xde, 0x18, 0x5b, 0x0d, 0xee, + 0xe1, 0xcd, 0x81, 0xf3, 0x13, 0x34, 0x95, 0x71, 0xa7, 0x0f, 0xa6, 0x08, 0x0d, 0x2d, 0x43, 0xe3, + 0xec, 0xf4, 0x9b, 0xd3, 0x97, 0xdf, 0x9d, 0x76, 0x96, 0x50, 0x13, 0x6a, 0xa7, 0xfb, 0xdf, 0x0e, + 0x3a, 0x06, 0x5a, 0x83, 0xd5, 0x93, 0xfd, 0xe1, 0xab, 0x91, 0x3b, 0x38, 0x19, 0xec, 0x0f, 0x07, + 0x2f, 0x3a, 0x15, 0xe7, 0x5d, 0x68, 0xa5, 0x3e, 0xa3, 0x06, 0x54, 0xf7, 0x87, 0x07, 0x42, 0xe4, + 0xc5, 0x60, 0x78, 0xd0, 0x31, 0x9c, 0xdf, 0x0d, 0xd8, 0xd0, 0x53, 0x44, 0xe6, 0x51, 0x48, 0x30, + 0xcb, 0xd1, 0x38, 0x4a, 0xc2, 0x34, 0x47, 0x7c, 0x83, 0x10, 0xd4, 0x42, 0xfc, 0x56, 0x65, 0x88, + 0xaf, 0x19, 0x27, 0x8d, 0xa8, 0x17, 0xf0, 0xec, 0x54, 0x5d, 0xb1, 0x41, 0x9f, 0x42, 0x53, 0x86, + 0x4e, 0xac, 0xda, 0x6e, 0xb5, 0xbb, 0xdc, 0xdf, 0xd4, 0x01, 0x91, 0x16, 0xdd, 0x94, 0xcd, 0x39, + 0x84, 0xed, 0x43, 0xac, 0x3c, 0x11, 0x78, 0xa9, 0x8a, 0x61, 0x76, 0xbd, 0x19, 0xe6, 0xce, 0x30, + 0xbb, 0xde, 0x0c, 0x23, 0x0b, 0x1a, 0xb2, 0xdc, 0xb8, 0x3b, 0x75, 0x57, 0x6d, 0x1d, 0x0a, 0xd6, + 0x6d, 0x45, 0x32, 0xae, 0x3c, 0x4d, 0x1f, 0x42, 0x8d, 0xdd, 0x04, 0xae, 0x66, 0xb9, 0x8f, 0x74, + 0x3f, 0x8f, 0xc3, 0x69, 0xe4, 0x72, 0xba, 0x9e, 0xaa, 0x6a, 0x36, 0x55, 0x47, 0x8b, 0x56, 0x0f, + 0xa2, 0x90, 0xe2, 0x90, 0x3e, 0xcc, 0xff, 0x13, 0xd8, 0xc9, 0xd1, 0x24, 0x03, 0xd8, 0x83, 0x86, + 0x74, 0x8d, 0x6b, 0x2b, 0xc4, 0x55, 0x71, 0x39, 0x7f, 0x55, 0x60, 0xe3, 0x6c, 0x3e, 0xf1, 0x28, + 0x56, 0xa4, 0x3b, 0x9c, 0x7a, 0x0c, 0x75, 0xde, 0x51, 0x24, 0x16, 0x6b, 0x42, 0xb7, 0x68, 0x3b, + 0x07, 0xec, 0xd7, 0x15, 0x74, 0xf4, 0x14, 0xcc, 0x2b, 0x2f, 0x48, 0x30, 0xe1, 0x40, 0xa4, 0xa8, + 0x49, 0x4e, 0xde, 0x8e, 0x5c, 0xc9, 0x81, 0xb6, 0xa1, 0x31, 0x89, 0xaf, 0x59, 0x3f, 0xe1, 0x57, + 0xb0, 0xe9, 0x9a, 0x93, 0xf8, 0xda, 0x4d, 0x42, 0xf4, 0x3e, 0xac, 0x4e, 0x7c, 0xe2, 0x9d, 0x07, + 0x78, 0x74, 0x19, 0x45, 0x6f, 0x08, 0xbf, 0x85, 0x4d, 0x77, 0x45, 0x1e, 0x1e, 0xb1, 0x33, 0x64, + 0xb3, 0x4a, 0x1a, 0xc7, 0xd8, 0xa3, 0xd8, 0x32, 0x39, 0x3d, 0xdd, 0x33, 0x0c, 0xa9, 0x3f, 0xc3, + 0x51, 0x42, 0xf9, 0xd5, 0xa9, 0xba, 0x6a, 0x8b, 0xde, 0x83, 0x95, 0x18, 0x13, 0x4c, 0x47, 0xd2, + 0xcb, 0x26, 0x97, 0x5c, 0xe6, 0x67, 0xaf, 0x85, 0x5b, 0x08, 0x6a, 0xbf, 0x7a, 0x3e, 0xb5, 0x5a, + 0x9c, 0xc4, 0xd7, 0x42, 0x2c, 0x21, 0x58, 0x89, 0x81, 0x12, 0x4b, 0x08, 0x16, 0x62, 0xce, 0x11, + 0x6c, 0x66, 0xe0, 0x7c, 0x68, 0x66, 0xfe, 0x36, 0x60, 0xcb, 0x8d, 0x82, 0xe0, 0xdc, 0x1b, 0xbf, + 0x29, 0x91, 0x9b, 0x05, 0x18, 0x2b, 0x77, 0xc3, 0x58, 0xcd, 0x81, 0x71, 0xa1, 0xdc, 0x6a, 0x5a, + 0xb9, 0x69, 0x00, 0xd7, 0x8b, 0x01, 0x36, 0x75, 0x80, 0x15, 0x7a, 0x8d, 0x1b, 0xf4, 0x9c, 0xaf, + 0x61, 0xfb, 0x56, 0x3c, 0x0f, 0x05, 0xe7, 0x8f, 0x0a, 0x6c, 0x1e, 0x87, 0x84, 0x7a, 0x41, 0x90, + 0xc1, 0x26, 0xad, 0x51, 0xa3, 0x74, 0x8d, 0x56, 0xfe, 0x4b, 0x8d, 0x56, 0x35, 0x70, 0x55, 0x26, + 0x6a, 0x0b, 0x99, 0x28, 0x55, 0xb7, 0x5a, 0xb7, 0x30, 0x33, 0xdd, 0x02, 0xbd, 0x03, 0x20, 0x0a, + 0x8d, 0x2b, 0x17, 0x20, 0xb6, 0xf8, 0xc9, 0xa9, 0x6c, 0x0e, 0x0a, 0xf7, 0x66, 0x3e, 0xee, 0x0b, + 0x55, 0xeb, 0x1c, 0xc3, 0x56, 0x16, 0xaa, 0x87, 0xc2, 0xfe, 0x9b, 0x01, 0xdb, 0x67, 0xa1, 0x9f, + 0x0b, 0x7c, 0x5e, 0x51, 0xde, 0x82, 0xa2, 0x92, 0x03, 0xc5, 0x06, 0xd4, 0xe7, 0x49, 0x7c, 0x81, + 0x25, 0xb4, 0x62, 0xb3, 0x18, 0x63, 0x4d, 0x8b, 0xd1, 0x19, 0x81, 0x75, 0xdb, 0x87, 0x07, 0x46, + 0xc4, 0xbc, 0x4e, 0xbb, 0x7b, 0x4b, 0x74, 0x72, 0x67, 0x1d, 0xd6, 0x0e, 0x31, 0x7d, 0x2d, 0x2e, + 0x80, 0x0c, 0xcf, 0x19, 0x00, 0x5a, 0x3c, 0xbc, 0xb1, 0x27, 0x8f, 0x74, 0x7b, 0x6a, 0xd4, 0x51, + 0xfc, 0x8a, 0xcb, 0xf9, 0x82, 0xeb, 0x3e, 0xf2, 0x09, 0x8d, 0xe2, 0xeb, 0xbb, 0xa0, 0xeb, 0x40, + 0x75, 0xe6, 0xbd, 0x95, 0xcd, 0x9f, 0x2d, 0x9d, 0x43, 0xee, 0x41, 0x2a, 0x2a, 0x3d, 0x58, 0x7c, + 0x4a, 0x8d, 0x72, 0x4f, 0xe9, 0x0f, 0x80, 0x5e, 0xe1, 0xf4, 0x55, 0xbf, 0xe7, 0x15, 0x52, 0x49, + 0xa8, 0xe8, 0x85, 0x66, 0x41, 0x63, 0x1c, 0x60, 0x2f, 0x4c, 0xe6, 0x32, 0x6d, 0x6a, 0xeb, 0xfc, + 0x08, 0xeb, 0x9a, 0x76, 0xe9, 0x27, 0x8b, 0x87, 0x5c, 0x48, 0xed, 0x6c, 0x89, 0x3e, 0x07, 0x53, + 0x8c, 0x3a, 0x5c, 0x77, 0xbb, 0xff, 0x48, 0xf7, 0x9b, 0x2b, 0x49, 0x42, 0x39, 0x1b, 0xb9, 0x92, + 0xb7, 0xff, 0x4f, 0x13, 0xda, 0xea, 0xf1, 0x16, 0x83, 0x18, 0xf2, 0x61, 0x65, 0x71, 0x4a, 0x41, + 0x4f, 0x8a, 0xe7, 0xb4, 0xcc, 0xb0, 0x69, 0x3f, 0x2d, 0xc3, 0x2a, 0x22, 0x70, 0x96, 0x3e, 0x31, + 0x10, 0x81, 0x4e, 0x76, 0x78, 0x40, 0xcf, 0xf2, 0x75, 0x14, 0x4c, 0x2b, 0x76, 0xaf, 0x2c, 0xbb, + 0x32, 0x8b, 0xae, 0x78, 0xcd, 0xe8, 0x2f, 0x3e, 0xba, 0x57, 0x8d, 0x3e, 0x64, 0xd8, 0x7b, 0xa5, + 0xf9, 0x53, 0xbb, 0x3f, 0xc3, 0xaa, 0xf6, 0x96, 0xa1, 0x02, 0xb4, 0xf2, 0xe6, 0x07, 0xfb, 0xa3, + 0x52, 0xbc, 0xa9, 0xad, 0x19, 0xb4, 0xf5, 0x26, 0x85, 0x0a, 0x14, 0xe4, 0x76, 0x7d, 0xfb, 0xe3, + 0x72, 0xcc, 0xa9, 0x39, 0x02, 0x9d, 0x6c, 0x0f, 0x29, 0xca, 0x63, 0x41, 0xbf, 0x2b, 0xca, 0x63, + 0x51, 0x6b, 0x72, 0x96, 0x90, 0x07, 0x70, 0xd3, 0x42, 0xd0, 0xe3, 0xc2, 0x84, 0xe8, 0x9d, 0xc7, + 0xee, 0xde, 0xcf, 0x98, 0x9a, 0x98, 0xc3, 0xff, 0x32, 0x6f, 0x2c, 0x2a, 0x80, 0x26, 0x7f, 0xb4, + 0xb0, 0x9f, 0x95, 0xe4, 0xce, 0x04, 0x25, 0xbb, 0xd2, 0x1d, 0x41, 0xe9, 0x2d, 0xef, 0x8e, 0xa0, + 0x32, 0x0d, 0xce, 0x59, 0x42, 0x3e, 0xb4, 0xdd, 0x24, 0x94, 0xa6, 0x59, 0x5b, 0x40, 0x05, 0xd2, + 0xb7, 0xbb, 0x9a, 0xfd, 0xa4, 0x04, 0xe7, 0xcd, 0xfd, 0x7e, 0x0e, 0xdf, 0x37, 0x15, 0xeb, 0xb9, + 0xc9, 0xff, 0xa7, 0x7e, 0xf6, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe2, 0xe3, 0x43, 0xc0, 0x95, + 0x0f, 0x00, 0x00, } diff --git a/pkg/proto/hapi/version/version.pb.go b/pkg/proto/hapi/version/version.pb.go index e3d8a7096..b8a711561 100644 --- a/pkg/proto/hapi/version/version.pb.go +++ b/pkg/proto/hapi/version/version.pb.go @@ -69,7 +69,7 @@ func init() { proto.RegisterFile("hapi/version/version.proto", fileDescriptor0) var fileDescriptor0 = []byte{ // 151 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xca, 0x48, 0x2c, 0xc8, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0xca, 0x48, 0x2c, 0xc8, 0xd4, 0x2f, 0x4b, 0x2d, 0x2a, 0xce, 0xcc, 0xcf, 0x83, 0xd1, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x3c, 0x20, 0x39, 0x3d, 0xa8, 0x98, 0x52, 0x3a, 0x17, 0x7b, 0x18, 0x84, 0x29, 0x24, 0xce, 0xc5, 0x5e, 0x9c, 0x9a, 0x1b, 0x5f, 0x96, 0x5a, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, diff --git a/pkg/releasetesting/environment.go b/pkg/releasetesting/environment.go index a56721333..51c1aa95a 100644 --- a/pkg/releasetesting/environment.go +++ b/pkg/releasetesting/environment.go @@ -83,31 +83,31 @@ func (env *Environment) streamResult(r *release.TestRun) error { func (env *Environment) streamRunning(name string) error { msg := "RUNNING: " + name - return env.streamMessage(msg) + return env.streamMessage(msg, release.TestRun_RUNNING) } func (env *Environment) streamError(info string) error { msg := "ERROR: " + info - return env.streamMessage(msg) + return env.streamMessage(msg, release.TestRun_FAILURE) } func (env *Environment) streamFailed(name string) error { msg := fmt.Sprintf("FAILED: %s, run `kubectl logs %s --namespace %s` for more info", name, name, env.Namespace) - return env.streamMessage(msg) + return env.streamMessage(msg, release.TestRun_FAILURE) } func (env *Environment) streamSuccess(name string) error { msg := fmt.Sprintf("PASSED: %s", name) - return env.streamMessage(msg) + return env.streamMessage(msg, release.TestRun_SUCCESS) } func (env *Environment) streamUnknown(name, info string) error { msg := fmt.Sprintf("UNKNOWN: %s: %s", name, info) - return env.streamMessage(msg) + return env.streamMessage(msg, release.TestRun_UNKNOWN) } -func (env *Environment) streamMessage(msg string) error { - resp := &services.TestReleaseResponse{Msg: msg} +func (env *Environment) streamMessage(msg string, status release.TestRun_Status) error { + resp := &services.TestReleaseResponse{Msg: msg, Status: status} return env.Stream.Send(resp) } diff --git a/pkg/releasetesting/environment_test.go b/pkg/releasetesting/environment_test.go index deb8617f6..5d8e58f85 100644 --- a/pkg/releasetesting/environment_test.go +++ b/pkg/releasetesting/environment_test.go @@ -24,6 +24,7 @@ import ( "testing" "k8s.io/helm/pkg/proto/hapi/release" + "k8s.io/helm/pkg/proto/hapi/services" tillerEnv "k8s.io/helm/pkg/tiller/environment" ) @@ -88,6 +89,29 @@ func TestDeleteTestPodsFailingDelete(t *testing.T) { } } +func TestStreamMessage(t *testing.T) { + mockTestEnv := newMockTestingEnvironment() + + expectedMessage := "testing streamMessage" + expectedStatus := release.TestRun_SUCCESS + err := mockTestEnv.streamMessage(expectedMessage, expectedStatus) + if err != nil { + t.Errorf("Expected no errors, got 1: %s", err) + } + + stream := mockTestEnv.Stream.(*mockStream) + if len(stream.messages) != 1 { + t.Errorf("Expected 1 message, got: %v", len(stream.messages)) + } + + if stream.messages[0].Msg != expectedMessage { + t.Errorf("Expected message: %s, got: %s", expectedMessage, stream.messages[0]) + } + if stream.messages[0].Status != expectedStatus { + t.Errorf("Expected status: %v, got: %v", expectedStatus, stream.messages[0].Status) + } +} + type MockTestingEnvironment struct { *Environment } @@ -110,7 +134,10 @@ func (mte MockTestingEnvironment) streamError(info string) error { retur func (mte MockTestingEnvironment) streamFailed(name string) error { return nil } func (mte MockTestingEnvironment) streamSuccess(name string) error { return nil } func (mte MockTestingEnvironment) streamUnknown(name, info string) error { return nil } -func (mte MockTestingEnvironment) streamMessage(msg string) error { return nil } +func (mte MockTestingEnvironment) streamMessage(msg string, status release.TestRun_Status) error { + mte.Stream.Send(&services.TestReleaseResponse{Msg: msg, Status: status}) + return nil +} type getFailingKubeClient struct { tillerEnv.PrintingKubeClient diff --git a/pkg/releasetesting/test_suite.go b/pkg/releasetesting/test_suite.go index f4362dc5b..e5e8db51e 100644 --- a/pkg/releasetesting/test_suite.go +++ b/pkg/releasetesting/test_suite.go @@ -65,7 +65,8 @@ func (ts *TestSuite) Run(env *Environment) error { ts.StartedAt = timeconv.Now() if len(ts.TestManifests) == 0 { - env.streamMessage("No Tests Found") + // TODO: make this better, adding test run status on test suite is weird + env.streamMessage("No Tests Found", release.TestRun_UNKNOWN) } for _, testManifest := range ts.TestManifests { @@ -78,6 +79,7 @@ func (ts *TestSuite) Run(env *Environment) error { if err := env.streamRunning(test.result.Name); err != nil { return err } + test.result.Status = release.TestRun_RUNNING resourceCreated := true if err := env.createTestPod(test); err != nil { @@ -93,7 +95,7 @@ func (ts *TestSuite) Run(env *Environment) error { status, err = env.getTestPodStatus(test) if err != nil { resourceCleanExit = false - if streamErr := env.streamUnknown(test.result.Name, test.result.Info); streamErr != nil { + if streamErr := env.streamError(test.result.Info); streamErr != nil { return streamErr } } diff --git a/pkg/tiller/release_server.go b/pkg/tiller/release_server.go index adc4ddf3c..33d3423ae 100644 --- a/pkg/tiller/release_server.go +++ b/pkg/tiller/release_server.go @@ -1141,5 +1141,9 @@ func (s *ReleaseServer) RunReleaseTest(req *services.TestReleaseRequest, stream testEnv.DeleteTestPods(tSuite.TestManifests) } - return s.env.Releases.Update(rel) + if err := s.env.Releases.Update(rel); err != nil { + log.Printf("test: Failed to store updated release: %s", err) + } + + return nil }