Skip to content

Commit d430a28

Browse files
fix(core): bootstrap does not return errors (#678)
1 parent fe63923 commit d430a28

File tree

26 files changed

+3403
-9020
lines changed

26 files changed

+3403
-9020
lines changed

internal/core/bootstrap.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ func Bootstrap(config *BootstrapConfig) (exitCode int, result interface{}, err e
105105

106106
if err != nil {
107107
if _, ok := err.(*interactive.InterruptError); ok {
108-
return 130, meta.result, err
108+
return 130, nil, err
109109
}
110-
err = meta.Printer.Print(err, nil)
111-
if err != nil {
110+
printErr := meta.Printer.Print(err, nil)
111+
if printErr != nil {
112112
_, _ = fmt.Fprintln(os.Stderr, err)
113113
}
114-
return 1, meta.result, err
114+
return 1, nil, err
115115
}
116116
return 0, meta.result, nil
117117
}

internal/core/testing.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -327,25 +327,3 @@ func getHTTPRecoder(t *testing.T, update bool) (client *http.Client, cleanup fun
327327
assert.NoError(t, r.Stop()) // Make sure recorder is stopped once done with it
328328
}, nil
329329
}
330-
331-
func TestCheckEqual(expectedKey string, actualKey string) TestCheck {
332-
return func(t *testing.T, ctx *CheckFuncCtx) {
333-
parse := func(str string, data interface{}) string {
334-
if !strings.HasPrefix(str, ".") {
335-
return str
336-
}
337-
338-
str = "{{" + str + "}}"
339-
strBuf := &bytes.Buffer{}
340-
require.NoError(t, template.Must(template.New("str").Parse(str)).Execute(strBuf, data))
341-
return strBuf.String()
342-
}
343-
expectedValue := parse(expectedKey, ctx.Meta)
344-
actualValue := parse(actualKey, ctx.Result)
345-
assert.Equal(t, expectedValue, actualValue)
346-
}
347-
}
348-
349-
func TestCheckNil(actualKey string) TestCheck {
350-
return TestCheckEqual("<nil>", actualKey)
351-
}

internal/namespaces/instance/v1/custom_server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ func serverDeleteCommand() *core.Command {
502502
}
503503

504504
var multiErr error
505-
if args.DeleteIP && server.Server.PublicIP != nil {
505+
if args.DeleteIP && server.Server.PublicIP != nil && !server.Server.PublicIP.Dynamic {
506506
err = api.DeleteIP(&instance.DeleteIPRequest{
507507
Zone: args.Zone,
508508
IP: server.Server.PublicIP.ID,

internal/namespaces/instance/v1/custom_server_create_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ func Test_CreateServer(t *testing.T) {
158158
Commands: GetCommands(),
159159
Cmd: "scw instance server create image=ubuntu_bionic ip=dynamic -w", // dynamic IP is created at runtime
160160
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
161+
assert.NoError(t, ctx.Err)
161162
assert.NotEmpty(t, ctx.Result.(*instance.Server).PublicIP.Address)
162163
assert.Equal(t, true, ctx.Result.(*instance.Server).DynamicIPRequired)
163164
},
@@ -360,7 +361,7 @@ func Test_CreateServerErrors(t *testing.T) {
360361
core.TestCheckExitCode(1),
361362
),
362363
AfterFunc: func(ctx *core.AfterFuncCtx) error {
363-
ctx.ExecuteCmd("scw instance server delete server-id={{ .server.id }} delete-volumes delete-ip")
364+
ctx.ExecuteCmd("scw instance server delete server-id=" + ctx.Meta["Server"].(*instance.Server).ID + " delete-volumes delete-ip")
364365
return nil
365366
},
366367
}))

internal/namespaces/instance/v1/custom_server_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func Test_ServerUpdateCustom(t *testing.T) {
1212
t.Run("Try to remove ip from server without ip", core.Test(&core.TestConfig{
1313
Commands: GetCommands(),
1414
BeforeFunc: func(ctx *core.BeforeFuncCtx) error {
15-
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic")
15+
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
1616
return nil
1717
},
1818
Cmd: "scw instance server update server-id={{ .Server.ID }} ip=none",
@@ -30,7 +30,7 @@ func Test_ServerUpdateCustom(t *testing.T) {
3030
t.Run("Update server ip from server without ip", core.Test(&core.TestConfig{
3131
Commands: GetCommands(),
3232
BeforeFunc: func(ctx *core.BeforeFuncCtx) error {
33-
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic")
33+
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
3434
ctx.Meta["CreateIPResponse"] = ctx.ExecuteCmd("scw instance ip create")
3535
return nil
3636
},
@@ -49,7 +49,7 @@ func Test_ServerUpdateCustom(t *testing.T) {
4949
t.Run("Update server ip from server with ip", core.Test(&core.TestConfig{
5050
Commands: GetCommands(),
5151
BeforeFunc: func(ctx *core.BeforeFuncCtx) error {
52-
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic")
52+
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
5353
ctx.Meta["CreateIPResponse"] = ctx.ExecuteCmd("scw instance ip create")
5454
ctx.Meta["ServerUpdated"] = ctx.ExecuteCmd("scw instance server update server-id={{ .Server.ID }} ip={{ .CreateIPResponse.IP.Address }}")
5555
ctx.Meta["CreateIPResponse2"] = ctx.ExecuteCmd("scw instance ip create")
@@ -83,6 +83,7 @@ func Test_ServerUpdateCustom(t *testing.T) {
8383
},
8484
Cmd: "scw instance server update server-id={{ .Server.ID }} placement-group-id={{ .PlacementGroupResponse2.PlacementGroup.ID }}",
8585
Check: core.TestCheckCombine(
86+
core.TestCheckExitCode(0),
8687
func(t *testing.T, ctx *core.CheckFuncCtx) {
8788
assert.Equal(t,
8889
ctx.Meta["PlacementGroupResponse2"].(*instance.CreatePlacementGroupResponse).PlacementGroup.ID,
@@ -91,8 +92,8 @@ func Test_ServerUpdateCustom(t *testing.T) {
9192
),
9293
AfterFunc: func(ctx *core.AfterFuncCtx) error {
9394
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
94-
ctx.ExecuteCmd("scw instance server delete placement-group-id={{ .PlacementGroupResponse.PlacementGroup.ID }}")
95-
ctx.ExecuteCmd("scw instance server delete placement-group-id={{ .PlacementGroupResponse2.PlacementGroup.ID }}")
95+
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroupResponse.PlacementGroup.ID }}")
96+
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroupResponse2.PlacementGroup.ID }}")
9697
return nil
9798
},
9899
}))

internal/namespaces/instance/v1/instance_cli_test.go

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/scaleway/scaleway-cli/internal/core"
77
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
88
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
910
)
1011

1112
func init() {
@@ -79,13 +80,13 @@ func Test_CreateVolume(t *testing.T) {
7980
t.Run("Simple", core.Test(&core.TestConfig{
8081
Commands: GetCommands(),
8182
Cmd: "scw instance volume create name=test size=20G",
82-
AfterFunc: func(ctx *core.AfterFuncCtx) error {
83-
ctx.ExecuteCmd("scw instance volume delete volume-id={{ .Volume.ID }}")
84-
return nil
85-
},
8683
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
8784
assert.Equal(t, "test", ctx.Result.(*instance.CreateVolumeResponse).Volume.Name)
8885
},
86+
AfterFunc: func(ctx *core.AfterFuncCtx) error {
87+
ctx.ExecuteCmd("scw instance volume delete volume-id=" + ctx.CmdResult.(*instance.CreateVolumeResponse).Volume.ID)
88+
return nil
89+
},
8990
}))
9091

9192
t.Run("Bad size unit", core.Test(&core.TestConfig{
@@ -107,11 +108,12 @@ func Test_ServerUpdate(t *testing.T) {
107108
t.Run("Simple", core.Test(&core.TestConfig{
108109
Commands: GetCommands(),
109110
BeforeFunc: func(ctx *core.BeforeFuncCtx) error {
110-
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic")
111+
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
111112
return nil
112113
},
113114
Cmd: "scw instance server update server-id={{ .Server.ID }}",
114115
Check: core.TestCheckCombine(
116+
core.TestCheckExitCode(0),
115117
core.TestCheckGolden(),
116118
),
117119
AfterFunc: func(ctx *core.AfterFuncCtx) error {
@@ -127,9 +129,10 @@ func Test_ServerUpdate(t *testing.T) {
127129
return nil
128130
},
129131
Cmd: "scw instance server update server-id={{ .Server.ID }} placement-group=none",
130-
Check: core.TestCheckCombine(
131-
core.TestCheckNil(".Server.PlacementGroup"),
132-
),
132+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
133+
require.NoError(t, ctx.Err)
134+
assert.Nil(t, ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup)
135+
},
133136
AfterFunc: func(ctx *core.AfterFuncCtx) error {
134137
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }}")
135138
return nil
@@ -143,9 +146,10 @@ func Test_ServerUpdate(t *testing.T) {
143146
return nil
144147
},
145148
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group=`,
146-
Check: core.TestCheckCombine(
147-
core.TestCheckNil(".Server.PlacementGroup"),
148-
),
149+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
150+
require.NoError(t, ctx.Err)
151+
assert.Nil(t, ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup)
152+
},
149153
AfterFunc: func(ctx *core.AfterFuncCtx) error {
150154
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
151155
return nil
@@ -159,10 +163,14 @@ func Test_ServerUpdate(t *testing.T) {
159163
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
160164
return nil
161165
},
162-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group={{ .PlacementGroup.PlacementGroup.ID }}`,
163-
Check: core.TestCheckCombine(
164-
core.TestCheckEqual(".PlacementGroup.PlacementGroup.ID", ".Server.PlacementGroup.ID"),
165-
),
166+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}`,
167+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
168+
require.NoError(t, ctx.Err)
169+
assert.Equal(t,
170+
ctx.Meta["PlacementGroup"].(*instance.CreatePlacementGroupResponse).PlacementGroup.ID,
171+
ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup.ID,
172+
)
173+
},
166174
AfterFunc: func(ctx *core.AfterFuncCtx) error {
167175
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
168176
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}")
@@ -176,8 +184,9 @@ func Test_ServerUpdate(t *testing.T) {
176184
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
177185
return nil
178186
},
179-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group=11111111-1111-1111-1111-111111111111`,
187+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id=11111111-1111-1111-1111-111111111111`,
180188
Check: core.TestCheckCombine(
189+
core.TestCheckExitCode(1),
181190
core.TestCheckGolden(),
182191
),
183192
AfterFunc: func(ctx *core.AfterFuncCtx) error {
@@ -192,8 +201,9 @@ func Test_ServerUpdate(t *testing.T) {
192201
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic stopped")
193202
return nil
194203
},
195-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group=1111111`,
204+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id=1111111`,
196205
Check: core.TestCheckCombine(
206+
core.TestCheckExitCode(1),
197207
core.TestCheckGolden(),
198208
),
199209
AfterFunc: func(ctx *core.AfterFuncCtx) error {
@@ -209,10 +219,11 @@ func Test_ServerUpdate(t *testing.T) {
209219
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic placement-group-id={{ .PlacementGroup.PlacementGroup.ID }} stopped")
210220
return nil
211221
},
212-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group=none`,
213-
Check: core.TestCheckCombine(
214-
core.TestCheckNil(".Server.PlacementGroup"),
215-
),
222+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id=none`,
223+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
224+
require.NoError(t, ctx.Err)
225+
assert.Nil(t, ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup)
226+
},
216227
AfterFunc: func(ctx *core.AfterFuncCtx) error {
217228
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
218229
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}")
@@ -227,10 +238,14 @@ func Test_ServerUpdate(t *testing.T) {
227238
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic placement-group-id={{ .PlacementGroup.PlacementGroup.ID }} stopped")
228239
return nil
229240
},
230-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group={{ .PlacementGroup.PlacementGroup.ID }}`,
231-
Check: core.TestCheckCombine(
232-
core.TestCheckEqual(".PlacementGroup.PlacementGroup.ID", ".Server.PlacementGroup.ID"),
233-
),
241+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}`,
242+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
243+
require.NoError(t, ctx.Err)
244+
assert.Equal(t,
245+
ctx.Meta["PlacementGroup"].(*instance.CreatePlacementGroupResponse).PlacementGroup.ID,
246+
ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup.ID,
247+
)
248+
},
234249
AfterFunc: func(ctx *core.AfterFuncCtx) error {
235250
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
236251
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}")
@@ -246,13 +261,18 @@ func Test_ServerUpdate(t *testing.T) {
246261
ctx.Meta["Server"] = ctx.ExecuteCmd("scw instance server create image=ubuntu-bionic placement-group-id={{ .PlacementGroup.PlacementGroup.ID }} stopped")
247262
return nil
248263
},
249-
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group={{ .PlacementGroup2.PlacementGroup.ID }}`,
250-
Check: core.TestCheckCombine(
251-
core.TestCheckEqual(".PlacementGroup2.PlacementGroup.ID", ".Server.PlacementGroup.ID"),
252-
),
264+
Cmd: `scw instance server update server-id={{ .Server.ID }} placement-group-id={{ .PlacementGroup2.PlacementGroup.ID }}`,
265+
Check: func(t *testing.T, ctx *core.CheckFuncCtx) {
266+
assert.NoError(t, ctx.Err)
267+
assert.Equal(t,
268+
ctx.Meta["PlacementGroup2"].(*instance.CreatePlacementGroupResponse).PlacementGroup.ID,
269+
ctx.Result.(*instance.UpdateServerResponse).Server.PlacementGroup.ID,
270+
)
271+
},
253272
AfterFunc: func(ctx *core.AfterFuncCtx) error {
254273
ctx.ExecuteCmd("scw instance server delete server-id={{ .Server.ID }} delete-ip=true delete-volumes=true")
255274
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroup.PlacementGroup.ID }}")
275+
ctx.ExecuteCmd("scw instance placement-group delete placement-group-id={{ .PlacementGroup2.PlacementGroup.ID }}")
256276
return nil
257277
},
258278
}))

0 commit comments

Comments
 (0)