mirror of https://github.com/helm/helm
parent
4a2692c1d9
commit
05c64abfe5
@ -0,0 +1,130 @@
|
||||
package api_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"gotest.tools/assert"
|
||||
"helm.sh/helm/v3/pkg/api"
|
||||
"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 UpgradeTestSuite struct {
|
||||
suite.Suite
|
||||
recorder *httptest.ResponseRecorder
|
||||
server *httptest.Server
|
||||
mockUpgrader *mockUpgrader
|
||||
mockHistory *mockHistory
|
||||
mockChartLoader *mockChartLoader
|
||||
appConfig *cli.EnvSettings
|
||||
}
|
||||
|
||||
func (s *UpgradeTestSuite) SetupSuite() {
|
||||
logger.Setup("default")
|
||||
}
|
||||
|
||||
func (s *UpgradeTestSuite) SetupTest() {
|
||||
s.recorder = httptest.NewRecorder()
|
||||
s.mockUpgrader = new(mockUpgrader)
|
||||
s.mockHistory = new(mockHistory)
|
||||
s.mockChartLoader = new(mockChartLoader)
|
||||
s.appConfig = &cli.EnvSettings{
|
||||
RepositoryConfig: "./testdata/helm",
|
||||
PluginsDirectory: "./testdata/helm/plugin",
|
||||
}
|
||||
service := api.NewService(s.appConfig, s.mockChartLoader, nil, s.mockUpgrader, s.mockHistory)
|
||||
handler := api.Upgrade(service)
|
||||
s.server = httptest.NewServer(handler)
|
||||
}
|
||||
|
||||
func (s *UpgradeTestSuite) TestShouldReturnDeployedStatusOnSuccessfulUpgrade() {
|
||||
chartName := "stable/redis-ha"
|
||||
body := fmt.Sprintf(`{
|
||||
"chart":"%s",
|
||||
"name": "redis-v5",
|
||||
"namespace": "something"}`, chartName)
|
||||
req, _ := http.NewRequest("POST", fmt.Sprintf("%s/upgrade", s.server.URL), strings.NewReader(body))
|
||||
s.mockChartLoader.On("LocateChart", chartName, s.appConfig).Return("./testdata/albatross", nil)
|
||||
ucfg := api.ReleaseConfig{ChartName: chartName, Name: "redis-v5", Namespace: "something"}
|
||||
s.mockUpgrader.On("GetInstall").Return(false)
|
||||
s.mockUpgrader.On("SetConfig", ucfg)
|
||||
release := &release.Release{Info: &release.Info{Status: release.StatusDeployed}}
|
||||
var vals map[string]interface{}
|
||||
//TODO: pass chart object and verify values present testdata chart yml
|
||||
s.mockUpgrader.On("Run", "redis-v5", mock.AnythingOfType("*chart.Chart"), vals).Return(release, nil)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusOK, resp.StatusCode)
|
||||
expectedResponse := `{"status":"deployed"}` + "\n"
|
||||
respBody, _ := ioutil.ReadAll(resp.Body)
|
||||
fmt.Println(expectedResponse)
|
||||
fmt.Println(respBody)
|
||||
|
||||
assert.Equal(s.T(), expectedResponse, string(respBody))
|
||||
require.NoError(s.T(), err)
|
||||
s.mockUpgrader.AssertExpectations(s.T())
|
||||
s.mockChartLoader.AssertExpectations(s.T())
|
||||
}
|
||||
|
||||
func (s *UpgradeTestSuite) TestShouldReturnInternalServerErrorOnFailure() {
|
||||
chartName := "stable/redis-ha"
|
||||
body := fmt.Sprintf(`{
|
||||
"chart":"%s",
|
||||
"name": "redis-v5",
|
||||
"namespace": "something"}`, chartName)
|
||||
req, _ := http.NewRequest("POST", fmt.Sprintf("%s/install", s.server.URL), strings.NewReader(body))
|
||||
s.mockChartLoader.On("LocateChart", chartName, s.appConfig).Return("./testdata/albatross", errors.New("Invalid chart"))
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusInternalServerError, resp.StatusCode)
|
||||
expectedResponse := `{"error":"error in locating chart: Invalid chart"}` + "\n"
|
||||
respBody, _ := ioutil.ReadAll(resp.Body)
|
||||
assert.Equal(s.T(), expectedResponse, string(respBody))
|
||||
require.NoError(s.T(), err)
|
||||
s.mockUpgrader.AssertExpectations(s.T())
|
||||
s.mockChartLoader.AssertExpectations(s.T())
|
||||
}
|
||||
|
||||
func (s *UpgradeTestSuite) TearDownTest() {
|
||||
s.server.Close()
|
||||
}
|
||||
|
||||
func TestUpgradeAPI(t *testing.T) {
|
||||
suite.Run(t, new(UpgradeTestSuite))
|
||||
}
|
||||
|
||||
type mockUpgrader struct{ mock.Mock }
|
||||
|
||||
type mockHistory 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) GetInstall() bool {
|
||||
args := m.Called()
|
||||
return args.Get(0).(bool)
|
||||
}
|
||||
|
||||
func (m *mockUpgrader) SetConfig(cfg api.ReleaseConfig) {
|
||||
_ = m.Called(cfg)
|
||||
}
|
||||
|
||||
func (m *mockHistory) Run(name string) ([]*release.Release, error) {
|
||||
args := m.Called(name)
|
||||
return args.Get(0).([]*release.Release), args.Error(1)
|
||||
}
|
Loading…
Reference in new issue