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  }