mirror of https://github.com/helm/helm
parent
cacf215d6c
commit
f73d39ecc7
@ -0,0 +1,121 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/mock"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
"helm.sh/helm/v3/pkg/api/logger"
|
||||||
|
"helm.sh/helm/v3/pkg/chart"
|
||||||
|
"helm.sh/helm/v3/pkg/cli"
|
||||||
|
"helm.sh/helm/v3/pkg/release"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ServiceTestSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
ctx context.Context
|
||||||
|
installer *mockInstaller
|
||||||
|
chartloader *mockChartLoader
|
||||||
|
svc Service
|
||||||
|
settings *cli.EnvSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ServiceTestSuite) SetupTest() {
|
||||||
|
logger.Setup("")
|
||||||
|
s.ctx = context.Background()
|
||||||
|
s.installer = new(mockInstaller)
|
||||||
|
s.chartloader = new(mockChartLoader)
|
||||||
|
s.settings = &cli.EnvSettings{}
|
||||||
|
s.svc = NewService(s.settings, s.chartloader, s.installer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnInvalidChart() {
|
||||||
|
chartName := "stable/invalid-chart"
|
||||||
|
cfg := InstallConfig{
|
||||||
|
Name: "some-component",
|
||||||
|
Namespace: "hermes",
|
||||||
|
ChartName: chartName,
|
||||||
|
}
|
||||||
|
var vals chartValues
|
||||||
|
s.chartloader.On("LocateChart", chartName, s.settings).Return("", errors.New("Unable to find chart"))
|
||||||
|
|
||||||
|
res, err := s.svc.Install(s.ctx, cfg, vals)
|
||||||
|
|
||||||
|
t := s.T()
|
||||||
|
assert.Nil(t, res)
|
||||||
|
assert.EqualError(t, err, "error in locating chart: Unable to find chart")
|
||||||
|
s.chartloader.AssertExpectations(t)
|
||||||
|
s.installer.AssertNotCalled(t, "SetConfig")
|
||||||
|
s.installer.AssertNotCalled(t, "Run")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnFailedIntallRun() {
|
||||||
|
chartName := "stable/valid-chart"
|
||||||
|
cfg := InstallConfig{
|
||||||
|
Name: "some-component",
|
||||||
|
Namespace: "hermes",
|
||||||
|
ChartName: chartName,
|
||||||
|
}
|
||||||
|
var vals map[string]interface{}
|
||||||
|
s.chartloader.On("LocateChart", chartName, s.settings).Return("testdata/albatross", nil)
|
||||||
|
var release *release.Release
|
||||||
|
s.installer.On("SetConfig", cfg)
|
||||||
|
s.installer.On("Run", mock.AnythingOfType("*chart.Chart"), vals).Return(release, errors.New("cluster issue"))
|
||||||
|
|
||||||
|
res, err := s.svc.Install(s.ctx, cfg, vals)
|
||||||
|
|
||||||
|
t := s.T()
|
||||||
|
assert.Nil(t, res)
|
||||||
|
assert.EqualError(t, err, "error in installing chart: cluster issue")
|
||||||
|
s.chartloader.AssertExpectations(t)
|
||||||
|
s.installer.AssertExpectations(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *ServiceTestSuite) TestInstallShouldReturnResultOnSuccess() {
|
||||||
|
chartName := "stable/valid-chart"
|
||||||
|
cfg := InstallConfig{
|
||||||
|
Name: "some-component",
|
||||||
|
Namespace: "hermes",
|
||||||
|
ChartName: chartName,
|
||||||
|
}
|
||||||
|
var vals map[string]interface{}
|
||||||
|
s.chartloader.On("LocateChart", chartName, s.settings).Return("testdata/albatross", nil)
|
||||||
|
s.installer.On("SetConfig", cfg)
|
||||||
|
release := &release.Release{Name: "some-comp-release", Info: &release.Info{Status: release.StatusDeployed}}
|
||||||
|
s.installer.On("Run", mock.AnythingOfType("*chart.Chart"), vals).Return(release, nil)
|
||||||
|
|
||||||
|
res, err := s.svc.Install(s.ctx, cfg, vals)
|
||||||
|
|
||||||
|
t := s.T()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
require.NotNil(t, res)
|
||||||
|
assert.Equal(t, res.status, "deployed")
|
||||||
|
s.chartloader.AssertExpectations(t)
|
||||||
|
s.installer.AssertExpectations(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServiceSuite(t *testing.T) {
|
||||||
|
suite.Run(t, new(ServiceTestSuite))
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockChartLoader struct{ mock.Mock }
|
||||||
|
|
||||||
|
func (m *mockChartLoader) LocateChart(name string, settings *cli.EnvSettings) (string, error) {
|
||||||
|
args := m.Called(name, settings)
|
||||||
|
return args.String(0), args.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockInstaller struct{ mock.Mock }
|
||||||
|
|
||||||
|
func (m *mockInstaller) SetConfig(cfg InstallConfig) {
|
||||||
|
m.Called(cfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockInstaller) Run(c *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
|
||||||
|
args := m.Called(c, vals)
|
||||||
|
return args.Get(0).(*release.Release), args.Error(1)
|
||||||
|
}
|
Loading…
Reference in new issue