Unverified Commit 024f168b authored by Matthew Fisher's avatar Matthew Fisher Committed by GitHub

Merge pull request #6612 from bacongobbler/rebase-6167

feat(test): add `--logs` to `helm test`
parents 66e0c0b4 9b9dcebe
...@@ -352,6 +352,8 @@ message TestReleaseRequest { ...@@ -352,6 +352,8 @@ message TestReleaseRequest {
bool parallel = 4; bool parallel = 4;
// maximum number of test pods to run in parallel // maximum number of test pods to run in parallel
uint32 max_parallel = 5; uint32 max_parallel = 5;
// logs specifies whether or not to dump the logs from the test pods
bool logs = 6;
} }
// TestReleaseResponse represents a message from executing a test // TestReleaseResponse represents a message from executing a test
......
...@@ -41,6 +41,7 @@ type releaseTestCmd struct { ...@@ -41,6 +41,7 @@ type releaseTestCmd struct {
cleanup bool cleanup bool
parallel bool parallel bool
maxParallel uint32 maxParallel uint32
logs bool
} }
func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command { func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command {
...@@ -71,6 +72,7 @@ func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -71,6 +72,7 @@ func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command {
f.BoolVar(&rlsTest.cleanup, "cleanup", false, "Delete test pods upon completion") f.BoolVar(&rlsTest.cleanup, "cleanup", false, "Delete test pods upon completion")
f.BoolVar(&rlsTest.parallel, "parallel", false, "Run test pods in parallel") f.BoolVar(&rlsTest.parallel, "parallel", false, "Run test pods in parallel")
f.Uint32Var(&rlsTest.maxParallel, "max", 20, "Maximum number of test pods to run in parallel") f.Uint32Var(&rlsTest.maxParallel, "max", 20, "Maximum number of test pods to run in parallel")
f.BoolVar(&rlsTest.logs, "logs", false, "Dump the logs from test pods (this runs after all tests are complete, but before any cleanup")
// set defaults from environment // set defaults from environment
settings.InitTLS(f) settings.InitTLS(f)
...@@ -85,6 +87,7 @@ func (t *releaseTestCmd) run() (err error) { ...@@ -85,6 +87,7 @@ func (t *releaseTestCmd) run() (err error) {
helm.ReleaseTestCleanup(t.cleanup), helm.ReleaseTestCleanup(t.cleanup),
helm.ReleaseTestParallel(t.parallel), helm.ReleaseTestParallel(t.parallel),
helm.ReleaseTestMaxParallel(t.maxParallel), helm.ReleaseTestMaxParallel(t.maxParallel),
helm.ReleaseTestLogs(t.logs),
) )
testErr := &testErr{} testErr := &testErr{}
......
...@@ -20,6 +20,7 @@ helm test [RELEASE] [flags] ...@@ -20,6 +20,7 @@ helm test [RELEASE] [flags]
``` ```
--cleanup Delete test pods upon completion --cleanup Delete test pods upon completion
-h, --help help for test -h, --help help for test
--logs Dump the logs from test pods (this runs after all tests are complete, but before any cleanup
--max uint32 Maximum number of test pods to run in parallel (default 20) --max uint32 Maximum number of test pods to run in parallel (default 20)
--parallel Run test pods in parallel --parallel Run test pods in parallel
--timeout int Time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks) (default 300) --timeout int Time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks) (default 300)
...@@ -47,4 +48,4 @@ helm test [RELEASE] [flags] ...@@ -47,4 +48,4 @@ helm test [RELEASE] [flags]
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jul-2019 ###### Auto generated by spf13/cobra on 8-Oct-2019
...@@ -241,6 +241,13 @@ func ReleaseTestMaxParallel(max uint32) ReleaseTestOption { ...@@ -241,6 +241,13 @@ func ReleaseTestMaxParallel(max uint32) ReleaseTestOption {
} }
} }
// ReleaseTestLogs is a boolean value representing whether to dump the logs from test pods
func ReleaseTestLogs(logs bool) ReleaseTestOption {
return func(opts *options) {
opts.testReq.Logs = logs
}
}
// RollbackTimeout specifies the number of seconds before kubernetes calls timeout // RollbackTimeout specifies the number of seconds before kubernetes calls timeout
func RollbackTimeout(timeout int64) RollbackOption { func RollbackTimeout(timeout int64) RollbackOption {
return func(opts *options) { return func(opts *options) {
......
...@@ -31,7 +31,7 @@ import ( ...@@ -31,7 +31,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"github.com/evanphx/json-patch" jsonpatch "github.com/evanphx/json-patch"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta1 "k8s.io/api/apps/v1beta1"
appsv1beta2 "k8s.io/api/apps/v1beta2" appsv1beta2 "k8s.io/api/apps/v1beta2"
...@@ -935,7 +935,7 @@ func (c *Client) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, ...@@ -935,7 +935,7 @@ func (c *Client) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader,
} }
func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Info) error { func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Info) error {
lw := cachetools.NewListWatchFromClient(info.Client, info.Mapping.Resource.Resource, info.Namespace, fields.Everything()) lw := cachetools.NewListWatchFromClient(info.Client, info.Mapping.Resource.Resource, info.Namespace, fields.ParseSelectorOrDie(fmt.Sprintf("metadata.name=%s", info.Name)))
c.Log("Watching pod %s for completion with timeout of %v", info.Name, timeout) c.Log("Watching pod %s for completion with timeout of %v", info.Name, timeout)
ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), timeout) ctx, cancel := watchtools.ContextWithOptionalTimeout(context.Background(), timeout)
...@@ -947,6 +947,20 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf ...@@ -947,6 +947,20 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf
return err return err
} }
// GetPodLogs takes pod name and namespace and returns the current logs (streaming is NOT enabled).
func (c *Client) GetPodLogs(name, ns string) (io.ReadCloser, error) {
client, err := c.KubernetesClientSet()
if err != nil {
return nil, err
}
req := client.CoreV1().Pods(ns).GetLogs(name, &v1.PodLogOptions{})
logReader, err := req.Stream()
if err != nil {
return nil, fmt.Errorf("error in opening log stream, got: %s", err)
}
return logReader, nil
}
func isPodComplete(event watch.Event) (bool, error) { func isPodComplete(event watch.Event) (bool, error) {
o, ok := event.Object.(*v1.Pod) o, ok := event.Object.(*v1.Pod)
if !ok { if !ok {
......
...@@ -53,7 +53,7 @@ func (x ListSort_SortBy) String() string { ...@@ -53,7 +53,7 @@ func (x ListSort_SortBy) String() string {
return proto.EnumName(ListSort_SortBy_name, int32(x)) return proto.EnumName(ListSort_SortBy_name, int32(x))
} }
func (ListSort_SortBy) EnumDescriptor() ([]byte, []int) { func (ListSort_SortBy) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{1, 0} return fileDescriptor_tiller_0094511522f6b040, []int{1, 0}
} }
// SortOrder defines sort orders to augment sorting operations. // SortOrder defines sort orders to augment sorting operations.
...@@ -77,7 +77,7 @@ func (x ListSort_SortOrder) String() string { ...@@ -77,7 +77,7 @@ func (x ListSort_SortOrder) String() string {
return proto.EnumName(ListSort_SortOrder_name, int32(x)) return proto.EnumName(ListSort_SortOrder_name, int32(x))
} }
func (ListSort_SortOrder) EnumDescriptor() ([]byte, []int) { func (ListSort_SortOrder) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{1, 1} return fileDescriptor_tiller_0094511522f6b040, []int{1, 1}
} }
// ListReleasesRequest requests a list of releases. // ListReleasesRequest requests a list of releases.
...@@ -114,7 +114,7 @@ func (m *ListReleasesRequest) Reset() { *m = ListReleasesRequest{} } ...@@ -114,7 +114,7 @@ func (m *ListReleasesRequest) Reset() { *m = ListReleasesRequest{} }
func (m *ListReleasesRequest) String() string { return proto.CompactTextString(m) } func (m *ListReleasesRequest) String() string { return proto.CompactTextString(m) }
func (*ListReleasesRequest) ProtoMessage() {} func (*ListReleasesRequest) ProtoMessage() {}
func (*ListReleasesRequest) Descriptor() ([]byte, []int) { func (*ListReleasesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{0} return fileDescriptor_tiller_0094511522f6b040, []int{0}
} }
func (m *ListReleasesRequest) XXX_Unmarshal(b []byte) error { func (m *ListReleasesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListReleasesRequest.Unmarshal(m, b) return xxx_messageInfo_ListReleasesRequest.Unmarshal(m, b)
...@@ -194,7 +194,7 @@ func (m *ListSort) Reset() { *m = ListSort{} } ...@@ -194,7 +194,7 @@ func (m *ListSort) Reset() { *m = ListSort{} }
func (m *ListSort) String() string { return proto.CompactTextString(m) } func (m *ListSort) String() string { return proto.CompactTextString(m) }
func (*ListSort) ProtoMessage() {} func (*ListSort) ProtoMessage() {}
func (*ListSort) Descriptor() ([]byte, []int) { func (*ListSort) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{1} return fileDescriptor_tiller_0094511522f6b040, []int{1}
} }
func (m *ListSort) XXX_Unmarshal(b []byte) error { func (m *ListSort) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListSort.Unmarshal(m, b) return xxx_messageInfo_ListSort.Unmarshal(m, b)
...@@ -234,7 +234,7 @@ func (m *ListReleasesResponse) Reset() { *m = ListReleasesResponse{} } ...@@ -234,7 +234,7 @@ func (m *ListReleasesResponse) Reset() { *m = ListReleasesResponse{} }
func (m *ListReleasesResponse) String() string { return proto.CompactTextString(m) } func (m *ListReleasesResponse) String() string { return proto.CompactTextString(m) }
func (*ListReleasesResponse) ProtoMessage() {} func (*ListReleasesResponse) ProtoMessage() {}
func (*ListReleasesResponse) Descriptor() ([]byte, []int) { func (*ListReleasesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{2} return fileDescriptor_tiller_0094511522f6b040, []int{2}
} }
func (m *ListReleasesResponse) XXX_Unmarshal(b []byte) error { func (m *ListReleasesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListReleasesResponse.Unmarshal(m, b) return xxx_messageInfo_ListReleasesResponse.Unmarshal(m, b)
...@@ -297,7 +297,7 @@ func (m *GetReleaseStatusRequest) Reset() { *m = GetReleaseStatusRequest ...@@ -297,7 +297,7 @@ func (m *GetReleaseStatusRequest) Reset() { *m = GetReleaseStatusRequest
func (m *GetReleaseStatusRequest) String() string { return proto.CompactTextString(m) } func (m *GetReleaseStatusRequest) String() string { return proto.CompactTextString(m) }
func (*GetReleaseStatusRequest) ProtoMessage() {} func (*GetReleaseStatusRequest) ProtoMessage() {}
func (*GetReleaseStatusRequest) Descriptor() ([]byte, []int) { func (*GetReleaseStatusRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{3} return fileDescriptor_tiller_0094511522f6b040, []int{3}
} }
func (m *GetReleaseStatusRequest) XXX_Unmarshal(b []byte) error { func (m *GetReleaseStatusRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReleaseStatusRequest.Unmarshal(m, b) return xxx_messageInfo_GetReleaseStatusRequest.Unmarshal(m, b)
...@@ -348,7 +348,7 @@ func (m *GetReleaseStatusResponse) Reset() { *m = GetReleaseStatusRespon ...@@ -348,7 +348,7 @@ func (m *GetReleaseStatusResponse) Reset() { *m = GetReleaseStatusRespon
func (m *GetReleaseStatusResponse) String() string { return proto.CompactTextString(m) } func (m *GetReleaseStatusResponse) String() string { return proto.CompactTextString(m) }
func (*GetReleaseStatusResponse) ProtoMessage() {} func (*GetReleaseStatusResponse) ProtoMessage() {}
func (*GetReleaseStatusResponse) Descriptor() ([]byte, []int) { func (*GetReleaseStatusResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{4} return fileDescriptor_tiller_0094511522f6b040, []int{4}
} }
func (m *GetReleaseStatusResponse) XXX_Unmarshal(b []byte) error { func (m *GetReleaseStatusResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReleaseStatusResponse.Unmarshal(m, b) return xxx_messageInfo_GetReleaseStatusResponse.Unmarshal(m, b)
...@@ -404,7 +404,7 @@ func (m *GetReleaseContentRequest) Reset() { *m = GetReleaseContentReque ...@@ -404,7 +404,7 @@ func (m *GetReleaseContentRequest) Reset() { *m = GetReleaseContentReque
func (m *GetReleaseContentRequest) String() string { return proto.CompactTextString(m) } func (m *GetReleaseContentRequest) String() string { return proto.CompactTextString(m) }
func (*GetReleaseContentRequest) ProtoMessage() {} func (*GetReleaseContentRequest) ProtoMessage() {}
func (*GetReleaseContentRequest) Descriptor() ([]byte, []int) { func (*GetReleaseContentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{5} return fileDescriptor_tiller_0094511522f6b040, []int{5}
} }
func (m *GetReleaseContentRequest) XXX_Unmarshal(b []byte) error { func (m *GetReleaseContentRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReleaseContentRequest.Unmarshal(m, b) return xxx_messageInfo_GetReleaseContentRequest.Unmarshal(m, b)
...@@ -451,7 +451,7 @@ func (m *GetReleaseContentResponse) Reset() { *m = GetReleaseContentResp ...@@ -451,7 +451,7 @@ func (m *GetReleaseContentResponse) Reset() { *m = GetReleaseContentResp
func (m *GetReleaseContentResponse) String() string { return proto.CompactTextString(m) } func (m *GetReleaseContentResponse) String() string { return proto.CompactTextString(m) }
func (*GetReleaseContentResponse) ProtoMessage() {} func (*GetReleaseContentResponse) ProtoMessage() {}
func (*GetReleaseContentResponse) Descriptor() ([]byte, []int) { func (*GetReleaseContentResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{6} return fileDescriptor_tiller_0094511522f6b040, []int{6}
} }
func (m *GetReleaseContentResponse) XXX_Unmarshal(b []byte) error { func (m *GetReleaseContentResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetReleaseContentResponse.Unmarshal(m, b) return xxx_messageInfo_GetReleaseContentResponse.Unmarshal(m, b)
...@@ -519,7 +519,7 @@ func (m *UpdateReleaseRequest) Reset() { *m = UpdateReleaseRequest{} } ...@@ -519,7 +519,7 @@ func (m *UpdateReleaseRequest) Reset() { *m = UpdateReleaseRequest{} }
func (m *UpdateReleaseRequest) String() string { return proto.CompactTextString(m) } func (m *UpdateReleaseRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateReleaseRequest) ProtoMessage() {} func (*UpdateReleaseRequest) ProtoMessage() {}
func (*UpdateReleaseRequest) Descriptor() ([]byte, []int) { func (*UpdateReleaseRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{7} return fileDescriptor_tiller_0094511522f6b040, []int{7}
} }
func (m *UpdateReleaseRequest) XXX_Unmarshal(b []byte) error { func (m *UpdateReleaseRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateReleaseRequest.Unmarshal(m, b) return xxx_messageInfo_UpdateReleaseRequest.Unmarshal(m, b)
...@@ -649,7 +649,7 @@ func (m *UpdateReleaseResponse) Reset() { *m = UpdateReleaseResponse{} } ...@@ -649,7 +649,7 @@ func (m *UpdateReleaseResponse) Reset() { *m = UpdateReleaseResponse{} }
func (m *UpdateReleaseResponse) String() string { return proto.CompactTextString(m) } func (m *UpdateReleaseResponse) String() string { return proto.CompactTextString(m) }
func (*UpdateReleaseResponse) ProtoMessage() {} func (*UpdateReleaseResponse) ProtoMessage() {}
func (*UpdateReleaseResponse) Descriptor() ([]byte, []int) { func (*UpdateReleaseResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{8} return fileDescriptor_tiller_0094511522f6b040, []int{8}
} }
func (m *UpdateReleaseResponse) XXX_Unmarshal(b []byte) error { func (m *UpdateReleaseResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateReleaseResponse.Unmarshal(m, b) return xxx_messageInfo_UpdateReleaseResponse.Unmarshal(m, b)
...@@ -707,7 +707,7 @@ func (m *RollbackReleaseRequest) Reset() { *m = RollbackReleaseRequest{} ...@@ -707,7 +707,7 @@ func (m *RollbackReleaseRequest) Reset() { *m = RollbackReleaseRequest{}
func (m *RollbackReleaseRequest) String() string { return proto.CompactTextString(m) } func (m *RollbackReleaseRequest) String() string { return proto.CompactTextString(m) }
func (*RollbackReleaseRequest) ProtoMessage() {} func (*RollbackReleaseRequest) ProtoMessage() {}
func (*RollbackReleaseRequest) Descriptor() ([]byte, []int) { func (*RollbackReleaseRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{9} return fileDescriptor_tiller_0094511522f6b040, []int{9}
} }
func (m *RollbackReleaseRequest) XXX_Unmarshal(b []byte) error { func (m *RollbackReleaseRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RollbackReleaseRequest.Unmarshal(m, b) return xxx_messageInfo_RollbackReleaseRequest.Unmarshal(m, b)
...@@ -809,7 +809,7 @@ func (m *RollbackReleaseResponse) Reset() { *m = RollbackReleaseResponse ...@@ -809,7 +809,7 @@ func (m *RollbackReleaseResponse) Reset() { *m = RollbackReleaseResponse
func (m *RollbackReleaseResponse) String() string { return proto.CompactTextString(m) } func (m *RollbackReleaseResponse) String() string { return proto.CompactTextString(m) }
func (*RollbackReleaseResponse) ProtoMessage() {} func (*RollbackReleaseResponse) ProtoMessage() {}
func (*RollbackReleaseResponse) Descriptor() ([]byte, []int) { func (*RollbackReleaseResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{10} return fileDescriptor_tiller_0094511522f6b040, []int{10}
} }
func (m *RollbackReleaseResponse) XXX_Unmarshal(b []byte) error { func (m *RollbackReleaseResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RollbackReleaseResponse.Unmarshal(m, b) return xxx_messageInfo_RollbackReleaseResponse.Unmarshal(m, b)
...@@ -874,7 +874,7 @@ func (m *InstallReleaseRequest) Reset() { *m = InstallReleaseRequest{} } ...@@ -874,7 +874,7 @@ func (m *InstallReleaseRequest) Reset() { *m = InstallReleaseRequest{} }
func (m *InstallReleaseRequest) String() string { return proto.CompactTextString(m) } func (m *InstallReleaseRequest) String() string { return proto.CompactTextString(m) }
func (*InstallReleaseRequest) ProtoMessage() {} func (*InstallReleaseRequest) ProtoMessage() {}
func (*InstallReleaseRequest) Descriptor() ([]byte, []int) { func (*InstallReleaseRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{11} return fileDescriptor_tiller_0094511522f6b040, []int{11}
} }
func (m *InstallReleaseRequest) XXX_Unmarshal(b []byte) error { func (m *InstallReleaseRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InstallReleaseRequest.Unmarshal(m, b) return xxx_messageInfo_InstallReleaseRequest.Unmarshal(m, b)
...@@ -990,7 +990,7 @@ func (m *InstallReleaseResponse) Reset() { *m = InstallReleaseResponse{} ...@@ -990,7 +990,7 @@ func (m *InstallReleaseResponse) Reset() { *m = InstallReleaseResponse{}
func (m *InstallReleaseResponse) String() string { return proto.CompactTextString(m) } func (m *InstallReleaseResponse) String() string { return proto.CompactTextString(m) }
func (*InstallReleaseResponse) ProtoMessage() {} func (*InstallReleaseResponse) ProtoMessage() {}
func (*InstallReleaseResponse) Descriptor() ([]byte, []int) { func (*InstallReleaseResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{12} return fileDescriptor_tiller_0094511522f6b040, []int{12}
} }
func (m *InstallReleaseResponse) XXX_Unmarshal(b []byte) error { func (m *InstallReleaseResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InstallReleaseResponse.Unmarshal(m, b) return xxx_messageInfo_InstallReleaseResponse.Unmarshal(m, b)
...@@ -1038,7 +1038,7 @@ func (m *UninstallReleaseRequest) Reset() { *m = UninstallReleaseRequest ...@@ -1038,7 +1038,7 @@ func (m *UninstallReleaseRequest) Reset() { *m = UninstallReleaseRequest
func (m *UninstallReleaseRequest) String() string { return proto.CompactTextString(m) } func (m *UninstallReleaseRequest) String() string { return proto.CompactTextString(m) }
func (*UninstallReleaseRequest) ProtoMessage() {} func (*UninstallReleaseRequest) ProtoMessage() {}
func (*UninstallReleaseRequest) Descriptor() ([]byte, []int) { func (*UninstallReleaseRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{13} return fileDescriptor_tiller_0094511522f6b040, []int{13}
} }
func (m *UninstallReleaseRequest) XXX_Unmarshal(b []byte) error { func (m *UninstallReleaseRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UninstallReleaseRequest.Unmarshal(m, b) return xxx_messageInfo_UninstallReleaseRequest.Unmarshal(m, b)
...@@ -1108,7 +1108,7 @@ func (m *UninstallReleaseResponse) Reset() { *m = UninstallReleaseRespon ...@@ -1108,7 +1108,7 @@ func (m *UninstallReleaseResponse) Reset() { *m = UninstallReleaseRespon
func (m *UninstallReleaseResponse) String() string { return proto.CompactTextString(m) } func (m *UninstallReleaseResponse) String() string { return proto.CompactTextString(m) }
func (*UninstallReleaseResponse) ProtoMessage() {} func (*UninstallReleaseResponse) ProtoMessage() {}
func (*UninstallReleaseResponse) Descriptor() ([]byte, []int) { func (*UninstallReleaseResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{14} return fileDescriptor_tiller_0094511522f6b040, []int{14}
} }
func (m *UninstallReleaseResponse) XXX_Unmarshal(b []byte) error { func (m *UninstallReleaseResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UninstallReleaseResponse.Unmarshal(m, b) return xxx_messageInfo_UninstallReleaseResponse.Unmarshal(m, b)
...@@ -1153,7 +1153,7 @@ func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } ...@@ -1153,7 +1153,7 @@ func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} }
func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) }
func (*GetVersionRequest) ProtoMessage() {} func (*GetVersionRequest) ProtoMessage() {}
func (*GetVersionRequest) Descriptor() ([]byte, []int) { func (*GetVersionRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{15} return fileDescriptor_tiller_0094511522f6b040, []int{15}
} }
func (m *GetVersionRequest) XXX_Unmarshal(b []byte) error { func (m *GetVersionRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetVersionRequest.Unmarshal(m, b) return xxx_messageInfo_GetVersionRequest.Unmarshal(m, b)
...@@ -1184,7 +1184,7 @@ func (m *GetVersionResponse) Reset() { *m = GetVersionResponse{} } ...@@ -1184,7 +1184,7 @@ func (m *GetVersionResponse) Reset() { *m = GetVersionResponse{} }
func (m *GetVersionResponse) String() string { return proto.CompactTextString(m) } func (m *GetVersionResponse) String() string { return proto.CompactTextString(m) }
func (*GetVersionResponse) ProtoMessage() {} func (*GetVersionResponse) ProtoMessage() {}
func (*GetVersionResponse) Descriptor() ([]byte, []int) { func (*GetVersionResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{16} return fileDescriptor_tiller_0094511522f6b040, []int{16}
} }
func (m *GetVersionResponse) XXX_Unmarshal(b []byte) error { func (m *GetVersionResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetVersionResponse.Unmarshal(m, b) return xxx_messageInfo_GetVersionResponse.Unmarshal(m, b)
...@@ -1226,7 +1226,7 @@ func (m *GetHistoryRequest) Reset() { *m = GetHistoryRequest{} } ...@@ -1226,7 +1226,7 @@ func (m *GetHistoryRequest) Reset() { *m = GetHistoryRequest{} }
func (m *GetHistoryRequest) String() string { return proto.CompactTextString(m) } func (m *GetHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*GetHistoryRequest) ProtoMessage() {} func (*GetHistoryRequest) ProtoMessage() {}
func (*GetHistoryRequest) Descriptor() ([]byte, []int) { func (*GetHistoryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{17} return fileDescriptor_tiller_0094511522f6b040, []int{17}
} }
func (m *GetHistoryRequest) XXX_Unmarshal(b []byte) error { func (m *GetHistoryRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetHistoryRequest.Unmarshal(m, b) return xxx_messageInfo_GetHistoryRequest.Unmarshal(m, b)
...@@ -1272,7 +1272,7 @@ func (m *GetHistoryResponse) Reset() { *m = GetHistoryResponse{} } ...@@ -1272,7 +1272,7 @@ func (m *GetHistoryResponse) Reset() { *m = GetHistoryResponse{} }
func (m *GetHistoryResponse) String() string { return proto.CompactTextString(m) } func (m *GetHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*GetHistoryResponse) ProtoMessage() {} func (*GetHistoryResponse) ProtoMessage() {}
func (*GetHistoryResponse) Descriptor() ([]byte, []int) { func (*GetHistoryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{18} return fileDescriptor_tiller_0094511522f6b040, []int{18}
} }
func (m *GetHistoryResponse) XXX_Unmarshal(b []byte) error { func (m *GetHistoryResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetHistoryResponse.Unmarshal(m, b) return xxx_messageInfo_GetHistoryResponse.Unmarshal(m, b)
...@@ -1310,7 +1310,9 @@ type TestReleaseRequest struct { ...@@ -1310,7 +1310,9 @@ type TestReleaseRequest struct {
// parallel specifies whether or not to run test pods in parallel // parallel specifies whether or not to run test pods in parallel
Parallel bool `protobuf:"varint,4,opt,name=parallel,proto3" json:"parallel,omitempty"` Parallel bool `protobuf:"varint,4,opt,name=parallel,proto3" json:"parallel,omitempty"`
// maximum number of test pods to run in parallel // maximum number of test pods to run in parallel
MaxParallel uint32 `protobuf:"varint,5,opt,name=max_parallel,json=maxParallel,proto3" json:"max_parallel,omitempty"` MaxParallel uint32 `protobuf:"varint,5,opt,name=max_parallel,json=maxParallel,proto3" json:"max_parallel,omitempty"`
// logs specifies whether or not to dump the logs from the test pods
Logs bool `protobuf:"varint,6,opt,name=logs,proto3" json:"logs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -1320,7 +1322,7 @@ func (m *TestReleaseRequest) Reset() { *m = TestReleaseRequest{} } ...@@ -1320,7 +1322,7 @@ func (m *TestReleaseRequest) Reset() { *m = TestReleaseRequest{} }
func (m *TestReleaseRequest) String() string { return proto.CompactTextString(m) } func (m *TestReleaseRequest) String() string { return proto.CompactTextString(m) }
func (*TestReleaseRequest) ProtoMessage() {} func (*TestReleaseRequest) ProtoMessage() {}
func (*TestReleaseRequest) Descriptor() ([]byte, []int) { func (*TestReleaseRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{19} return fileDescriptor_tiller_0094511522f6b040, []int{19}
} }
func (m *TestReleaseRequest) XXX_Unmarshal(b []byte) error { func (m *TestReleaseRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TestReleaseRequest.Unmarshal(m, b) return xxx_messageInfo_TestReleaseRequest.Unmarshal(m, b)
...@@ -1375,6 +1377,13 @@ func (m *TestReleaseRequest) GetMaxParallel() uint32 { ...@@ -1375,6 +1377,13 @@ func (m *TestReleaseRequest) GetMaxParallel() uint32 {
return 0 return 0
} }
func (m *TestReleaseRequest) GetLogs() bool {
if m != nil {
return m.Logs
}
return false
}
// TestReleaseResponse represents a message from executing a test // TestReleaseResponse represents a message from executing a test
type TestReleaseResponse struct { type TestReleaseResponse struct {
Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"`
...@@ -1388,7 +1397,7 @@ func (m *TestReleaseResponse) Reset() { *m = TestReleaseResponse{} } ...@@ -1388,7 +1397,7 @@ func (m *TestReleaseResponse) Reset() { *m = TestReleaseResponse{} }
func (m *TestReleaseResponse) String() string { return proto.CompactTextString(m) } func (m *TestReleaseResponse) String() string { return proto.CompactTextString(m) }
func (*TestReleaseResponse) ProtoMessage() {} func (*TestReleaseResponse) ProtoMessage() {}
func (*TestReleaseResponse) Descriptor() ([]byte, []int) { func (*TestReleaseResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_tiller_45351572bedcef6e, []int{20} return fileDescriptor_tiller_0094511522f6b040, []int{20}
} }
func (m *TestReleaseResponse) XXX_Unmarshal(b []byte) error { func (m *TestReleaseResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TestReleaseResponse.Unmarshal(m, b) return xxx_messageInfo_TestReleaseResponse.Unmarshal(m, b)
...@@ -1898,93 +1907,94 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{ ...@@ -1898,93 +1907,94 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{
Metadata: "hapi/services/tiller.proto", Metadata: "hapi/services/tiller.proto",
} }
func init() { proto.RegisterFile("hapi/services/tiller.proto", fileDescriptor_tiller_45351572bedcef6e) } func init() { proto.RegisterFile("hapi/services/tiller.proto", fileDescriptor_tiller_0094511522f6b040) }
var fileDescriptor_tiller_45351572bedcef6e = []byte{ var fileDescriptor_tiller_0094511522f6b040 = []byte{
// 1357 bytes of a gzipped FileDescriptorProto // 1369 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xdd, 0x6e, 0x1b, 0x45, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0xdd, 0x72, 0x1b, 0xc5,
0x14, 0x8e, 0xbd, 0xfe, 0x3d, 0x4e, 0x5c, 0x77, 0x9a, 0x26, 0x5b, 0x53, 0x50, 0x58, 0x44, 0xeb, 0x12, 0xb6, 0xb4, 0xfa, 0x6d, 0xd9, 0x8a, 0x32, 0x71, 0xec, 0x8d, 0x4e, 0xce, 0x29, 0x9f, 0xa5,
0x16, 0xea, 0x40, 0xe0, 0x06, 0x09, 0x21, 0xa5, 0x6e, 0x48, 0x0a, 0x21, 0x45, 0x9b, 0xb6, 0x48, 0x48, 0x94, 0x40, 0x64, 0x30, 0xdc, 0x50, 0x45, 0x51, 0xe5, 0x28, 0xc6, 0x0e, 0x18, 0x87, 0x5a,
0x48, 0xc8, 0x9a, 0xd8, 0xe3, 0x76, 0xe9, 0x7a, 0xc7, 0xec, 0xcc, 0x86, 0xe4, 0x11, 0xb8, 0xe4, 0x27, 0xa1, 0x8a, 0x2a, 0x4a, 0x35, 0x96, 0x46, 0xce, 0x92, 0xd5, 0x8e, 0xd8, 0x99, 0x35, 0xf6,
0x9a, 0x5b, 0xae, 0x79, 0x06, 0x6e, 0x79, 0x06, 0x5e, 0x06, 0xcd, 0xdf, 0xc6, 0xb3, 0xde, 0x75, 0x23, 0x70, 0xc9, 0x3b, 0x70, 0x0d, 0xaf, 0xc0, 0x2d, 0xcf, 0xc0, 0xcb, 0x50, 0xf3, 0xb7, 0xd6,
0x4d, 0x6e, 0xe2, 0x9d, 0x39, 0x67, 0xce, 0xcf, 0xf7, 0xcd, 0x39, 0x73, 0x5a, 0xe8, 0xbe, 0xc6, 0xac, 0x76, 0x15, 0xe1, 0x1b, 0xed, 0xcc, 0x74, 0x4f, 0x77, 0xcf, 0xf7, 0x4d, 0xf7, 0xb4, 0x0d,
0xb3, 0x60, 0x97, 0x91, 0xf8, 0x3c, 0x18, 0x11, 0xb6, 0xcb, 0x83, 0x30, 0x24, 0x71, 0x7f, 0x16, 0xdd, 0x37, 0x78, 0x16, 0xec, 0x32, 0x12, 0x5f, 0x04, 0x23, 0xc2, 0x76, 0x79, 0x10, 0x86, 0x24,
0x53, 0x4e, 0xd1, 0xa6, 0x90, 0xf5, 0x8d, 0xac, 0xaf, 0x64, 0xdd, 0x2d, 0x79, 0x62, 0xf4, 0x1a, 0xee, 0xcf, 0x62, 0xca, 0x29, 0xda, 0x14, 0xb2, 0xbe, 0x91, 0xf5, 0x95, 0xac, 0xbb, 0x25, 0x77,
0xc7, 0x5c, 0xfd, 0x55, 0xda, 0xdd, 0xed, 0xf9, 0x7d, 0x1a, 0x4d, 0x82, 0x57, 0x5a, 0xa0, 0x5c, 0x8c, 0xde, 0xe0, 0x98, 0xab, 0x5f, 0xa5, 0xdd, 0xdd, 0x9e, 0x5f, 0xa7, 0xd1, 0x24, 0x38, 0xd7,
0xc4, 0x24, 0x24, 0x98, 0x11, 0xf3, 0x6b, 0x1d, 0x32, 0xb2, 0x20, 0x9a, 0x50, 0x2d, 0x78, 0xc7, 0x02, 0xe5, 0x22, 0x26, 0x21, 0xc1, 0x8c, 0x98, 0xaf, 0xb5, 0xc9, 0xc8, 0x82, 0x68, 0x42, 0xb5,
0x12, 0x70, 0xc2, 0xf8, 0x30, 0x4e, 0x22, 0x2d, 0xbc, 0x63, 0x09, 0x19, 0xc7, 0x3c, 0x61, 0x96, 0xe0, 0x3f, 0x96, 0x80, 0x13, 0xc6, 0x87, 0x71, 0x12, 0x69, 0xe1, 0x3d, 0x4b, 0xc8, 0x38, 0xe6,
0xb3, 0x73, 0x12, 0xb3, 0x80, 0x46, 0xe6, 0x57, 0xc9, 0xbc, 0xbf, 0xcb, 0x70, 0xeb, 0x38, 0x60, 0x09, 0xb3, 0x9c, 0x5d, 0x90, 0x98, 0x05, 0x34, 0x32, 0x5f, 0x25, 0xf3, 0xfe, 0x2c, 0xc3, 0x9d,
0xdc, 0x57, 0x07, 0x99, 0x4f, 0x7e, 0x49, 0x08, 0xe3, 0x68, 0x13, 0xaa, 0x61, 0x30, 0x0d, 0xb8, 0xe3, 0x80, 0x71, 0x5f, 0x6d, 0x64, 0x3e, 0xf9, 0x29, 0x21, 0x8c, 0xa3, 0x4d, 0xa8, 0x86, 0xc1,
0x5b, 0xda, 0x29, 0xf5, 0x1c, 0x5f, 0x2d, 0xd0, 0x16, 0xd4, 0xe8, 0x64, 0xc2, 0x08, 0x77, 0xcb, 0x34, 0xe0, 0x6e, 0x69, 0xa7, 0xd4, 0x73, 0x7c, 0x35, 0x41, 0x5b, 0x50, 0xa3, 0x93, 0x09, 0x23,
0x3b, 0xa5, 0x5e, 0xd3, 0xd7, 0x2b, 0xf4, 0x15, 0xd4, 0x19, 0x8d, 0xf9, 0xf0, 0xec, 0xd2, 0x75, 0xdc, 0x2d, 0xef, 0x94, 0x7a, 0x4d, 0x5f, 0xcf, 0xd0, 0x17, 0x50, 0x67, 0x34, 0xe6, 0xc3, 0xb3,
0x76, 0x4a, 0xbd, 0xf6, 0xde, 0x87, 0xfd, 0x3c, 0x9c, 0xfa, 0xc2, 0xd3, 0x29, 0x8d, 0x79, 0x5f, 0x2b, 0xd7, 0xd9, 0x29, 0xf5, 0xda, 0x7b, 0xef, 0xf7, 0xf3, 0x70, 0xea, 0x0b, 0x4f, 0xa7, 0x34,
0xfc, 0x79, 0x7c, 0xe9, 0xd7, 0x98, 0xfc, 0x15, 0x76, 0x27, 0x41, 0xc8, 0x49, 0xec, 0x56, 0x94, 0xe6, 0x7d, 0xf1, 0xf3, 0xf4, 0xca, 0xaf, 0x31, 0xf9, 0x15, 0x76, 0x27, 0x41, 0xc8, 0x49, 0xec,
0x5d, 0xb5, 0x42, 0x87, 0x00, 0xd2, 0x2e, 0x8d, 0xc7, 0x24, 0x76, 0xab, 0xd2, 0x74, 0x6f, 0x05, 0x56, 0x94, 0x5d, 0x35, 0x43, 0x87, 0x00, 0xd2, 0x2e, 0x8d, 0xc7, 0x24, 0x76, 0xab, 0xd2, 0x74,
0xd3, 0xcf, 0x84, 0xbe, 0xdf, 0x64, 0xe6, 0x13, 0x7d, 0x09, 0xeb, 0x0a, 0x92, 0xe1, 0x88, 0x8e, 0x6f, 0x05, 0xd3, 0x2f, 0x84, 0xbe, 0xdf, 0x64, 0x66, 0x88, 0x3e, 0x87, 0x75, 0x05, 0xc9, 0x70,
0x09, 0x73, 0x6b, 0x3b, 0x4e, 0xaf, 0xbd, 0x77, 0x47, 0x99, 0x32, 0xf0, 0x9f, 0x2a, 0xd0, 0x06, 0x44, 0xc7, 0x84, 0xb9, 0xb5, 0x1d, 0xa7, 0xd7, 0xde, 0xbb, 0xa7, 0x4c, 0x19, 0xf8, 0x4f, 0x15,
0x74, 0x4c, 0xfc, 0x96, 0x52, 0x17, 0xdf, 0x0c, 0xdd, 0x85, 0x66, 0x84, 0xa7, 0x84, 0xcd, 0xf0, 0x68, 0x03, 0x3a, 0x26, 0x7e, 0x4b, 0xa9, 0x8b, 0x31, 0x43, 0xf7, 0xa1, 0x19, 0xe1, 0x29, 0x61,
0x88, 0xb8, 0x75, 0x19, 0xe1, 0xd5, 0x86, 0x17, 0x41, 0xc3, 0x38, 0xf7, 0x1e, 0x43, 0x4d, 0xa5, 0x33, 0x3c, 0x22, 0x6e, 0x5d, 0x46, 0x78, 0xbd, 0xe0, 0x45, 0xd0, 0x30, 0xce, 0xbd, 0xa7, 0x50,
0x86, 0x5a, 0x50, 0x7f, 0x71, 0xf2, 0xed, 0xc9, 0xb3, 0x1f, 0x4e, 0x3a, 0x6b, 0xa8, 0x01, 0x95, 0x53, 0x47, 0x43, 0x2d, 0xa8, 0xbf, 0x3a, 0xf9, 0xfa, 0xe4, 0xc5, 0x77, 0x27, 0x9d, 0x35, 0xd4,
0x93, 0xfd, 0xef, 0x0e, 0x3a, 0x25, 0x74, 0x13, 0x36, 0x8e, 0xf7, 0x4f, 0x9f, 0x0f, 0xfd, 0x83, 0x80, 0xca, 0xc9, 0xfe, 0x37, 0x07, 0x9d, 0x12, 0xba, 0x0d, 0x1b, 0xc7, 0xfb, 0xa7, 0x2f, 0x87,
0xe3, 0x83, 0xfd, 0xd3, 0x83, 0x27, 0x9d, 0x32, 0x6a, 0x03, 0x0c, 0x8e, 0xf6, 0xfd, 0xe7, 0x43, 0xfe, 0xc1, 0xf1, 0xc1, 0xfe, 0xe9, 0xc1, 0xb3, 0x4e, 0x19, 0xb5, 0x01, 0x06, 0x47, 0xfb, 0xfe,
0xa9, 0xe2, 0x78, 0xef, 0x41, 0x33, 0xcd, 0x01, 0xd5, 0xc1, 0xd9, 0x3f, 0x1d, 0x28, 0x13, 0x4f, 0xcb, 0xa1, 0x54, 0x71, 0xbc, 0xff, 0x41, 0x33, 0x3d, 0x03, 0xaa, 0x83, 0xb3, 0x7f, 0x3a, 0x50,
0x0e, 0x4e, 0x07, 0x9d, 0x92, 0xf7, 0x5b, 0x09, 0x36, 0x6d, 0xca, 0xd8, 0x8c, 0x46, 0x8c, 0x08, 0x26, 0x9e, 0x1d, 0x9c, 0x0e, 0x3a, 0x25, 0xef, 0x97, 0x12, 0x6c, 0xda, 0x94, 0xb1, 0x19, 0x8d,
0xce, 0x46, 0x34, 0x89, 0x52, 0xce, 0xe4, 0x02, 0x21, 0xa8, 0x44, 0xe4, 0xc2, 0x30, 0x26, 0xbf, 0x18, 0x11, 0x9c, 0x8d, 0x68, 0x12, 0xa5, 0x9c, 0xc9, 0x09, 0x42, 0x50, 0x89, 0xc8, 0xa5, 0x61,
0x85, 0x26, 0xa7, 0x1c, 0x87, 0x92, 0x2d, 0xc7, 0x57, 0x0b, 0xf4, 0x29, 0x34, 0x34, 0x14, 0xcc, 0x4c, 0x8e, 0x85, 0x26, 0xa7, 0x1c, 0x87, 0x92, 0x2d, 0xc7, 0x57, 0x13, 0xf4, 0x31, 0x34, 0x34,
0xad, 0xec, 0x38, 0xbd, 0xd6, 0xde, 0x6d, 0x1b, 0x20, 0xed, 0xd1, 0x4f, 0xd5, 0xbc, 0x43, 0xd8, 0x14, 0xcc, 0xad, 0xec, 0x38, 0xbd, 0xd6, 0xde, 0x5d, 0x1b, 0x20, 0xed, 0xd1, 0x4f, 0xd5, 0xbc,
0x3e, 0x24, 0x26, 0x12, 0x85, 0x9f, 0xb9, 0x41, 0xc2, 0x2f, 0x9e, 0x12, 0x19, 0x8c, 0xf0, 0x8b, 0x43, 0xd8, 0x3e, 0x24, 0x26, 0x12, 0x85, 0x9f, 0xb9, 0x41, 0xc2, 0x2f, 0x9e, 0x12, 0x19, 0x8c,
0xa7, 0x04, 0xb9, 0x50, 0xd7, 0xd7, 0x4f, 0x86, 0x53, 0xf5, 0xcd, 0xd2, 0xe3, 0xe0, 0x2e, 0x1a, 0xf0, 0x8b, 0xa7, 0x04, 0xb9, 0x50, 0xd7, 0xd7, 0x4f, 0x86, 0x53, 0xf5, 0xcd, 0xd4, 0xe3, 0xe0,
0xd2, 0x79, 0xe5, 0x59, 0xba, 0x07, 0x15, 0x51, 0x19, 0xd2, 0x4c, 0x6b, 0x0f, 0xd9, 0x71, 0x3e, 0x2e, 0x1a, 0xd2, 0xe7, 0xca, 0xb3, 0xf4, 0x00, 0x2a, 0x22, 0x33, 0xa4, 0x99, 0xd6, 0x1e, 0xb2,
0x8d, 0x26, 0xd4, 0x97, 0x72, 0x9b, 0x3a, 0x27, 0x4b, 0xdd, 0xd1, 0xbc, 0xd7, 0x01, 0x8d, 0x38, 0xe3, 0x7c, 0x1e, 0x4d, 0xa8, 0x2f, 0xe5, 0x36, 0x75, 0x4e, 0x96, 0xba, 0xa3, 0x79, 0xaf, 0x03,
0x89, 0xf8, 0xf5, 0xe2, 0x3f, 0x86, 0x3b, 0x39, 0x96, 0x74, 0x02, 0xbb, 0x50, 0xd7, 0xa1, 0x49, 0x1a, 0x71, 0x12, 0xf1, 0x9b, 0xc5, 0x7f, 0x0c, 0xf7, 0x72, 0x2c, 0xe9, 0x03, 0xec, 0x42, 0x5d,
0x6b, 0x85, 0xb8, 0x1a, 0x2d, 0xef, 0x1f, 0x07, 0x36, 0x5f, 0xcc, 0xc6, 0x98, 0x13, 0x23, 0x5a, 0x87, 0x26, 0xad, 0x15, 0xe2, 0x6a, 0xb4, 0xbc, 0xbf, 0x1c, 0xd8, 0x7c, 0x35, 0x1b, 0x63, 0x4e,
0x12, 0xd4, 0x7d, 0xa8, 0xca, 0x0e, 0xa3, 0xb1, 0xb8, 0xa9, 0x6c, 0xab, 0x36, 0x34, 0x10, 0x7f, 0x8c, 0x68, 0x49, 0x50, 0x0f, 0xa1, 0x2a, 0x2b, 0x8c, 0xc6, 0xe2, 0xb6, 0xb2, 0xad, 0xca, 0xd0,
0x7d, 0x25, 0x47, 0x0f, 0xa1, 0x76, 0x8e, 0xc3, 0x84, 0x30, 0x09, 0x44, 0x8a, 0x9a, 0xd6, 0x94, 0x40, 0xfc, 0xfa, 0x4a, 0x8e, 0x1e, 0x43, 0xed, 0x02, 0x87, 0x09, 0x61, 0x12, 0x88, 0x14, 0x35,
0xed, 0xc9, 0xd7, 0x1a, 0x68, 0x1b, 0xea, 0xe3, 0xf8, 0x52, 0xf4, 0x17, 0x59, 0x92, 0x0d, 0xbf, 0xad, 0x29, 0xcb, 0x93, 0xaf, 0x35, 0xd0, 0x36, 0xd4, 0xc7, 0xf1, 0x95, 0xa8, 0x2f, 0x32, 0x25,
0x36, 0x8e, 0x2f, 0xfd, 0x24, 0x42, 0x1f, 0xc0, 0xc6, 0x38, 0x60, 0xf8, 0x2c, 0x24, 0xc3, 0xd7, 0x1b, 0x7e, 0x6d, 0x1c, 0x5f, 0xf9, 0x49, 0x84, 0xde, 0x83, 0x8d, 0x71, 0xc0, 0xf0, 0x59, 0x48,
0x94, 0xbe, 0x61, 0xb2, 0x2a, 0x1b, 0xfe, 0xba, 0xde, 0x3c, 0x12, 0x7b, 0xa8, 0x2b, 0x6e, 0xd2, 0x86, 0x6f, 0x28, 0x7d, 0xcb, 0x64, 0x56, 0x36, 0xfc, 0x75, 0xbd, 0x78, 0x24, 0xd6, 0x50, 0x57,
0x28, 0x26, 0x98, 0x13, 0xb7, 0x26, 0xe5, 0xe9, 0x5a, 0x60, 0xc8, 0x83, 0x29, 0xa1, 0x09, 0x97, 0xdc, 0xa4, 0x51, 0x4c, 0x30, 0x27, 0x6e, 0x4d, 0xca, 0xd3, 0xb9, 0xc0, 0x90, 0x07, 0x53, 0x42,
0xa5, 0xe4, 0xf8, 0x66, 0x89, 0xde, 0x87, 0xf5, 0x98, 0x30, 0xc2, 0x87, 0x3a, 0xca, 0x86, 0x3c, 0x13, 0x2e, 0x53, 0xc9, 0xf1, 0xcd, 0x14, 0xfd, 0x1f, 0xd6, 0x63, 0xc2, 0x08, 0x1f, 0xea, 0x28,
0xd9, 0x92, 0x7b, 0x2f, 0x55, 0x58, 0x08, 0x2a, 0xbf, 0xe2, 0x80, 0xbb, 0x4d, 0x29, 0x92, 0xdf, 0x1b, 0x72, 0x67, 0x4b, 0xae, 0xbd, 0x56, 0x61, 0x21, 0xa8, 0xfc, 0x8c, 0x03, 0xee, 0x36, 0xa5,
0xea, 0x58, 0xc2, 0x88, 0x39, 0x06, 0xe6, 0x58, 0xc2, 0x88, 0x3e, 0xb6, 0x09, 0xd5, 0x09, 0x8d, 0x48, 0x8e, 0xd5, 0xb6, 0x84, 0x11, 0xb3, 0x0d, 0xcc, 0xb6, 0x84, 0x11, 0xbd, 0x6d, 0x13, 0xaa,
0x47, 0xc4, 0x6d, 0x49, 0x99, 0x5a, 0xa0, 0x1d, 0x68, 0x8d, 0x09, 0x1b, 0xc5, 0xc1, 0x8c, 0x0b, 0x13, 0x1a, 0x8f, 0x88, 0xdb, 0x92, 0x32, 0x35, 0x41, 0x3b, 0xd0, 0x1a, 0x13, 0x36, 0x8a, 0x83,
0x46, 0xd7, 0x25, 0xa6, 0xf3, 0x5b, 0x22, 0x0f, 0x96, 0x9c, 0x9d, 0x50, 0x4e, 0x98, 0xbb, 0xa1, 0x19, 0x17, 0x8c, 0xae, 0x4b, 0x4c, 0xe7, 0x97, 0xc4, 0x39, 0x58, 0x72, 0x76, 0x42, 0x39, 0x61,
0xf2, 0x30, 0x6b, 0x74, 0x0f, 0x6e, 0x8c, 0x42, 0x82, 0xa3, 0x64, 0x36, 0xa4, 0xd1, 0x70, 0x82, 0xee, 0x86, 0x3a, 0x87, 0x99, 0xa3, 0x07, 0x70, 0x6b, 0x14, 0x12, 0x1c, 0x25, 0xb3, 0x21, 0x8d,
0x83, 0xd0, 0x6d, 0x4b, 0x95, 0x0d, 0xbd, 0xfd, 0x2c, 0xfa, 0x1a, 0x07, 0xa1, 0x77, 0x04, 0xb7, 0x86, 0x13, 0x1c, 0x84, 0x6e, 0x5b, 0xaa, 0x6c, 0xe8, 0xe5, 0x17, 0xd1, 0x97, 0x38, 0x08, 0xbd,
0x33, 0x54, 0x5e, 0xf7, 0x56, 0xfc, 0x55, 0x86, 0x2d, 0x9f, 0x86, 0xe1, 0x19, 0x1e, 0xbd, 0x59, 0x23, 0xb8, 0x9b, 0xa1, 0xf2, 0xa6, 0xb7, 0xe2, 0xf7, 0x32, 0x6c, 0xf9, 0x34, 0x0c, 0xcf, 0xf0,
0xe1, 0x5e, 0xcc, 0x51, 0x58, 0x5e, 0x4e, 0xa1, 0x93, 0x43, 0xe1, 0xdc, 0x55, 0xaf, 0x58, 0x57, 0xe8, 0xed, 0x0a, 0xf7, 0x62, 0x8e, 0xc2, 0xf2, 0x72, 0x0a, 0x9d, 0x1c, 0x0a, 0xe7, 0xae, 0x7a,
0xdd, 0x22, 0xb7, 0x5a, 0x4c, 0x6e, 0xcd, 0x26, 0xd7, 0x30, 0x57, 0x9f, 0x63, 0x2e, 0xa5, 0xa5, 0xc5, 0xba, 0xea, 0x16, 0xb9, 0xd5, 0x62, 0x72, 0x6b, 0x36, 0xb9, 0x86, 0xb9, 0xfa, 0x1c, 0x73,
0xb1, 0x84, 0x96, 0xe6, 0x22, 0x2d, 0x39, 0xd0, 0x43, 0x1e, 0xf4, 0xdf, 0xc0, 0xf6, 0x02, 0x5e, 0x29, 0x2d, 0x8d, 0x25, 0xb4, 0x34, 0x17, 0x69, 0xc9, 0x81, 0x1e, 0xf2, 0xa0, 0xff, 0x0a, 0xb6,
0xd7, 0x05, 0xff, 0x77, 0x07, 0x6e, 0x3f, 0x8d, 0x18, 0xc7, 0x61, 0x98, 0xc1, 0x3e, 0xad, 0xbf, 0x17, 0xf0, 0xba, 0x29, 0xf8, 0xbf, 0x3a, 0x70, 0xf7, 0x79, 0xc4, 0x38, 0x0e, 0xc3, 0x0c, 0xf6,
0xd2, 0xca, 0xf5, 0x57, 0xfe, 0x3f, 0xf5, 0xe7, 0x58, 0xe4, 0x19, 0xa6, 0x2b, 0x73, 0x4c, 0xaf, 0x69, 0xfe, 0x95, 0x56, 0xce, 0xbf, 0xf2, 0xbf, 0xc9, 0x3f, 0xc7, 0x22, 0xcf, 0x30, 0x5d, 0x99,
0x54, 0x93, 0x56, 0x27, 0xac, 0x65, 0x3a, 0x21, 0x7a, 0x17, 0x40, 0x15, 0x91, 0x34, 0xae, 0x48, 0x63, 0x7a, 0xa5, 0x9c, 0xb4, 0x2a, 0x61, 0x2d, 0x53, 0x09, 0xd1, 0x7f, 0x01, 0x54, 0x12, 0x49,
0x6a, 0xca, 0x9d, 0x13, 0xdd, 0xf8, 0x0c, 0xaf, 0x8d, 0x7c, 0x5e, 0xe7, 0x2b, 0xb2, 0x07, 0x1d, 0xe3, 0x8a, 0xa4, 0xa6, 0x5c, 0x39, 0xd1, 0x85, 0xcf, 0xf0, 0xda, 0xc8, 0xe7, 0x75, 0x3e, 0x23,
0x13, 0xcf, 0x28, 0x1e, 0xcb, 0x98, 0x34, 0x41, 0x6d, 0xbd, 0x3f, 0x88, 0xc7, 0x22, 0xaa, 0x2c, 0x7b, 0xd0, 0x31, 0xf1, 0x8c, 0xe2, 0xb1, 0x8c, 0x49, 0x13, 0xd4, 0xd6, 0xeb, 0x83, 0x78, 0x2c,
0xd7, 0xad, 0xe5, 0x25, 0xb8, 0x6e, 0x97, 0xa0, 0xf7, 0x14, 0xb6, 0xb2, 0x94, 0x5c, 0x97, 0xde, 0xa2, 0xca, 0x72, 0xdd, 0x5a, 0x9e, 0x82, 0xeb, 0x76, 0x0a, 0x7a, 0xcf, 0x61, 0x2b, 0x4b, 0xc9,
0x3f, 0x4b, 0xb0, 0xfd, 0x22, 0x0a, 0x72, 0x09, 0xce, 0x2b, 0xae, 0x05, 0xc8, 0xcb, 0x39, 0x90, 0x4d, 0xe9, 0xfd, 0xad, 0x04, 0xdb, 0xaf, 0xa2, 0x20, 0x97, 0xe0, 0xbc, 0xe4, 0x5a, 0x80, 0xbc,
0x6f, 0x42, 0x75, 0x96, 0xc4, 0xaf, 0x88, 0xa6, 0x50, 0x2d, 0xe6, 0xb1, 0xac, 0xd8, 0x58, 0x66, 0x9c, 0x03, 0xf9, 0x26, 0x54, 0x67, 0x49, 0x7c, 0x4e, 0x34, 0x85, 0x6a, 0x32, 0x8f, 0x65, 0xc5,
0xd0, 0xa8, 0x2e, 0xa0, 0xe1, 0x0d, 0xc1, 0x5d, 0x8c, 0xf2, 0x9a, 0x39, 0x8b, 0xbc, 0xd2, 0x37, 0xc6, 0x32, 0x83, 0x46, 0x75, 0x01, 0x0d, 0x6f, 0x08, 0xee, 0x62, 0x94, 0x37, 0x3c, 0xb3, 0x38,
0xb4, 0xa9, 0xde, 0x4b, 0xef, 0x16, 0xdc, 0x3c, 0x24, 0xfc, 0xa5, 0x2a, 0x75, 0x0d, 0x80, 0x77, 0x57, 0xfa, 0x86, 0x36, 0xd5, 0x7b, 0xe9, 0xdd, 0x81, 0xdb, 0x87, 0x84, 0xbf, 0x56, 0xa9, 0xae,
0x00, 0x68, 0x7e, 0xf3, 0xca, 0x9f, 0xde, 0xb2, 0xfd, 0x99, 0x01, 0xd3, 0xe8, 0x1b, 0x2d, 0xef, 0x01, 0xf0, 0x0e, 0x00, 0xcd, 0x2f, 0x5e, 0xfb, 0xd3, 0x4b, 0xb6, 0x3f, 0xd3, 0x60, 0x1a, 0x7d,
0x0b, 0x69, 0xfb, 0x28, 0x60, 0x9c, 0xc6, 0x97, 0xcb, 0xc0, 0xed, 0x80, 0x33, 0xc5, 0x17, 0xfa, 0xa3, 0xe5, 0x7d, 0x26, 0x6d, 0x1f, 0x05, 0x8c, 0xd3, 0xf8, 0x6a, 0x19, 0xb8, 0x1d, 0x70, 0xa6,
0x89, 0x15, 0x9f, 0xde, 0xa1, 0x8c, 0x20, 0x3d, 0xaa, 0x23, 0x98, 0x1f, 0x58, 0x4a, 0xab, 0x0d, 0xf8, 0x52, 0x3f, 0xb1, 0x62, 0xe8, 0x1d, 0xca, 0x08, 0xd2, 0xad, 0x3a, 0x82, 0xf9, 0x86, 0xa5,
0x2c, 0x7f, 0x94, 0x00, 0x3d, 0x27, 0xe9, 0xf0, 0xf4, 0x96, 0xc7, 0xde, 0xf0, 0x54, 0xb6, 0x79, 0xb4, 0x5a, 0xc3, 0xf2, 0x47, 0x09, 0xd0, 0x4b, 0x92, 0x36, 0x4f, 0xef, 0x78, 0xec, 0x0d, 0x4f,
0x72, 0xa1, 0xae, 0x1b, 0x8d, 0x66, 0xd6, 0x2c, 0xc5, 0x6d, 0x9d, 0xe1, 0x18, 0x87, 0x21, 0x09, 0x65, 0x9b, 0x27, 0x17, 0xea, 0xba, 0xd0, 0x68, 0x66, 0xcd, 0x54, 0xdc, 0xd6, 0x19, 0x8e, 0x71,
0xf5, 0xbb, 0x99, 0xae, 0xc5, 0x3b, 0x35, 0xc5, 0x17, 0xc3, 0x54, 0x2e, 0xe8, 0xdd, 0xf0, 0x5b, 0x18, 0x92, 0x50, 0xbf, 0x9b, 0xe9, 0x5c, 0xbc, 0x53, 0x53, 0x7c, 0x39, 0x4c, 0xe5, 0x82, 0xde,
0x53, 0x7c, 0xf1, 0xbd, 0xde, 0xf2, 0x7e, 0x82, 0x5b, 0x56, 0x70, 0x3a, 0x4f, 0x81, 0x07, 0x7b, 0x0d, 0xbf, 0x35, 0xc5, 0x97, 0xdf, 0x1a, 0x15, 0x04, 0x95, 0x90, 0x9e, 0x33, 0xfd, 0x66, 0xca,
0xa5, 0x83, 0x13, 0x9f, 0xe8, 0x73, 0xa8, 0xa9, 0x01, 0x55, 0x86, 0xd6, 0xde, 0xbb, 0x6b, 0xe7, 0xb1, 0xf7, 0x03, 0xdc, 0xb1, 0x02, 0xd6, 0x67, 0x17, 0x18, 0xb1, 0x73, 0x1d, 0xb0, 0x18, 0xa2,
0x2d, 0x8d, 0x24, 0x91, 0x9e, 0x68, 0x7d, 0xad, 0xbb, 0xf7, 0x6f, 0x03, 0xda, 0x66, 0xc4, 0x52, 0x4f, 0xa1, 0xa6, 0x9a, 0x56, 0x19, 0x6e, 0x7b, 0xef, 0xbe, 0x8d, 0x85, 0x34, 0x92, 0x44, 0xba,
0xe3, 0x33, 0x0a, 0x60, 0x7d, 0x7e, 0x96, 0x44, 0x0f, 0x8a, 0xa7, 0xeb, 0xcc, 0x3f, 0x11, 0xba, 0xcb, 0xf5, 0xb5, 0xee, 0xde, 0xdf, 0x0d, 0x68, 0x9b, 0xb6, 0x4b, 0xb5, 0xd4, 0x28, 0x80, 0xf5,
0x0f, 0x57, 0x51, 0x55, 0x19, 0x78, 0x6b, 0x9f, 0x94, 0x10, 0x83, 0x4e, 0x76, 0xc4, 0x43, 0x8f, 0xf9, 0xfe, 0x12, 0x3d, 0x2a, 0xee, 0xb8, 0x33, 0x7f, 0x36, 0x74, 0x1f, 0xaf, 0xa2, 0xaa, 0x4e,
0xf2, 0x6d, 0x14, 0xcc, 0x94, 0xdd, 0xfe, 0xaa, 0xea, 0xc6, 0x2d, 0x3a, 0x97, 0x77, 0xce, 0x9e, 0xe0, 0xad, 0x7d, 0x54, 0x42, 0x0c, 0x3a, 0xd9, 0xb6, 0x0f, 0x3d, 0xc9, 0xb7, 0x51, 0xd0, 0x67,
0xcb, 0xd0, 0x5b, 0xcd, 0xd8, 0xa3, 0x60, 0x77, 0x77, 0x65, 0xfd, 0xd4, 0xef, 0xcf, 0xb0, 0x61, 0x76, 0xfb, 0xab, 0xaa, 0x1b, 0xb7, 0xe8, 0x42, 0xde, 0x43, 0xbb, 0x57, 0x43, 0xef, 0x34, 0x63,
0xbd, 0xfa, 0xa8, 0x00, 0xad, 0xbc, 0x29, 0xaf, 0xfb, 0xd1, 0x4a, 0xba, 0xa9, 0xaf, 0x29, 0xb4, 0xb7, 0x87, 0xdd, 0xdd, 0x95, 0xf5, 0x53, 0xbf, 0x3f, 0xc2, 0x86, 0xd5, 0x09, 0xa0, 0x02, 0xb4,
0xed, 0x36, 0x88, 0x0a, 0x0c, 0xe4, 0xbe, 0x5f, 0xdd, 0x8f, 0x57, 0x53, 0x4e, 0xdd, 0x31, 0xe8, 0xf2, 0x3a, 0xbf, 0xee, 0x07, 0x2b, 0xe9, 0xa6, 0xbe, 0xa6, 0xd0, 0xb6, 0x4b, 0x23, 0x2a, 0x30,
0x64, 0x7b, 0x50, 0x11, 0x8f, 0x05, 0x1d, 0xb5, 0x88, 0xc7, 0xa2, 0xd6, 0xe6, 0xad, 0x21, 0x0c, 0x90, 0xfb, 0xa6, 0x75, 0x3f, 0x5c, 0x4d, 0x39, 0x75, 0xc7, 0xa0, 0x93, 0xad, 0x4b, 0x45, 0x3c,
0x70, 0xd5, 0x82, 0xd0, 0xfd, 0x42, 0x42, 0xec, 0xce, 0xd5, 0xed, 0xbd, 0x5d, 0x31, 0x75, 0x31, 0x16, 0x54, 0xd9, 0x22, 0x1e, 0x8b, 0xca, 0x9d, 0xb7, 0x86, 0x30, 0xc0, 0x75, 0x59, 0x42, 0x0f,
0x83, 0x1b, 0x99, 0x69, 0x01, 0x15, 0x40, 0x93, 0x3f, 0x84, 0x75, 0x1f, 0xad, 0xa8, 0x9d, 0x49, 0x0b, 0x09, 0xb1, 0xab, 0x59, 0xb7, 0xf7, 0x6e, 0xc5, 0xd4, 0xc5, 0x0c, 0x6e, 0x65, 0x3a, 0x08,
0x4a, 0x77, 0xb5, 0x25, 0x49, 0xd9, 0x2d, 0x73, 0x49, 0x52, 0x99, 0x06, 0xe9, 0xad, 0xa1, 0x00, 0x54, 0x00, 0x4d, 0x7e, 0x63, 0xd6, 0x7d, 0xb2, 0xa2, 0x76, 0xe6, 0x50, 0xba, 0xd2, 0x2d, 0x39,
0xda, 0x7e, 0x12, 0x69, 0xd7, 0xa2, 0x2d, 0xa0, 0x82, 0xd3, 0x8b, 0x4d, 0xb1, 0xfb, 0x60, 0x05, 0x94, 0x5d, 0x46, 0x97, 0x1c, 0x2a, 0x53, 0x34, 0xbd, 0x35, 0x14, 0x40, 0xdb, 0x4f, 0x22, 0xed,
0xcd, 0xab, 0xfa, 0x7e, 0x0c, 0x3f, 0x36, 0x8c, 0xea, 0x59, 0x4d, 0xfe, 0xef, 0xc2, 0x67, 0xff, 0x5a, 0x94, 0x05, 0x54, 0xb0, 0x7b, 0xb1, 0x50, 0x76, 0x1f, 0xad, 0xa0, 0x79, 0x9d, 0xdf, 0x4f,
0x05, 0x00, 0x00, 0xff, 0xff, 0xba, 0xd8, 0xb0, 0xb9, 0x4b, 0x11, 0x00, 0x00, 0xe1, 0xfb, 0x86, 0x51, 0x3d, 0xab, 0xc9, 0xff, 0x38, 0x7c, 0xf2, 0x4f, 0x00, 0x00, 0x00, 0xff,
0xff, 0x8a, 0x23, 0x76, 0x0d, 0x5f, 0x11, 0x00, 0x00,
} }
...@@ -19,17 +19,22 @@ package releasetesting ...@@ -19,17 +19,22 @@ package releasetesting
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil"
"log" "log"
"strings"
"sync" "sync"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/helm/pkg/proto/hapi/release" "k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/helm/pkg/proto/hapi/services" "k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/tiller/environment" "k8s.io/helm/pkg/tiller/environment"
) )
// logEscaper is necessary for escaping control characters found in the log stream.
var logEscaper = strings.NewReplacer("%", "%%")
// Environment encapsulates information about where test suite executes and returns results // Environment encapsulates information about where test suite executes and returns results
type Environment struct { type Environment struct {
Namespace string Namespace string
...@@ -126,3 +131,31 @@ func (env *Environment) DeleteTestPods(testManifests []string) { ...@@ -126,3 +131,31 @@ func (env *Environment) DeleteTestPods(testManifests []string) {
} }
} }
} }
// GetLogs collects the logs from the pods created in testManifests
func (env *Environment) GetLogs(testManifests []string) {
for _, testManifest := range testManifests {
infos, err := env.KubeClient.Build(env.Namespace, bytes.NewBufferString(testManifest))
if err != nil {
env.streamError(err.Error())
continue
}
if len(infos) == 0 {
env.streamError(fmt.Sprint("Pod manifest is invalid. Unable to obtain the logs"))
continue
}
podName := infos[0].Object.(*v1.Pod).Name
lr, err := env.KubeClient.GetPodLogs(podName, env.Namespace)
if err != nil {
env.streamError(err.Error())
continue
}
logs, err := ioutil.ReadAll(lr)
if err != nil {
env.streamError(err.Error())
continue
}
msg := fmt.Sprintf("\nPOD LOGS: %s\n%s", podName, logEscaper.Replace(string(logs)))
env.streamMessage(msg, release.TestRun_RUNNING)
}
}
...@@ -89,6 +89,24 @@ func TestDeleteTestPodsFailingDelete(t *testing.T) { ...@@ -89,6 +89,24 @@ func TestDeleteTestPodsFailingDelete(t *testing.T) {
} }
} }
func TestGetTestPodLogs(t *testing.T) {
mockTestSuite := testSuiteFixture([]string{manifestWithTestSuccessHook})
mockTestEnv := newMockTestingEnvironment()
mockTestEnv.KubeClient = newGetLogKubeClient()
mockTestEnv.GetLogs(mockTestSuite.TestManifests)
expectedMessage := "ERROR: Pod manifest is invalid. Unable to obtain the logs"
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: %v", expectedMessage, stream.messages[0].Msg)
}
}
func TestStreamMessage(t *testing.T) { func TestStreamMessage(t *testing.T) {
mockTestEnv := newMockTestingEnvironment() mockTestEnv := newMockTestingEnvironment()
...@@ -181,3 +199,13 @@ func newCreateFailingKubeClient() *createFailingKubeClient { ...@@ -181,3 +199,13 @@ func newCreateFailingKubeClient() *createFailingKubeClient {
func (p *createFailingKubeClient) Create(ns string, r io.Reader, t int64, shouldWait bool) error { func (p *createFailingKubeClient) Create(ns string, r io.Reader, t int64, shouldWait bool) error {
return errors.New("We ran out of budget and couldn't create finding-nemo") return errors.New("We ran out of budget and couldn't create finding-nemo")
} }
type getLogKubeClient struct {
tillerEnv.PrintingKubeClient
}
func newGetLogKubeClient() *getLogKubeClient {
return &getLogKubeClient{
PrintingKubeClient: tillerEnv.PrintingKubeClient{Out: ioutil.Discard},
}
}
...@@ -175,6 +175,8 @@ type KubeClient interface { ...@@ -175,6 +175,8 @@ type KubeClient interface {
// and returns said phase (PodSucceeded or PodFailed qualify). // and returns said phase (PodSucceeded or PodFailed qualify).
WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error)
GetPodLogs(name, namespace string) (io.ReadCloser, error)
WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error
} }
...@@ -255,6 +257,11 @@ func (p *PrintingKubeClient) WaitAndGetCompletedPodPhase(namespace string, reade ...@@ -255,6 +257,11 @@ func (p *PrintingKubeClient) WaitAndGetCompletedPodPhase(namespace string, reade
return v1.PodUnknown, err return v1.PodUnknown, err
} }
// GetPodLogs implements KubeClient GetPodLogs.
func (p *PrintingKubeClient) GetPodLogs(name, ns string) (io.ReadCloser, error) {
return nil, nil
}
// WaitUntilCRDEstablished implements KubeClient WaitUntilCRDEstablished. // WaitUntilCRDEstablished implements KubeClient WaitUntilCRDEstablished.
func (p *PrintingKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error { func (p *PrintingKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error {
_, err := io.Copy(p.Out, reader) _, err := io.Copy(p.Out, reader)
......
...@@ -78,6 +78,10 @@ func (k *mockKubeClient) WaitAndGetCompletedPodStatus(namespace string, reader i ...@@ -78,6 +78,10 @@ func (k *mockKubeClient) WaitAndGetCompletedPodStatus(namespace string, reader i
return "", nil return "", nil
} }
func (k *mockKubeClient) GetPodLogs(name, namespace string) (io.ReadCloser, error) {
return nil, nil
}
func (k *mockKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error { func (k *mockKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error {
return nil return nil
} }
......
...@@ -679,6 +679,9 @@ func (kc *mockHooksKubeClient) Validate(ns string, reader io.Reader) error { ...@@ -679,6 +679,9 @@ func (kc *mockHooksKubeClient) Validate(ns string, reader io.Reader) error {
func (kc *mockHooksKubeClient) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error) { func (kc *mockHooksKubeClient) WaitAndGetCompletedPodPhase(namespace string, reader io.Reader, timeout time.Duration) (v1.PodPhase, error) {
return v1.PodUnknown, nil return v1.PodUnknown, nil
} }
func (kc *mockHooksKubeClient) GetPodLogs(name, namespace string) (io.ReadCloser, error) {
return nil, nil
}
func (kc *mockHooksKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error { func (kc *mockHooksKubeClient) WaitUntilCRDEstablished(reader io.Reader, timeout time.Duration) error {
return nil return nil
......
...@@ -69,6 +69,10 @@ func (s *ReleaseServer) RunReleaseTest(req *services.TestReleaseRequest, stream ...@@ -69,6 +69,10 @@ func (s *ReleaseServer) RunReleaseTest(req *services.TestReleaseRequest, stream
Results: tSuite.Results, Results: tSuite.Results,
} }
if req.Logs {
testEnv.GetLogs(tSuite.TestManifests)
}
if req.Cleanup { if req.Cleanup {
testEnv.DeleteTestPods(tSuite.TestManifests) testEnv.DeleteTestPods(tSuite.TestManifests)
} }
......
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