Skip to content

Commit 54bdafc

Browse files
maleck13pyates86
authored andcommitted
Created unit tests for Delete service instance method and added long
description to deleteServiceInstance and listServiceInstance methods
1 parent 1c100c8 commit 54bdafc

File tree

2 files changed

+175
-2
lines changed

2 files changed

+175
-2
lines changed

pkg/cmd/services.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ import (
2020
"k8s.io/client-go/kubernetes"
2121
"k8s.io/client-go/pkg/api/v1"
2222

23+
"sort"
24+
2325
"github.com/aerogear/mobile-cli/pkg/cmd/output"
2426
"github.com/satori/go.uuid"
2527
"k8s.io/apimachinery/pkg/watch"
26-
"sort"
2728
)
2829

2930
type ServicesCmd struct {
@@ -188,7 +189,7 @@ func (sc *ServicesCmd) CreateServiceInstanceCmd() *cobra.Command {
188189
cmd := &cobra.Command{
189190
Use: "serviceinstance <serviceName>",
190191
Short: `create a running instance of the given service`,
191-
Long: `Create service instance, allows you to create a running instance of a service in your namespace.
192+
Long: `Create service instance allows you to create a running instance of a service in your namespace.
192193
To see which services are available, first list them using the "mobile get services" command from this tool.
193194
Once you have selected a service, take note of its name then run:
194195
@@ -362,6 +363,12 @@ func (sc *ServicesCmd) DeleteServiceInstanceCmd() *cobra.Command {
362363
return &cobra.Command{
363364
Use: "serviceinstance <serviceInstanceID>",
364365
Short: "deletes a service instance and other objects created when provisioning the services instance such as pod presets",
366+
Long: `Delete service instance allows you to delete a service instance and other objects created when provisioning the services instance such as pod presets.
367+
To see which service instances are available for deleting, first list them using the "mobile get serviceinstances" command from this tool.
368+
Once you have identified a service instance to delete, take note of its name and then run:
369+
370+
delete serviceinstance <selectedServiceInstanceName>`,
371+
365372
RunE: func(cmd *cobra.Command, args []string) error {
366373
//delete service instance
367374
//delete params secret
@@ -391,6 +398,10 @@ func (sc *ServicesCmd) ListServiceInstCmd() *cobra.Command {
391398
cmd := &cobra.Command{
392399
Use: "serviceinstances <serviceName>",
393400
Short: "get a list of provisioned serviceInstances based on the service name.",
401+
Long: `get services allows you to get a list of services that can be provisioned in your namespace.
402+
To list all available services, run:
403+
404+
mobile get services`,
394405
RunE: func(cmd *cobra.Command, args []string) error {
395406
if len(args) != 1 {
396407
return errors.New("no service name passed")

pkg/cmd/services_test.go

+162
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66

77
"encoding/json"
88

9+
"fmt"
10+
911
"github.com/aerogear/mobile-cli/pkg/apis/servicecatalog/v1beta1"
1012
"github.com/aerogear/mobile-cli/pkg/client/servicecatalog/clientset/versioned"
1113
scFake "github.com/aerogear/mobile-cli/pkg/client/servicecatalog/clientset/versioned/fake"
@@ -18,6 +20,166 @@ import (
1820
ktesting "k8s.io/client-go/testing"
1921
)
2022

23+
func TestServicesCmd_DeleteServiceInstanceCmd(t *testing.T) {
24+
cases := []struct {
25+
Name string
26+
SvcCatalogClient func() versioned.Interface
27+
K8Client func() kubernetes.Interface
28+
ExpectError bool
29+
ValidateErr func(t *testing.T, err error)
30+
Flags []string
31+
Args []string
32+
}{
33+
34+
{
35+
Name: "test if no service instance id passed that error returned",
36+
SvcCatalogClient: func() versioned.Interface {
37+
fake := &scFake.Clientset{}
38+
return fake
39+
},
40+
K8Client: func() kubernetes.Interface {
41+
return &kFake.Clientset{}
42+
},
43+
ExpectError: true,
44+
ValidateErr: func(t *testing.T, err error) {
45+
if err == nil {
46+
t.Fatalf("expected an error but did not get one")
47+
}
48+
if err.Error() != "expected a serviceInstanceID" {
49+
t.Fatalf("expected error to be %s but got %v", "expected a serviceInstanceID", err)
50+
}
51+
},
52+
Flags: []string{"--namespace=test", "-o=json"},
53+
Args: []string{},
54+
},
55+
56+
{
57+
Name: "test if error occurs getting service instance that an error is returned",
58+
SvcCatalogClient: func() versioned.Interface {
59+
fake := &scFake.Clientset{}
60+
fake.AddReactor("get", "serviceinstances", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
61+
return true, nil, fmt.Errorf("error in get")
62+
})
63+
return fake
64+
},
65+
K8Client: func() kubernetes.Interface {
66+
return &kFake.Clientset{}
67+
},
68+
ExpectError: true,
69+
ValidateErr: func(t *testing.T, err error) {
70+
if err == nil {
71+
t.Fatalf("expected an error but did not get one")
72+
}
73+
if err.Error() != "error in get" {
74+
t.Fatalf("expected error to be %s but got %v", "error in get", err)
75+
}
76+
},
77+
Flags: []string{"--namespace=test", "-o=json"},
78+
Args: []string{"someid"},
79+
},
80+
{
81+
Name: "test if error occurs deleting service instance that an error is returned",
82+
SvcCatalogClient: func() versioned.Interface {
83+
fake := &scFake.Clientset{}
84+
fake.AddReactor("get", "serviceinstances", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
85+
return true, nil, nil
86+
})
87+
fake.AddReactor("delete", "serviceinstances", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
88+
return true, nil, fmt.Errorf("error in delete")
89+
})
90+
return fake
91+
},
92+
K8Client: func() kubernetes.Interface {
93+
return &kFake.Clientset{}
94+
},
95+
ExpectError: true,
96+
ValidateErr: func(t *testing.T, err error) {
97+
if err == nil {
98+
t.Fatalf("expected an error but did not get one")
99+
}
100+
if err.Error() != "error in delete" {
101+
t.Fatalf("expected error to be %s but got %v", "error in delete", err)
102+
}
103+
},
104+
Flags: []string{"--namespace=test", "-o=json"},
105+
Args: []string{"someid"},
106+
},
107+
{
108+
Name: "test successful delete",
109+
SvcCatalogClient: func() versioned.Interface {
110+
fake := &scFake.Clientset{}
111+
fake.AddReactor("get", "serviceinstances", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
112+
return true, nil, nil
113+
})
114+
fake.AddReactor("delete", "serviceinstances", func(action ktesting.Action) (handled bool, ret runtime.Object, err error) {
115+
return true, &v1beta1.ServiceInstance{
116+
ObjectMeta: metav1.ObjectMeta{GenerateName: "test"}}, nil
117+
})
118+
return fake
119+
},
120+
K8Client: func() kubernetes.Interface {
121+
return &kFake.Clientset{}
122+
},
123+
ExpectError: false,
124+
ValidateErr: func(t *testing.T, err error) {
125+
if err != nil {
126+
t.Fatalf("expected no error but got %v", err)
127+
}
128+
},
129+
130+
Flags: []string{"--namespace=test", "-o=json"},
131+
Args: []string{"someid"},
132+
},
133+
134+
{
135+
Name: "test error on missing namespace",
136+
SvcCatalogClient: func() versioned.Interface {
137+
fake := &scFake.Clientset{}
138+
return fake
139+
},
140+
K8Client: func() kubernetes.Interface {
141+
return &kFake.Clientset{}
142+
},
143+
ExpectError: true,
144+
ValidateErr: func(t *testing.T, err error) {
145+
if err == nil {
146+
t.Fatalf("expected an error but didn't got one")
147+
}
148+
if err.Error() != "failed to get namespace: no namespace present. Cannot continue. Please set the --namespace flag or the KUBECTL_PLUGINS_CURRENT_NAMESPACE env var" {
149+
t.Fatalf("Expected error 'failed to get namespace: no namespace present. Cannot continue. Please set the --namespace flag or the KUBECTL_PLUGINS_CURRENT_NAMESPACE env var' but got %v", err)
150+
}
151+
},
152+
Flags: []string{"-o=json"},
153+
Args: []string{"someid"},
154+
},
155+
}
156+
157+
for _, tc := range cases {
158+
t.Run(tc.Name, func(t *testing.T) {
159+
var out bytes.Buffer
160+
root := cmd.NewRootCmd()
161+
deleteClient := cmd.NewDeleteComand()
162+
serviceCmd := cmd.NewServicesCmd(tc.SvcCatalogClient(), tc.K8Client(), &out)
163+
deleteServiceInstCmd := serviceCmd.DeleteServiceInstanceCmd()
164+
deleteClient.AddCommand(deleteServiceInstCmd)
165+
root.AddCommand(deleteClient)
166+
if err := deleteServiceInstCmd.ParseFlags(tc.Flags); err != nil {
167+
t.Fatal("failed to parse flags ", err)
168+
}
169+
err := deleteServiceInstCmd.RunE(deleteServiceInstCmd, tc.Args)
170+
if err != nil && !tc.ExpectError {
171+
t.Fatal("did not expect an error but gone one ", err)
172+
}
173+
if err == nil && tc.ExpectError {
174+
t.Fatal("expected an error but got none")
175+
}
176+
if tc.ValidateErr != nil {
177+
tc.ValidateErr(t, err)
178+
}
179+
})
180+
}
181+
}
182+
21183
func TestServicesCmd_ListServicesCmd(t *testing.T) {
22184
cases := []struct {
23185
Name string

0 commit comments

Comments
 (0)