Set defaults to 0

This commit is contained in:
Nils Hanke 2022-05-04 18:41:24 +02:00 committed by Thomas Tendyck
parent bbfd84729d
commit 4459766b58
2 changed files with 85 additions and 61 deletions

View File

@ -31,9 +31,9 @@ func newCreateCmd() *cobra.Command {
} }
cmd.Flags().String("name", "constell", "create the cluster with the specified name") cmd.Flags().String("name", "constell", "create the cluster with the specified name")
cmd.Flags().BoolP("yes", "y", false, "create the cluster without further confirmation") cmd.Flags().BoolP("yes", "y", false, "create the cluster without further confirmation")
cmd.Flags().IntP("control-plane-nodes", "c", 1, "number of control-plane nodes (required)") cmd.Flags().IntP("control-plane-nodes", "c", 0, "number of control-plane nodes (required)")
must(cobra.MarkFlagRequired(cmd.Flags(), "control-plane-nodes")) must(cobra.MarkFlagRequired(cmd.Flags(), "control-plane-nodes"))
cmd.Flags().IntP("worker-nodes", "w", 1, "number of worker nodes (required)") cmd.Flags().IntP("worker-nodes", "w", 0, "number of worker nodes (required)")
must(cobra.MarkFlagRequired(cmd.Flags(), "worker-nodes")) must(cobra.MarkFlagRequired(cmd.Flags(), "worker-nodes"))
cmd.Flags().StringP("instance-type", "t", "", "instance type of cluster nodes") cmd.Flags().StringP("instance-type", "t", "", "instance type of cluster nodes")
must(cmd.RegisterFlagCompletionFunc("instance-type", instanceTypeCompletion)) must(cmd.RegisterFlagCompletionFunc("instance-type", instanceTypeCompletion))

View File

@ -3,7 +3,7 @@ package cmd
import ( import (
"bytes" "bytes"
"errors" "errors"
"fmt" "strconv"
"strings" "strings"
"testing" "testing"
@ -64,37 +64,47 @@ func TestCreate(t *testing.T) {
wantAbbort bool wantAbbort bool
}{ }{
"create": { "create": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{state: testState}, creator: &stubCloudCreator{state: testState},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
workerCountFlag: intPtr(2),
yesFlag: true,
}, },
"interactive": { "interactive": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{state: testState}, creator: &stubCloudCreator{state: testState},
provider: cloudprovider.Azure, provider: cloudprovider.Azure,
stdin: "yes\n", controllerCountFlag: intPtr(2),
workerCountFlag: intPtr(1),
stdin: "yes\n",
}, },
"interactive abort": { "interactive abort": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
stdin: "no\n", controllerCountFlag: intPtr(1),
wantAbbort: true, workerCountFlag: intPtr(1),
stdin: "no\n",
wantAbbort: true,
}, },
"interactive error": { "interactive error": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
stdin: "foo\nfoo\nfoo\n", controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
stdin: "foo\nfoo\nfoo\n",
wantErr: true,
}, },
"flag name to long": { "flag name to long": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
nameFlag: strings.Repeat("a", constellationNameLength+1), controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
nameFlag: strings.Repeat("a", constellationNameLength+1),
wantErr: true,
}, },
"flag control-plane-count invalid": { "flag control-plane-count invalid": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
@ -109,7 +119,7 @@ func TestCreate(t *testing.T) {
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
controllerCountFlag: intPtr(3), controllerCountFlag: intPtr(3),
workerCountFlag: intPtr(-1), workerCountFlag: intPtr(0),
wantErr: true, wantErr: true,
}, },
"flag control-plane-count missing": { "flag control-plane-count missing": {
@ -127,11 +137,13 @@ func TestCreate(t *testing.T) {
wantErr: true, wantErr: true,
}, },
"flag invalid instance-type": { "flag invalid instance-type": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
insTypeFlag: "invalid", controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
insTypeFlag: "invalid",
wantErr: true,
}, },
"old state in directory": { "old state in directory": {
setupFs: func(require *require.Assertions) afero.Fs { setupFs: func(require *require.Assertions) afero.Fs {
@ -140,10 +152,12 @@ func TestCreate(t *testing.T) {
require.NoError(fileHandler.Write(constants.StateFilename, []byte{1}, file.OptNone)) require.NoError(fileHandler.Write(constants.StateFilename, []byte{1}, file.OptNone))
return fs return fs
}, },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
yesFlag: true,
wantErr: true,
}, },
"old adminConf in directory": { "old adminConf in directory": {
setupFs: func(require *require.Assertions) afero.Fs { setupFs: func(require *require.Assertions) afero.Fs {
@ -152,10 +166,12 @@ func TestCreate(t *testing.T) {
require.NoError(fileHandler.Write(constants.AdminConfFilename, []byte{1}, file.OptNone)) require.NoError(fileHandler.Write(constants.AdminConfFilename, []byte{1}, file.OptNone))
return fs return fs
}, },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
yesFlag: true,
wantErr: true,
}, },
"old masterSecret in directory": { "old masterSecret in directory": {
setupFs: func(require *require.Assertions) afero.Fs { setupFs: func(require *require.Assertions) afero.Fs {
@ -164,35 +180,43 @@ func TestCreate(t *testing.T) {
require.NoError(fileHandler.Write(constants.MasterSecretFilename, []byte{1}, file.OptNone)) require.NoError(fileHandler.Write(constants.MasterSecretFilename, []byte{1}, file.OptNone))
return fs return fs
}, },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
yesFlag: true,
wantErr: true,
}, },
"dev config does not exist": { "dev config does not exist": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
devConfigFlag: "dev-config.json", workerCountFlag: intPtr(1),
wantErr: true, yesFlag: true,
devConfigFlag: "dev-config.json",
wantErr: true,
}, },
"create error": { "create error": {
setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() }, setupFs: func(require *require.Assertions) afero.Fs { return afero.NewMemMapFs() },
creator: &stubCloudCreator{createErr: someErr}, creator: &stubCloudCreator{createErr: someErr},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
yesFlag: true,
wantErr: true,
}, },
"write state error": { "write state error": {
setupFs: func(require *require.Assertions) afero.Fs { setupFs: func(require *require.Assertions) afero.Fs {
fs := afero.NewMemMapFs() fs := afero.NewMemMapFs()
return afero.NewReadOnlyFs(fs) return afero.NewReadOnlyFs(fs)
}, },
creator: &stubCloudCreator{}, creator: &stubCloudCreator{},
provider: cloudprovider.GCP, provider: cloudprovider.GCP,
yesFlag: true, controllerCountFlag: intPtr(1),
wantErr: true, workerCountFlag: intPtr(1),
yesFlag: true,
wantErr: true,
}, },
} }
@ -216,10 +240,10 @@ func TestCreate(t *testing.T) {
require.NoError(cmd.Flags().Set("dev-config", tc.devConfigFlag)) require.NoError(cmd.Flags().Set("dev-config", tc.devConfigFlag))
} }
if tc.controllerCountFlag != nil { if tc.controllerCountFlag != nil {
require.NoError(cmd.Flags().Set("control-plane-nodes", fmt.Sprint(*tc.controllerCountFlag))) require.NoError(cmd.Flags().Set("control-plane-nodes", strconv.Itoa(*tc.controllerCountFlag)))
} }
if tc.workerCountFlag != nil { if tc.workerCountFlag != nil {
require.NoError(cmd.Flags().Set("worker-nodes", fmt.Sprint(*tc.workerCountFlag))) require.NoError(cmd.Flags().Set("worker-nodes", strconv.Itoa(*tc.workerCountFlag)))
} }
if tc.insTypeFlag != "" { if tc.insTypeFlag != "" {
require.NoError(cmd.Flags().Set("instance-type", tc.insTypeFlag)) require.NoError(cmd.Flags().Set("instance-type", tc.insTypeFlag))