github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/build_manifests_internal_test.go (about) 1 package plan 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "testing" 8 9 "github.com/helmwave/helmwave/pkg/release/uniqname" 10 "github.com/helmwave/helmwave/tests" 11 log "github.com/sirupsen/logrus" 12 "github.com/stretchr/testify/suite" 13 helmRelease "helm.sh/helm/v3/pkg/release" 14 ) 15 16 type BuildManifestsTestSuite struct { 17 suite.Suite 18 19 ctx context.Context 20 } 21 22 func TestBuildManifestsTestSuite(t *testing.T) { 23 t.Parallel() 24 suite.Run(t, new(BuildManifestsTestSuite)) 25 } 26 27 func (ts *BuildManifestsTestSuite) SetupTest() { 28 ts.ctx = tests.GetContext(ts.T()) 29 } 30 31 func (ts *BuildManifestsTestSuite) TestEmptyReleases() { 32 p := New(".") 33 p.NewBody() 34 35 err := p.buildManifest(ts.ctx) 36 37 ts.Require().NoError(err) 38 } 39 40 func (ts *BuildManifestsTestSuite) TestMultipleReleases() { 41 p := New(".") 42 43 rel1 := &MockReleaseConfig{} 44 u1 := uniqname.UniqName("redis1@defaultblabla") 45 rel1.On("Logger").Return(log.WithField("test", ts.T().Name())) 46 rel1.On("ChartDepsUpd").Return(nil) 47 rel1.On("DryRun").Return() 48 rel1.On("Sync").Return(&helmRelease.Release{}, nil) 49 rel1.On("HooksDisabled").Return(false) 50 rel1.On("Uniq").Return(u1) 51 52 rel2 := &MockReleaseConfig{} 53 u2 := uniqname.UniqName("redis2@defaultblabla") 54 rel2.On("Logger").Return(log.WithField("test", ts.T().Name())) 55 rel2.On("ChartDepsUpd").Return(nil) 56 rel2.On("DryRun").Return() 57 rel2.On("Sync").Return(&helmRelease.Release{}, nil) 58 rel2.On("HooksDisabled").Return(false) 59 rel2.On("Uniq").Return(u2) 60 61 p.SetReleases(rel1, rel2) 62 63 err := p.buildManifest(ts.ctx) 64 65 ts.Require().NoError(err) 66 ts.Require().Len(p.manifests, 2) 67 ts.Require().Contains(p.manifests, u1) 68 ts.Require().Contains(p.manifests, u2) 69 ts.Require().Equal("", p.manifests[u1]) 70 ts.Require().Equal("", p.manifests[u2]) 71 72 rel1.AssertExpectations(ts.T()) 73 rel2.AssertExpectations(ts.T()) 74 } 75 76 func (ts *BuildManifestsTestSuite) TestChartDepsUpdError() { 77 p := New(".") 78 79 rel := &MockReleaseConfig{} 80 uniq := uniqname.UniqName("redis1@defaultblabla") 81 errExpected := errors.New(ts.T().Name()) 82 rel.On("Logger").Return(log.WithField("test", ts.T().Name())) 83 rel.On("ChartDepsUpd").Return(errExpected) 84 rel.On("DryRun").Return() 85 rel.On("Sync").Return(&helmRelease.Release{}, nil) 86 rel.On("HooksDisabled").Return(false) 87 rel.On("Uniq").Return(uniq) 88 89 p.SetReleases(rel) 90 91 err := p.buildManifest(ts.ctx) 92 93 ts.Require().NoError(err) 94 ts.Require().Len(p.manifests, 1) 95 ts.Require().Contains(p.manifests, uniq) 96 ts.Require().Equal("", p.manifests[uniq]) 97 98 rel.AssertExpectations(ts.T()) 99 } 100 101 func (ts *BuildManifestsTestSuite) TestSyncError() { 102 p := New(".") 103 104 rel := &MockReleaseConfig{} 105 errExpected := errors.New(ts.T().Name()) 106 rel.On("Logger").Return(log.WithField("test", ts.T().Name())) 107 rel.On("ChartDepsUpd").Return(nil) 108 rel.On("DryRun").Return() 109 rel.On("Sync").Return(&helmRelease.Release{}, errExpected) 110 111 p.SetReleases(rel) 112 113 err := p.buildManifest(ts.ctx) 114 115 ts.Require().ErrorIs(err, errExpected) 116 117 rel.AssertExpectations(ts.T()) 118 } 119 120 func (ts *BuildManifestsTestSuite) TestDisabledHooks() { 121 p := New(".") 122 123 rel := &MockReleaseConfig{} 124 uniq := uniqname.UniqName("redis1@defaultblabla") 125 rel.On("Logger").Return(log.WithField("test", ts.T().Name())) 126 rel.On("ChartDepsUpd").Return(nil) 127 rel.On("DryRun").Return() 128 rel.On("Sync").Return(&helmRelease.Release{ 129 Manifest: ts.T().Name(), 130 Hooks: []*helmRelease.Hook{{}}, 131 }, nil) 132 rel.On("HooksDisabled").Return(true) 133 rel.On("Uniq").Return(uniq) 134 135 p.SetReleases(rel) 136 137 err := p.buildManifest(ts.ctx) 138 139 ts.Require().NoError(err) 140 ts.Require().Len(p.manifests, 1) 141 ts.Require().Contains(p.manifests, uniq) 142 ts.Require().Equal(p.manifests[uniq], ts.T().Name()) 143 144 rel.AssertExpectations(ts.T()) 145 } 146 147 func (ts *BuildManifestsTestSuite) TestEnabledHooks() { 148 p := New(".") 149 150 rel := &MockReleaseConfig{} 151 uniq := uniqname.UniqName("redis1@defaultblabla") 152 rel.On("Logger").Return(log.WithField("test", ts.T().Name())) 153 rel.On("ChartDepsUpd").Return(nil) 154 rel.On("DryRun").Return() 155 rel.On("Sync").Return(&helmRelease.Release{ 156 Manifest: ts.T().Name(), 157 Hooks: []*helmRelease.Hook{ 158 { 159 Path: ts.T().Name(), 160 Manifest: ts.T().Name(), 161 }, 162 }, 163 }, nil) 164 rel.On("HooksDisabled").Return(false) 165 rel.On("Uniq").Return(uniq) 166 167 p.SetReleases(rel) 168 169 err := p.buildManifest(ts.ctx) 170 171 ts.Require().NoError(err) 172 ts.Require().Len(p.manifests, 1) 173 ts.Require().Contains(p.manifests, uniq) 174 ts.Require().Equal(p.manifests[uniq], fmt.Sprintf("%[1]s---\n# Source: %[1]s\n%[1]s\n", ts.T().Name())) 175 176 rel.AssertExpectations(ts.T()) 177 }