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  }