github.com/strongmonkey/helm@v2.7.2+incompatible/pkg/helm/fake.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors All rights reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package helm // import "k8s.io/helm/pkg/helm" 18 19 import ( 20 "fmt" 21 "sync" 22 23 "k8s.io/helm/pkg/proto/hapi/chart" 24 "k8s.io/helm/pkg/proto/hapi/release" 25 rls "k8s.io/helm/pkg/proto/hapi/services" 26 "k8s.io/helm/pkg/proto/hapi/version" 27 ) 28 29 // FakeClient implements Interface 30 type FakeClient struct { 31 Rels []*release.Release 32 Responses map[string]release.TestRun_Status 33 Err error 34 } 35 36 var _ Interface = &FakeClient{} 37 var _ Interface = (*FakeClient)(nil) 38 39 // ListReleases lists the current releases 40 func (c *FakeClient) ListReleases(opts ...ReleaseListOption) (*rls.ListReleasesResponse, error) { 41 resp := &rls.ListReleasesResponse{ 42 Count: int64(len(c.Rels)), 43 Releases: c.Rels, 44 } 45 return resp, c.Err 46 } 47 48 // InstallRelease returns a response with the first Release on the fake release client 49 func (c *FakeClient) InstallRelease(chStr, ns string, opts ...InstallOption) (*rls.InstallReleaseResponse, error) { 50 return &rls.InstallReleaseResponse{ 51 Release: c.Rels[0], 52 }, nil 53 } 54 55 // InstallReleaseFromChart returns a response with the first Release on the fake release client 56 func (c *FakeClient) InstallReleaseFromChart(chart *chart.Chart, ns string, opts ...InstallOption) (*rls.InstallReleaseResponse, error) { 57 return &rls.InstallReleaseResponse{ 58 Release: c.Rels[0], 59 }, nil 60 } 61 62 // DeleteRelease returns nil, nil 63 func (c *FakeClient) DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) { 64 return nil, nil 65 } 66 67 // UpdateRelease returns nil, nil 68 func (c *FakeClient) UpdateRelease(rlsName string, chStr string, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) { 69 return nil, nil 70 } 71 72 // GetVersion returns a fake version 73 func (c *FakeClient) GetVersion(opts ...VersionOption) (*rls.GetVersionResponse, error) { 74 return &rls.GetVersionResponse{ 75 Version: &version.Version{ 76 SemVer: "1.2.3-fakeclient+testonly", 77 }, 78 }, nil 79 } 80 81 // UpdateReleaseFromChart returns nil, nil 82 func (c *FakeClient) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) { 83 return nil, nil 84 } 85 86 // RollbackRelease returns nil, nil 87 func (c *FakeClient) RollbackRelease(rlsName string, opts ...RollbackOption) (*rls.RollbackReleaseResponse, error) { 88 return nil, nil 89 } 90 91 // ReleaseStatus returns a release status response with info from the first release in the fake 92 // release client 93 func (c *FakeClient) ReleaseStatus(rlsName string, opts ...StatusOption) (*rls.GetReleaseStatusResponse, error) { 94 if c.Rels[0] != nil { 95 return &rls.GetReleaseStatusResponse{ 96 Name: c.Rels[0].Name, 97 Info: c.Rels[0].Info, 98 Namespace: c.Rels[0].Namespace, 99 }, nil 100 } 101 return nil, fmt.Errorf("No such release: %s", rlsName) 102 } 103 104 // ReleaseContent returns the configuration for the first release in the fake release client 105 func (c *FakeClient) ReleaseContent(rlsName string, opts ...ContentOption) (resp *rls.GetReleaseContentResponse, err error) { 106 if len(c.Rels) > 0 { 107 resp = &rls.GetReleaseContentResponse{ 108 Release: c.Rels[0], 109 } 110 } 111 return resp, c.Err 112 } 113 114 // ReleaseHistory returns a release's revision history. 115 func (c *FakeClient) ReleaseHistory(rlsName string, opts ...HistoryOption) (*rls.GetHistoryResponse, error) { 116 return &rls.GetHistoryResponse{Releases: c.Rels}, c.Err 117 } 118 119 // RunReleaseTest executes a pre-defined tests on a release 120 func (c *FakeClient) RunReleaseTest(rlsName string, opts ...ReleaseTestOption) (<-chan *rls.TestReleaseResponse, <-chan error) { 121 122 results := make(chan *rls.TestReleaseResponse) 123 errc := make(chan error, 1) 124 125 go func() { 126 var wg sync.WaitGroup 127 for m, s := range c.Responses { 128 wg.Add(1) 129 130 go func(msg string, status release.TestRun_Status) { 131 defer wg.Done() 132 results <- &rls.TestReleaseResponse{Msg: msg, Status: status} 133 }(m, s) 134 } 135 136 wg.Wait() 137 close(results) 138 close(errc) 139 }() 140 141 return results, errc 142 } 143 144 // Option returns the fake release client 145 func (c *FakeClient) Option(opt ...Option) Interface { 146 return c 147 }