github.com/vtuson/helm@v2.8.2+incompatible/pkg/helm/fake_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 helm
    18  
    19  import (
    20  	"reflect"
    21  	"testing"
    22  
    23  	"k8s.io/helm/pkg/proto/hapi/chart"
    24  	"k8s.io/helm/pkg/proto/hapi/release"
    25  	rls "k8s.io/helm/pkg/proto/hapi/services"
    26  )
    27  
    28  func TestFakeClient_ReleaseStatus(t *testing.T) {
    29  	releasePresent := ReleaseMock(&MockReleaseOptions{Name: "release-present"})
    30  	releaseNotPresent := ReleaseMock(&MockReleaseOptions{Name: "release-not-present"})
    31  
    32  	type fields struct {
    33  		Rels []*release.Release
    34  	}
    35  	type args struct {
    36  		rlsName string
    37  		opts    []StatusOption
    38  	}
    39  	tests := []struct {
    40  		name    string
    41  		fields  fields
    42  		args    args
    43  		want    *rls.GetReleaseStatusResponse
    44  		wantErr bool
    45  	}{
    46  		{
    47  			name: "Get a single release that exists",
    48  			fields: fields{
    49  				Rels: []*release.Release{
    50  					releasePresent,
    51  				},
    52  			},
    53  			args: args{
    54  				rlsName: releasePresent.Name,
    55  				opts:    nil,
    56  			},
    57  			want: &rls.GetReleaseStatusResponse{
    58  				Name:      releasePresent.Name,
    59  				Info:      releasePresent.Info,
    60  				Namespace: releasePresent.Namespace,
    61  			},
    62  
    63  			wantErr: false,
    64  		},
    65  		{
    66  			name: "Get a release that does not exist",
    67  			fields: fields{
    68  				Rels: []*release.Release{
    69  					releasePresent,
    70  				},
    71  			},
    72  			args: args{
    73  				rlsName: releaseNotPresent.Name,
    74  				opts:    nil,
    75  			},
    76  			want:    nil,
    77  			wantErr: true,
    78  		},
    79  		{
    80  			name: "Get a single release that exists from list",
    81  			fields: fields{
    82  				Rels: []*release.Release{
    83  					ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin", Namespace: "default"}),
    84  					ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir", Namespace: "default"}),
    85  					releasePresent,
    86  				},
    87  			},
    88  			args: args{
    89  				rlsName: releasePresent.Name,
    90  				opts:    nil,
    91  			},
    92  			want: &rls.GetReleaseStatusResponse{
    93  				Name:      releasePresent.Name,
    94  				Info:      releasePresent.Info,
    95  				Namespace: releasePresent.Namespace,
    96  			},
    97  
    98  			wantErr: false,
    99  		},
   100  	}
   101  
   102  	for _, tt := range tests {
   103  		t.Run(tt.name, func(t *testing.T) {
   104  			c := &FakeClient{
   105  				Rels: tt.fields.Rels,
   106  			}
   107  			got, err := c.ReleaseStatus(tt.args.rlsName, tt.args.opts...)
   108  			if (err != nil) != tt.wantErr {
   109  				t.Errorf("FakeClient.ReleaseStatus() error = %v, wantErr %v", err, tt.wantErr)
   110  				return
   111  			}
   112  			if !reflect.DeepEqual(got, tt.want) {
   113  				t.Errorf("FakeClient.ReleaseStatus() = %v, want %v", got, tt.want)
   114  			}
   115  		})
   116  	}
   117  }
   118  
   119  func TestFakeClient_InstallReleaseFromChart(t *testing.T) {
   120  	installChart := &chart.Chart{}
   121  	type fields struct {
   122  		Rels []*release.Release
   123  	}
   124  	type args struct {
   125  		ns   string
   126  		opts []InstallOption
   127  	}
   128  	tests := []struct {
   129  		name      string
   130  		fields    fields
   131  		args      args
   132  		want      *rls.InstallReleaseResponse
   133  		relsAfter []*release.Release
   134  		wantErr   bool
   135  	}{
   136  		{
   137  			name: "Add release to an empty list.",
   138  			fields: fields{
   139  				Rels: []*release.Release{},
   140  			},
   141  			args: args{
   142  				ns:   "default",
   143  				opts: []InstallOption{ReleaseName("new-release")},
   144  			},
   145  			want: &rls.InstallReleaseResponse{
   146  				Release: ReleaseMock(&MockReleaseOptions{Name: "new-release"}),
   147  			},
   148  			relsAfter: []*release.Release{
   149  				ReleaseMock(&MockReleaseOptions{Name: "new-release"}),
   150  			},
   151  			wantErr: false,
   152  		},
   153  		{
   154  			name: "Try to add a release where the name already exists.",
   155  			fields: fields{
   156  				Rels: []*release.Release{
   157  					ReleaseMock(&MockReleaseOptions{Name: "new-release"}),
   158  				},
   159  			},
   160  			args: args{
   161  				ns:   "default",
   162  				opts: []InstallOption{ReleaseName("new-release")},
   163  			},
   164  			relsAfter: []*release.Release{
   165  				ReleaseMock(&MockReleaseOptions{Name: "new-release"}),
   166  			},
   167  			want:    nil,
   168  			wantErr: true,
   169  		},
   170  	}
   171  	for _, tt := range tests {
   172  		t.Run(tt.name, func(t *testing.T) {
   173  			c := &FakeClient{
   174  				Rels: tt.fields.Rels,
   175  			}
   176  			got, err := c.InstallReleaseFromChart(installChart, tt.args.ns, tt.args.opts...)
   177  			if (err != nil) != tt.wantErr {
   178  				t.Errorf("FakeClient.InstallReleaseFromChart() error = %v, wantErr %v", err, tt.wantErr)
   179  				return
   180  			}
   181  			if !reflect.DeepEqual(got, tt.want) {
   182  				t.Errorf("FakeClient.InstallReleaseFromChart() = %v, want %v", got, tt.want)
   183  			}
   184  			if !reflect.DeepEqual(c.Rels, tt.relsAfter) {
   185  				t.Errorf("FakeClient.InstallReleaseFromChart() rels = %v, expected %v", got, tt.relsAfter)
   186  			}
   187  		})
   188  	}
   189  }
   190  
   191  func TestFakeClient_DeleteRelease(t *testing.T) {
   192  	type fields struct {
   193  		Rels []*release.Release
   194  	}
   195  	type args struct {
   196  		rlsName string
   197  		opts    []DeleteOption
   198  	}
   199  	tests := []struct {
   200  		name      string
   201  		fields    fields
   202  		args      args
   203  		want      *rls.UninstallReleaseResponse
   204  		relsAfter []*release.Release
   205  		wantErr   bool
   206  	}{
   207  		{
   208  			name: "Delete a release that exists.",
   209  			fields: fields{
   210  				Rels: []*release.Release{
   211  					ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}),
   212  					ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   213  				},
   214  			},
   215  			args: args{
   216  				rlsName: "trepid-tapir",
   217  				opts:    []DeleteOption{},
   218  			},
   219  			relsAfter: []*release.Release{
   220  				ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}),
   221  			},
   222  			want: &rls.UninstallReleaseResponse{
   223  				Release: ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   224  			},
   225  			wantErr: false,
   226  		},
   227  		{
   228  			name: "Delete a release that does not exist.",
   229  			fields: fields{
   230  				Rels: []*release.Release{
   231  					ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}),
   232  					ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   233  				},
   234  			},
   235  			args: args{
   236  				rlsName: "release-that-does-not-exists",
   237  				opts:    []DeleteOption{},
   238  			},
   239  			relsAfter: []*release.Release{
   240  				ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}),
   241  				ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   242  			},
   243  			want:    nil,
   244  			wantErr: true,
   245  		},
   246  		{
   247  			name: "Delete when only 1 item exists.",
   248  			fields: fields{
   249  				Rels: []*release.Release{
   250  					ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   251  				},
   252  			},
   253  			args: args{
   254  				rlsName: "trepid-tapir",
   255  				opts:    []DeleteOption{},
   256  			},
   257  			relsAfter: []*release.Release{},
   258  			want: &rls.UninstallReleaseResponse{
   259  				Release: ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}),
   260  			},
   261  			wantErr: false,
   262  		},
   263  	}
   264  	for _, tt := range tests {
   265  		t.Run(tt.name, func(t *testing.T) {
   266  			c := &FakeClient{
   267  				Rels: tt.fields.Rels,
   268  			}
   269  			got, err := c.DeleteRelease(tt.args.rlsName, tt.args.opts...)
   270  			if (err != nil) != tt.wantErr {
   271  				t.Errorf("FakeClient.DeleteRelease() error = %v, wantErr %v", err, tt.wantErr)
   272  				return
   273  			}
   274  			if !reflect.DeepEqual(got, tt.want) {
   275  				t.Errorf("FakeClient.DeleteRelease() = %v, want %v", got, tt.want)
   276  			}
   277  
   278  			if !reflect.DeepEqual(c.Rels, tt.relsAfter) {
   279  				t.Errorf("FakeClient.InstallReleaseFromChart() rels = %v, expected %v", got, tt.relsAfter)
   280  			}
   281  		})
   282  	}
   283  }