|
|
|
@ -1,8 +1,10 @@
|
|
|
|
|
package api
|
|
|
|
|
package api_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"errors"
|
|
|
|
|
"helm.sh/helm/v3/pkg/action"
|
|
|
|
|
"helm.sh/helm/v3/pkg/api"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
@ -19,33 +21,35 @@ import (
|
|
|
|
|
type ServiceTestSuite struct {
|
|
|
|
|
suite.Suite
|
|
|
|
|
ctx context.Context
|
|
|
|
|
installer *mockInstaller
|
|
|
|
|
upgrader *mockUpgrader
|
|
|
|
|
history *mockHistory
|
|
|
|
|
installer *mockInstall
|
|
|
|
|
chartloader *mockChartLoader
|
|
|
|
|
svc Service
|
|
|
|
|
lister *mockList
|
|
|
|
|
svc api.Service
|
|
|
|
|
settings *cli.EnvSettings
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) SetupTest() {
|
|
|
|
|
logger.Setup("")
|
|
|
|
|
s.ctx = context.Background()
|
|
|
|
|
s.installer = new(mockInstaller)
|
|
|
|
|
s.settings = &cli.EnvSettings{}
|
|
|
|
|
s.chartloader = new(mockChartLoader)
|
|
|
|
|
s.lister = new(mockList)
|
|
|
|
|
s.installer = new(mockInstall)
|
|
|
|
|
s.upgrader = new(mockUpgrader)
|
|
|
|
|
s.history = new(mockHistory)
|
|
|
|
|
s.chartloader = new(mockChartLoader)
|
|
|
|
|
s.settings = &cli.EnvSettings{}
|
|
|
|
|
s.svc = NewService(s.settings, s.chartloader, s.installer, s.upgrader, s.history)
|
|
|
|
|
s.ctx = context.Background()
|
|
|
|
|
s.svc = api.NewService(s.settings, s.chartloader, s.lister, s.installer, s.upgrader, s.history)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnInvalidChart() {
|
|
|
|
|
chartName := "stable/invalid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
|
}
|
|
|
|
|
var vals chartValues
|
|
|
|
|
var vals api.ChartValues
|
|
|
|
|
s.chartloader.On("LocateChart", chartName, s.settings).Return("", errors.New("Unable to find chart"))
|
|
|
|
|
|
|
|
|
|
res, err := s.svc.Install(s.ctx, cfg, vals)
|
|
|
|
@ -60,12 +64,12 @@ func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnInvalidChart() {
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnLocalChartReference() {
|
|
|
|
|
chartName := "./some/local-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
|
}
|
|
|
|
|
var vals chartValues
|
|
|
|
|
var vals api.ChartValues
|
|
|
|
|
|
|
|
|
|
res, err := s.svc.Install(s.ctx, cfg, vals)
|
|
|
|
|
|
|
|
|
@ -79,7 +83,7 @@ func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnLocalChartReference() {
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnFailedInstallRun() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -101,7 +105,7 @@ func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnFailedInstallRun() {
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestInstallShouldReturnResultOnSuccess() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -117,14 +121,14 @@ func (s *ServiceTestSuite) TestInstallShouldReturnResultOnSuccess() {
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
require.NotNil(t, res)
|
|
|
|
|
assert.Equal(t, res.status, "deployed")
|
|
|
|
|
assert.Equal(t, res.Status, "deployed")
|
|
|
|
|
s.chartloader.AssertExpectations(t)
|
|
|
|
|
s.installer.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestUpgradeInstallTrueShouldInstallChart() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -142,14 +146,14 @@ func (s *ServiceTestSuite) TestUpgradeInstallTrueShouldInstallChart() {
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
require.NotNil(t, res)
|
|
|
|
|
assert.Equal(t, res.status, "deployed")
|
|
|
|
|
assert.Equal(t, res.Status, "deployed")
|
|
|
|
|
s.chartloader.AssertExpectations(t)
|
|
|
|
|
s.installer.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestUpgradeInstallFalseShouldNotInstallChart() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -168,14 +172,14 @@ func (s *ServiceTestSuite) TestUpgradeInstallFalseShouldNotInstallChart() {
|
|
|
|
|
require.NotNil(t, res)
|
|
|
|
|
s.installer.AssertNotCalled(t, "Run")
|
|
|
|
|
s.history.AssertNotCalled(t, "Run")
|
|
|
|
|
assert.Equal(t, res.status, "deployed")
|
|
|
|
|
assert.Equal(t, res.Status, "deployed")
|
|
|
|
|
s.chartloader.AssertExpectations(t)
|
|
|
|
|
s.installer.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestUpgradeShouldReturnErrorOnFailedUpgradeRun() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -197,7 +201,7 @@ func (s *ServiceTestSuite) TestUpgradeShouldReturnErrorOnFailedUpgradeRun() {
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestUpgradeShouldReturnResultOnSuccess() {
|
|
|
|
|
chartName := "stable/valid-chart"
|
|
|
|
|
cfg := ReleaseConfig{
|
|
|
|
|
cfg := api.ReleaseConfig{
|
|
|
|
|
Name: "some-component",
|
|
|
|
|
Namespace: "hermes",
|
|
|
|
|
ChartName: chartName,
|
|
|
|
@ -213,52 +217,127 @@ func (s *ServiceTestSuite) TestUpgradeShouldReturnResultOnSuccess() {
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
require.NotNil(t, res)
|
|
|
|
|
assert.Equal(t, res.status, "deployed")
|
|
|
|
|
assert.Equal(t, res.Status, "deployed")
|
|
|
|
|
s.chartloader.AssertExpectations(t)
|
|
|
|
|
s.upgrader.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestServiceSuite(t *testing.T) {
|
|
|
|
|
suite.Run(t, new(ServiceTestSuite))
|
|
|
|
|
|
|
|
|
|
func (s *ServiceTestSuite) TestListShouldReturnErrorOnFailureOfListRun() {
|
|
|
|
|
s.lister.On("SetState", action.ListDeployed)
|
|
|
|
|
s.lister.On("SetStateMask")
|
|
|
|
|
|
|
|
|
|
var releases []*release.Release
|
|
|
|
|
|
|
|
|
|
s.lister.On("Run").Return(releases, errors.New("cluster issue"))
|
|
|
|
|
|
|
|
|
|
releaseStatus := "deployed"
|
|
|
|
|
res, err := s.svc.List(releaseStatus)
|
|
|
|
|
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.Error(t, err, "cluster issue")
|
|
|
|
|
assert.Nil(t, res)
|
|
|
|
|
|
|
|
|
|
s.lister.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type mockChartLoader struct{ mock.Mock }
|
|
|
|
|
func (s *ServiceTestSuite) TestListShouldReturnAllReleasesIfNoFilterIsPassed() {
|
|
|
|
|
s.lister.On("SetState", action.ListAll)
|
|
|
|
|
s.lister.On("SetStateMask")
|
|
|
|
|
|
|
|
|
|
func (m *mockChartLoader) LocateChart(name string, settings *cli.EnvSettings) (string, error) {
|
|
|
|
|
args := m.Called(name, settings)
|
|
|
|
|
return args.String(0), args.Error(1)
|
|
|
|
|
var releases []*release.Release
|
|
|
|
|
releases = append(releases,
|
|
|
|
|
&release.Release{Name: "test-release",
|
|
|
|
|
Namespace: "test-namespace",
|
|
|
|
|
Info: &release.Info{Status: release.StatusDeployed}})
|
|
|
|
|
|
|
|
|
|
s.lister.On("Run").Return(releases, nil)
|
|
|
|
|
|
|
|
|
|
releaseStatus := ""
|
|
|
|
|
res, err := s.svc.List(releaseStatus)
|
|
|
|
|
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
require.NotNil(t, res)
|
|
|
|
|
|
|
|
|
|
var response []api.Release
|
|
|
|
|
response = append(response, api.Release{"test-release", "test-namespace"})
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, len(res), 1)
|
|
|
|
|
assert.Equal(t, "test-release", response[0].Name)
|
|
|
|
|
assert.Equal(t, "test-namespace", response[0].Namespace)
|
|
|
|
|
|
|
|
|
|
s.lister.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type mockInstaller struct{ mock.Mock }
|
|
|
|
|
func (s *ServiceTestSuite) TestListShouldReturnErrorIfInvalidStatusIsPassedAsFilter() {
|
|
|
|
|
releaseStatus := "invalid"
|
|
|
|
|
_, err := s.svc.List(releaseStatus)
|
|
|
|
|
|
|
|
|
|
type mockUpgrader struct{ mock.Mock }
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.Error(t, err, "invalid release status")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type mockHistory struct{ mock.Mock }
|
|
|
|
|
func (s *ServiceTestSuite) TestListShouldReturnDeployedReleasesIfDeployedIsPassedAsFilter() {
|
|
|
|
|
s.lister.On("SetState", action.ListDeployed)
|
|
|
|
|
s.lister.On("SetStateMask")
|
|
|
|
|
|
|
|
|
|
func (m *mockInstaller) SetConfig(cfg ReleaseConfig) {
|
|
|
|
|
var releases []*release.Release
|
|
|
|
|
s.lister.On("Run").Return(releases, nil)
|
|
|
|
|
|
|
|
|
|
releaseStatus := "deployed"
|
|
|
|
|
_, err := s.svc.List(releaseStatus)
|
|
|
|
|
|
|
|
|
|
t := s.T()
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
s.lister.AssertExpectations(t)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type mockInstall struct{ mock.Mock }
|
|
|
|
|
|
|
|
|
|
func (m *mockInstall) SetConfig(cfg api.ReleaseConfig) {
|
|
|
|
|
m.Called(cfg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *mockInstaller) Run(c *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
|
|
|
|
|
func (m *mockInstall) 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)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *mockUpgrader) GetInstall() bool {
|
|
|
|
|
args := m.Called()
|
|
|
|
|
return args.Get(0).(bool)
|
|
|
|
|
|
|
|
|
|
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 mockUpgrader struct{ mock.Mock }
|
|
|
|
|
|
|
|
|
|
func (m *mockUpgrader) Run(name string, chart *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
|
|
|
|
|
args := m.Called(name, chart, vals)
|
|
|
|
|
return args.Get(0).(*release.Release), args.Error(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *mockUpgrader) SetConfig(cfg ReleaseConfig) {
|
|
|
|
|
func (m *mockUpgrader) SetConfig(cfg api.ReleaseConfig) {
|
|
|
|
|
_ = m.Called(cfg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *mockUpgrader) GetInstall() bool {
|
|
|
|
|
args := m.Called()
|
|
|
|
|
return args.Get(0).(bool)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type mockHistory struct{ mock.Mock }
|
|
|
|
|
|
|
|
|
|
func (m *mockHistory) Run(name string) ([]*release.Release, error) {
|
|
|
|
|
args := m.Called(name)
|
|
|
|
|
return args.Get(0).([]*release.Release), args.Error(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestServiceSuite(t *testing.T) {
|
|
|
|
|
suite.Run(t, new(ServiceTestSuite))
|
|
|
|
|
}
|
|
|
|
|