+ appmgr.Init()
+ appmgr.Logger.SetLevel(0)
+
+ code := m.Run()
+ os.Exit(code)
+}
+
+func TestInit(t *testing.T) {
+ defer func() { resetHelmExecMock() }()
+ var expectedHelmCommand string = ""
+ helmExec = mockedHelmExec
+
+ NewHelm().Init()
+
+ if cm.EnvHelmVersion == cm.HELM_VERSION_2{
+ expectedHelmCommand = "init -c --skip-refresh"
+ if caughtHelmExecArgs != expectedHelmCommand {
+ t.Errorf("Init failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
+ }
+ }
+}
+
+func TestAddRepoSuccess(t *testing.T) {
+ defer func() {
+ resetHelmExecMock()
+ removeTestUsernameFile()
+ removeTestPasswordFile()
+ }()
+ helmExec = mockedHelmExec
+
+ if err := writeTestUsernameFile(); err != nil {
+ t.Errorf("AddRepo username file create failed: %s", err)
+ return
+ }
+ if err := writeTestPasswordFile(); err != nil {
+ t.Errorf("AddRepo password file create failed: %s", err)
+ return
+ }
+
+ if _, err := NewHelm().AddRepo(); err != nil {
+ t.Errorf("AddRepo failed: %v", err)
+ }
+
+ if !strings.Contains(caughtHelmExecArgs, "repo add") {
+ t.Errorf("AddRepo failed: expected %v, got %v", "repo add", caughtHelmExecArgs)
+ }
+}
+
+func TestAddRepoReturnsErrorIfNoUsernameFile(t *testing.T) {
+ if _, err := NewHelm().AddRepo(); err == nil {
+ t.Errorf("AddRepo expected to fail but it didn't")
+ }
+}
+
+func TestAddRepoReturnsErrorIfNoPasswordFile(t *testing.T) {
+ defer func() { resetHelmExecMock(); removeTestUsernameFile() }()
+ helmExec = mockedHelmExec
+
+ if err := writeTestUsernameFile(); err != nil {
+ t.Errorf("AddRepo username file create failed: %s", err)
+ return
+ }
+ if _, err := NewHelm().AddRepo(); err == nil {
+ t.Errorf("AddRepo expected to fail but it didn't")
+ }
+}
+
+func TestInstallSuccess(t *testing.T) {
+ name := "dummy-xapp"
+ xappDesc := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
+
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetOut = helmStatusOutput
+
+ defer func() { resetKubeExecMock() }()
+ kubeExec = mockedKubeExec
+ kubeExecRetOut = kubeServiceOutput
+
+ xapp, err := NewHelm().Install(xappDesc)
+ if err != nil {
+ t.Errorf("Install failed: %v", err)
+ }
+ validateXappModel(t, xapp)
+}
+
+func TestInstallReturnsErrorIfHelmRepoUpdateFails(t *testing.T) {
+ name := "dummy-xapp"
+ xappDesc := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
+
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetErr = errors.New("some helm command error")
+
+ if _, err := NewHelm().Install(xappDesc); err == nil {
+ t.Errorf("Install expected to fail but it didn't")
+ }
+}
+
+func TestStatusSuccess(t *testing.T) {
+ name := "dummy-xapp"
+
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetOut = helmStatusOutput
+
+ xapp, err := NewHelm().Status(name)
+ if err != nil {
+ t.Errorf("Status failed: %v", err)
+ }
+ validateXappModel(t, xapp)
+}
+
+func TestStatusReturnsErrorIfHelmStatusFails(t *testing.T) {
+ name := "dummy-xapp"
+
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetErr = errors.New("some helm command error")
+
+ if _, err := NewHelm().Status(name); err == nil {
+ t.Errorf("Status expected to fail but it didn't")
+ }
+}
+
+func TestParseStatusSuccess(t *testing.T) {
+ defer func() { resetHelmExecMock() }()
+ var expectedHelmCommand string = ""
+ helmExec = mockedHelmExec
+ helmExecRetOut = helListOutput
+
+ defer func() { resetKubeExecMock() }()
+ kubeExec = mockedKubeExec
+ kubeExecRetOut = kubeServiceOutput
+
+ xapp, err := NewHelm().ParseStatus("dummy-xapp", helmStatusOutput)
+ if err != nil {
+ t.Errorf("ParseStatus failed: %v", err)
+ }
+
+ validateXappModel(t, xapp)
+
+ if cm.EnvHelmVersion == cm.HELM_VERSION_2 {
+ expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp dummy-xapp"
+ }else {
+ expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp -f dummy-xapp"
+ }
+ if caughtHelmExecArgs != expectedHelmCommand {
+ t.Errorf("ParseStatus failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
+ }
+}
+
+func TestListSuccess(t *testing.T) {
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetOut = helListAllOutput
+
+ names, err := NewHelm().List()
+ if err != nil {
+ t.Errorf("List failed: %v", err)
+ }
+
+ if !reflect.DeepEqual(names, []string{"dummy-xapp", "dummy-xapp2"}) {
+ t.Errorf("List failed: %v", err)
+ }
+ expectedHelmCommand := "list --all --deployed --output yaml --namespace=ricxapp"
+ if caughtHelmExecArgs != expectedHelmCommand {
+ t.Errorf("List: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
+ }
+}
+
+func TestListReturnsErrorIfHelmListFails(t *testing.T) {
+ defer func() { resetHelmExecMock() }()
+ helmExec = mockedHelmExec
+ helmExecRetErr = errors.New("some helm command error")
+
+ if _, err := NewHelm().List(); err == nil {
+ t.Errorf("List expected to fail but it didn't")
+ }
+}