github.com/amundsenjunior/helm@v2.8.0-rc.1.0.20180119233529-2b92431476e1+incompatible/cmd/helm/reset_test.go (about)

     1  /*
     2  Copyright 2016 The Kubernetes Authors All rights reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package main
    18  
    19  import (
    20  	"bytes"
    21  	"io/ioutil"
    22  	"os"
    23  	"strings"
    24  	"testing"
    25  
    26  	"k8s.io/kubernetes/pkg/apis/core"
    27  	"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
    28  
    29  	"k8s.io/helm/pkg/helm"
    30  	"k8s.io/helm/pkg/helm/helmpath"
    31  	"k8s.io/helm/pkg/proto/hapi/release"
    32  )
    33  
    34  func TestResetCmd(t *testing.T) {
    35  	home, err := ioutil.TempDir("", "helm_home")
    36  	if err != nil {
    37  		t.Fatal(err)
    38  	}
    39  	defer os.Remove(home)
    40  
    41  	var buf bytes.Buffer
    42  	c := &helm.FakeClient{}
    43  	fc := fake.NewSimpleClientset()
    44  	cmd := &resetCmd{
    45  		out:        &buf,
    46  		home:       helmpath.Home(home),
    47  		client:     c,
    48  		kubeClient: fc,
    49  		namespace:  core.NamespaceDefault,
    50  	}
    51  	if err := cmd.run(); err != nil {
    52  		t.Errorf("unexpected error: %v", err)
    53  	}
    54  	actions := fc.Actions()
    55  	if len(actions) != 3 {
    56  		t.Errorf("Expected 3 actions, got %d", len(actions))
    57  	}
    58  	expected := "Tiller (the Helm server-side component) has been uninstalled from your Kubernetes Cluster."
    59  	if !strings.Contains(buf.String(), expected) {
    60  		t.Errorf("expected %q, got %q", expected, buf.String())
    61  	}
    62  	if _, err := os.Stat(home); err != nil {
    63  		t.Errorf("Helm home directory %s does not exists", home)
    64  	}
    65  }
    66  
    67  func TestResetCmd_removeHelmHome(t *testing.T) {
    68  	home, err := ioutil.TempDir("", "helm_home")
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	defer os.Remove(home)
    73  
    74  	var buf bytes.Buffer
    75  	c := &helm.FakeClient{}
    76  	fc := fake.NewSimpleClientset()
    77  	cmd := &resetCmd{
    78  		removeHelmHome: true,
    79  		out:            &buf,
    80  		home:           helmpath.Home(home),
    81  		client:         c,
    82  		kubeClient:     fc,
    83  		namespace:      core.NamespaceDefault,
    84  	}
    85  	if err := cmd.run(); err != nil {
    86  		t.Errorf("unexpected error: %v", err)
    87  	}
    88  	actions := fc.Actions()
    89  	if len(actions) != 3 {
    90  		t.Errorf("Expected 3 actions, got %d", len(actions))
    91  	}
    92  	expected := "Tiller (the Helm server-side component) has been uninstalled from your Kubernetes Cluster."
    93  	if !strings.Contains(buf.String(), expected) {
    94  		t.Errorf("expected %q, got %q", expected, buf.String())
    95  	}
    96  	if _, err := os.Stat(home); err == nil {
    97  		t.Errorf("Helm home directory %s already exists", home)
    98  	}
    99  }
   100  
   101  func TestReset_deployedReleases(t *testing.T) {
   102  	home, err := ioutil.TempDir("", "helm_home")
   103  	if err != nil {
   104  		t.Fatal(err)
   105  	}
   106  	defer os.Remove(home)
   107  
   108  	var buf bytes.Buffer
   109  	resp := []*release.Release{
   110  		helm.ReleaseMock(&helm.MockReleaseOptions{Name: "atlas-guide", StatusCode: release.Status_DEPLOYED}),
   111  	}
   112  	c := &helm.FakeClient{
   113  		Rels: resp,
   114  	}
   115  	fc := fake.NewSimpleClientset()
   116  	cmd := &resetCmd{
   117  		out:        &buf,
   118  		home:       helmpath.Home(home),
   119  		client:     c,
   120  		kubeClient: fc,
   121  		namespace:  core.NamespaceDefault,
   122  	}
   123  	err = cmd.run()
   124  	expected := "there are still 1 deployed releases (Tip: use --force)"
   125  	if !strings.Contains(err.Error(), expected) {
   126  		t.Errorf("unexpected error: %v", err)
   127  	}
   128  	if _, err := os.Stat(home); err != nil {
   129  		t.Errorf("Helm home directory %s does not exists", home)
   130  	}
   131  }
   132  
   133  func TestReset_forceFlag(t *testing.T) {
   134  	home, err := ioutil.TempDir("", "helm_home")
   135  	if err != nil {
   136  		t.Fatal(err)
   137  	}
   138  	defer os.Remove(home)
   139  
   140  	var buf bytes.Buffer
   141  	resp := []*release.Release{
   142  		helm.ReleaseMock(&helm.MockReleaseOptions{Name: "atlas-guide", StatusCode: release.Status_DEPLOYED}),
   143  	}
   144  	c := &helm.FakeClient{
   145  		Rels: resp,
   146  	}
   147  	fc := fake.NewSimpleClientset()
   148  	cmd := &resetCmd{
   149  		force:      true,
   150  		out:        &buf,
   151  		home:       helmpath.Home(home),
   152  		client:     c,
   153  		kubeClient: fc,
   154  		namespace:  core.NamespaceDefault,
   155  	}
   156  	if err := cmd.run(); err != nil {
   157  		t.Errorf("unexpected error: %v", err)
   158  	}
   159  	actions := fc.Actions()
   160  	if len(actions) != 3 {
   161  		t.Errorf("Expected 3 actions, got %d", len(actions))
   162  	}
   163  	expected := "Tiller (the Helm server-side component) has been uninstalled from your Kubernetes Cluster."
   164  	if !strings.Contains(buf.String(), expected) {
   165  		t.Errorf("expected %q, got %q", expected, buf.String())
   166  	}
   167  	if _, err := os.Stat(home); err != nil {
   168  		t.Errorf("Helm home directory %s does not exists", home)
   169  	}
   170  }