| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- package helm_test
- import (
- "testing"
- "github.com/stefanmcshane/helm/pkg/storage/driver"
- "github.com/porter-dev/porter/api/types"
- "github.com/porter-dev/porter/internal/helm"
- "github.com/porter-dev/porter/pkg/logger"
- "github.com/stefanmcshane/helm/pkg/chart"
- "github.com/stefanmcshane/helm/pkg/release"
- )
- func newAgentFixture(t *testing.T, namespace string) *helm.Agent {
- t.Helper()
- l := logger.NewConsole(true)
- form := &helm.Form{
- Namespace: namespace,
- }
- return helm.GetAgentTesting(form, nil, l, nil)
- }
- type releaseStub struct {
- name string
- namespace string
- version int
- chartVersion string
- status release.Status
- }
- // makeReleases adds a slice of releases to the configured storage.
- func makeReleases(t *testing.T, agent *helm.Agent, rels []releaseStub) {
- t.Helper()
- storage := agent.ActionConfig.Releases
- for _, r := range rels {
- rel := &release.Release{
- Name: r.name,
- Namespace: r.namespace,
- Version: r.version,
- Info: &release.Info{
- Status: r.status,
- },
- Chart: &chart.Chart{
- Metadata: &chart.Metadata{
- Version: r.chartVersion,
- Icon: "https://example.com/icon.png",
- },
- },
- }
- err := storage.Create(rel)
- if err != nil {
- t.Fatal(err)
- }
- }
- }
- func compareReleaseToStubs(t *testing.T, releases []*release.Release, stubs []releaseStub) {
- t.Helper()
- if len(releases) != len(stubs) {
- t.Fatalf("length of release %v doesn't match length of stub %v\n",
- len(releases), len(stubs))
- }
- for i, r := range releases {
- if r.Name != stubs[i].name {
- t.Errorf("Release name %v doesn't match stub name %v\n",
- r.Name, stubs[i].name)
- }
- if r.Namespace != stubs[i].namespace {
- t.Errorf("Release namespace %v doesn't match stub namespace %v\n",
- r.Namespace, stubs[i].namespace)
- }
- if r.Info.Status != stubs[i].status {
- t.Errorf("Release namespace %v doesn't match stub namespace %v\n",
- r.Info.Status, stubs[i].status)
- }
- if r.Version != stubs[i].version {
- t.Errorf("Release version %v doesn't match stub version %v\n",
- r.Version, stubs[i].version)
- }
- if r.Chart.Metadata.Version != stubs[i].chartVersion {
- t.Errorf("Release metadata version %v doesn't match stub chart version %v\n",
- r.Chart.Metadata.Version, stubs[i].chartVersion)
- }
- }
- return
- }
- type listReleaseTest struct {
- name string
- namespace string
- filter *types.ReleaseListFilter
- releases []releaseStub
- expRes []releaseStub
- }
- // var listReleaseTests = []listReleaseTest{
- // {
- // name: "simple test across namespaces, should sort by name",
- // namespace: "",
- // filter: &types.ReleaseListFilter{
- // Namespace: "",
- // Limit: 20,
- // Skip: 0,
- // ByDate: false,
- // StatusFilter: []string{"deployed"},
- // },
- // releases: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"wordpress", "default", 1, "1.0.1", release.StatusDeployed},
- // {"not-in-default-namespace", "other", 1, "1.0.2", release.StatusDeployed},
- // },
- // expRes: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"not-in-default-namespace", "other", 1, "1.0.2", release.StatusDeployed},
- // {"wordpress", "default", 1, "1.0.1", release.StatusDeployed},
- // },
- // },
- // {
- // name: "simple test only default namespace",
- // namespace: "default",
- // filter: &types.ReleaseListFilter{
- // Namespace: "",
- // Limit: 20,
- // Skip: 0,
- // ByDate: false,
- // StatusFilter: []string{"deployed"},
- // },
- // releases: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"wordpress", "default", 1, "1.0.1", release.StatusDeployed},
- // {"not-in-default-namespace", "other", 1, "1.0.2", release.StatusDeployed},
- // },
- // expRes: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"wordpress", "default", 1, "1.0.1", release.StatusDeployed},
- // },
- // },
- // {
- // name: "simple test limit",
- // namespace: "",
- // filter: &types.ReleaseListFilter{
- // Namespace: "",
- // Limit: 2,
- // Skip: 0,
- // ByDate: false,
- // StatusFilter: []string{"deployed"},
- // },
- // releases: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"not-in-default-namespace", "other", 1, "1.0.1", release.StatusDeployed},
- // {"wordpress", "default", 1, "1.0.2", release.StatusDeployed},
- // },
- // expRes: []releaseStub{
- // {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- // {"not-in-default-namespace", "other", 1, "1.0.1", release.StatusDeployed},
- // },
- // },
- // }
- // func TestListReleases(t *testing.T) {
- // for _, tc := range listReleaseTests {
- // agent := newAgentFixture(t, tc.namespace)
- // makeReleases(t, agent, tc.releases)
- // // calling agent.ActionConfig.Releases.Create in makeReleases will automatically set the
- // // namespace, so we have to reset the namespace of the storage driver
- // agent.ActionConfig.Releases.Driver.(*driver.Memory).SetNamespace(tc.namespace)
- // releases, err := agent.ListReleases(tc.namespace, tc.filter)
- // if err != nil {
- // t.Errorf("%v", err)
- // }
- // compareReleaseToStubs(t, releases, tc.expRes)
- // }
- // }
- type getReleaseTest struct {
- name string
- namespace string
- releases []releaseStub
- getName string
- getVersion int
- expRes releaseStub
- }
- var getReleaseTests = []getReleaseTest{
- {
- name: "simple get with revision 0 (latest)",
- namespace: "default",
- releases: []releaseStub{
- {"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- {"wordpress", "default", 1, "1.0.1", release.StatusDeployed},
- {"not-in-default-namespace", "other", 1, "1.0.2", release.StatusDeployed},
- },
- getName: "airwatch",
- getVersion: 1,
- expRes: releaseStub{"airwatch", "default", 1, "1.0.0", release.StatusDeployed},
- },
- }
- func TestGetReleases(t *testing.T) {
- for _, tc := range getReleaseTests {
- agent := newAgentFixture(t, tc.namespace)
- makeReleases(t, agent, tc.releases)
- // calling agent.ActionConfig.Releases.Create in makeReleases will automatically set the
- // namespace, so we have to reset the namespace of the storage driver
- agent.ActionConfig.Releases.Driver.(*driver.Memory).SetNamespace(tc.namespace)
- rel, err := agent.GetRelease(tc.getName, tc.getVersion, false)
- if err != nil {
- t.Errorf("%v", err)
- }
- compareReleaseToStubs(t, []*release.Release{rel}, []releaseStub{tc.expRes})
- }
- }
- var listReleaseHistoryTests = []listReleaseTest{
- {
- name: "simple history test",
- namespace: "default",
- releases: []releaseStub{
- {"wordpress", "default", 2, "1.0.2", release.StatusDeployed},
- {"wordpress", "default", 1, "1.0.1", release.StatusSuperseded},
- },
- expRes: []releaseStub{
- {"wordpress", "default", 1, "1.0.1", release.StatusSuperseded},
- {"wordpress", "default", 2, "1.0.2", release.StatusDeployed},
- },
- },
- }
- func TestListReleaseHistory(t *testing.T) {
- for _, tc := range listReleaseHistoryTests {
- agent := newAgentFixture(t, tc.namespace)
- makeReleases(t, agent, tc.releases)
- // calling agent.ActionConfig.Releases.Create in makeReleases will automatically set the
- // namespace, so we have to reset the namespace of the storage driver
- agent.ActionConfig.Releases.Driver.(*driver.Memory).SetNamespace(tc.namespace)
- releases, err := agent.GetReleaseHistory("wordpress")
- if err != nil {
- t.Errorf("%v", err)
- }
- compareReleaseToStubs(t, releases, tc.expRes)
- }
- }
- var upgradeTests = []listReleaseTest{
- {
- name: "simple history test",
- namespace: "default",
- releases: []releaseStub{
- {"wordpress", "default", 2, "1.0.2", release.StatusDeployed},
- {"wordpress", "default", 1, "1.0.1", release.StatusSuperseded},
- },
- expRes: []releaseStub{
- {"wordpress", "default", 1, "1.0.1", release.StatusSuperseded},
- {"wordpress", "default", 2, "1.0.2", release.StatusSuperseded},
- {"wordpress", "default", 3, "1.0.2", release.StatusDeployed},
- },
- },
- }
- // func TestUpgradeRelease(t *testing.T) {
- // for _, tc := range upgradeTests {
- // agent := newAgentFixture(t, tc.namespace)
- // makeReleases(t, agent, tc.releases)
- // // calling agent.ActionConfig.Releases.Create in makeReleases will automatically set the
- // // namespace, so we have to reset the namespace of the storage driver
- // agent.ActionConfig.Releases.Driver.(*driver.Memory).SetNamespace(tc.namespace)
- // agent.UpgradeRelease("wordpress", "", &oauth2.Config{})
- // releases, err := agent.GetReleaseHistory("wordpress")
- // if err != nil {
- // t.Errorf("%v", err)
- // }
- // compareReleaseToStubs(t, releases, tc.expRes)
- // }
- // }
- var rollbackReleaseTests = []getReleaseTest{
- {
- name: "simple rollback test",
- namespace: "default",
- releases: []releaseStub{
- {"wordpress", "default", 2, "1.0.2", release.StatusDeployed},
- {"wordpress", "default", 1, "1.0.1", release.StatusSuperseded},
- },
- getName: "wordpress",
- getVersion: 3,
- expRes: releaseStub{"wordpress", "default", 3, "1.0.1", release.StatusDeployed},
- },
- }
- func TestRollbackRelease(t *testing.T) {
- for _, tc := range rollbackReleaseTests {
- agent := newAgentFixture(t, tc.namespace)
- makeReleases(t, agent, tc.releases)
- // calling agent.ActionConfig.Releases.Create in makeReleases will automatically set the
- // namespace, so we have to reset the namespace of the storage driver
- agent.ActionConfig.Releases.Driver.(*driver.Memory).SetNamespace(tc.namespace)
- err := agent.RollbackRelease("wordpress", 1)
- if err != nil {
- t.Errorf("%v", err)
- }
- rel, err := agent.GetRelease(tc.getName, tc.getVersion, false)
- if err != nil {
- t.Errorf("%v", err)
- }
- compareReleaseToStubs(t, []*release.Release{rel}, []releaseStub{tc.expRes})
- }
- }
|