github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/up_test.go (about) 1 package plan_test 2 3 import ( 4 "context" 5 "errors" 6 "path/filepath" 7 "testing" 8 9 "github.com/helmwave/helmwave/pkg/kubedog" 10 "github.com/helmwave/helmwave/pkg/plan" 11 "github.com/helmwave/helmwave/pkg/release" 12 "github.com/helmwave/helmwave/tests" 13 log "github.com/sirupsen/logrus" 14 "github.com/stretchr/testify/suite" 15 helmRelease "helm.sh/helm/v3/pkg/release" 16 ) 17 18 type ApplyTestSuite struct { 19 suite.Suite 20 21 ctx context.Context 22 } 23 24 //nolint:paralleltest // can't parallel because of flock timeout 25 func TestApplyTestSuite(t *testing.T) { 26 // t.Parallel() 27 suite.Run(t, new(ApplyTestSuite)) 28 } 29 30 func (ts *ApplyTestSuite) SetupTest() { 31 ts.ctx = tests.GetContext(ts.T()) 32 } 33 34 func (ts *ApplyTestSuite) TestApplyBadRepoInstallation() { 35 tmpDir := ts.T().TempDir() 36 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 37 38 repoName := "blablanami" 39 40 mockedRepo := &plan.MockRepositoryConfig{} 41 mockedRepo.On("Name").Return(repoName) 42 e := errors.New(ts.T().Name()) 43 mockedRepo.On("Install").Return(e) 44 45 p.SetRepositories(mockedRepo) 46 47 err := p.Up(ts.ctx, &kubedog.Config{}) 48 ts.Require().ErrorIs(err, e) 49 50 mockedRepo.AssertExpectations(ts.T()) 51 } 52 53 func (ts *ApplyTestSuite) TestApplyNoReleases() { 54 tmpDir := ts.T().TempDir() 55 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 56 57 mockedRepo := &plan.MockRepositoryConfig{} 58 mockedRepo.On("Install").Return(nil) 59 60 p.SetRepositories(mockedRepo) 61 dog := &kubedog.Config{} 62 63 err := p.Up(ts.ctx, dog) 64 ts.Require().NoError(err) 65 66 mockedRepo.AssertExpectations(ts.T()) 67 } 68 69 func (ts *ApplyTestSuite) TestApplyFailedRelease() { 70 tmpDir := ts.T().TempDir() 71 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 72 73 mockedRelease := &plan.MockReleaseConfig{} 74 mockedRelease.On("Name").Return("redis") 75 mockedRelease.On("Namespace").Return("defaultblabla") 76 mockedRelease.On("Uniq").Return() 77 mockedRelease.On("DependsOn").Return([]*release.DependsOnReference{}) 78 mockedRelease.On("Logger").Return(log.WithField("test", ts.T().Name())) 79 e := errors.New(ts.T().Name()) 80 mockedRelease.On("Sync").Return(&helmRelease.Release{}, e) 81 mockedRelease.On("AllowFailure").Return(false) 82 mockedRelease.On("Monitors").Return([]release.MonitorReference{}) 83 84 p.SetReleases(mockedRelease) 85 86 err := p.Up(ts.ctx, &kubedog.Config{}) 87 ts.Require().ErrorIs(err, e) 88 89 mockedRelease.AssertExpectations(ts.T()) 90 } 91 92 func (ts *ApplyTestSuite) TestApply() { 93 tmpDir := ts.T().TempDir() 94 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 95 96 mockedRelease := &plan.MockReleaseConfig{} 97 mockedRelease.On("Name").Return("redis") 98 mockedRelease.On("Namespace").Return("defaultblabla") 99 mockedRelease.On("Uniq").Return() 100 mockedRelease.On("Sync").Return(&helmRelease.Release{}, nil) 101 mockedRelease.On("DependsOn").Return([]*release.DependsOnReference{}) 102 mockedRelease.On("Logger").Return(log.WithField("test", ts.T().Name())) 103 mockedRelease.On("Monitors").Return([]release.MonitorReference{}) 104 105 mockedRepo := &plan.MockRepositoryConfig{} 106 mockedRepo.On("Install").Return(nil) 107 108 p.SetRepositories(mockedRepo) 109 p.SetReleases(mockedRelease) 110 111 err := p.Up(ts.ctx, &kubedog.Config{}) 112 ts.Require().NoError(err) 113 114 mockedRepo.AssertExpectations(ts.T()) 115 mockedRelease.AssertExpectations(ts.T()) 116 }