package secrets import ( "bytes" "io/ioutil" "os" "testing" kapi "k8s.io/kubernetes/pkg/api" ) func TestValidate(t *testing.T) { tests := []struct { testName string args []string expErr bool }{ { testName: "validArgs", args: []string{"testSecret", "./bsFixtures/www.google.com"}, }, { testName: "noName", args: []string{"./bsFixtures/www.google.com"}, expErr: true, //"Secret name is required" }, { testName: "noFilesPassed", args: []string{"testSecret"}, expErr: true, //"At least one source file or directory must be specified" }, } for _, test := range tests { options := NewCreateSecretOptions() options.Complete(test.args, nil) err := options.Validate() if err != nil && !test.expErr { t.Errorf("%s: unexpected error: %v", test.testName, err) } } } func TestCreateSecret(t *testing.T) { os.Symlink(".", "./bsFixtures/dir/symbolic") defer os.Remove("./bsFixtures/dir/symbolic") tests := []struct { testName string args []string expErr bool quiet bool errStreamContent string }{ { testName: "validSources", args: []string{"testSecret", "./bsFixtures/www.google.com", "./bsFixtures/dirNoSubdir"}, }, { testName: "allowsMixedCaseAndDash", args: []string{"testSecret", "./bsFixtures/invalid/invalid-DNS"}, }, { testName: "failsWithUnderscore", args: []string{"testSecret", "./bsFixtures/invalid/not\\valid"}, expErr: true, }, { testName: "leadingDotsAllowed", args: []string{"testSecret", "./bsFixtures/leadingdot/.dockercfg"}, }, { testName: "filesSameName", args: []string{"testSecret", "./bsFixtures/www.google.com", "./bsFixtures/multiple/www.google.com"}, expErr: true, // "Multiple files with the same name (www.google.com) cannot be included a secret" }, { testName: "testQuietTrue", args: []string{"testSecret", "./bsFixtures/dir"}, quiet: true, }, { testName: "testQuietFalse", args: []string{"testSecret", "./bsFixtures/dir"}, errStreamContent: "Skipping resource bsFixtures/dir/symbolic\n", }, { testName: "testNamedKeys", args: []string{"testSecret", ".googlename=./bsFixtures/www.google.com"}, expErr: false, }, { testName: "testNamedDir", args: []string{"testSecret", ".somename=./bsFixtures/dirNoSubdir"}, expErr: true, // "Cannot give a key name for a directory path." }, { testName: "testUnnamedDir", args: []string{"testSecret", "./bsFixtures/dirContainsMany"}, expErr: false, }, { testName: "testMalformedName", args: []string{"testSecret", ".google=name=./bsFixtures/www.google.com"}, expErr: true, // "Key names or file paths cannot contain '='." }, { testName: "testMissingName", args: []string{"testSecret", "=./bsFixtures/www.google.com"}, expErr: true, // "Key name for file path ./bsFixtures/www.google.com missing." }, { testName: "testMissingPath", args: []string{"testSecret", ".somename="}, expErr: true, // "File path for key name some-name missing." }, { testName: "testNamesAvoidCollision", args: []string{"testSecret", ".googlename=./bsFixtures/www.google.com", ".othergooglename=./bsFixtures/multiple/www.google.com"}, expErr: false, }, { testName: "testNameCollision", args: []string{"testSecret", ".googlename=./bsFixtures/www.google.com", ".googlename=./bsFixtures/multiple/www.google.com"}, expErr: true, // "Cannot add key google-name from path ./bsFixtures/multiple/www.google.com, another key by that name already exists." }, } for _, test := range tests { errStream := &bytes.Buffer{} options := NewCreateSecretOptions() options.Stderr = errStream options.Complete(test.args, nil) options.Quiet = test.quiet err := options.Validate() if err != nil { t.Errorf("unexpected error") } _, err = options.BundleSecret() if err != nil && !test.expErr { t.Errorf("%s: unexpected error: %s", test.testName, err) } if err == nil && test.expErr { t.Errorf("%s: missing expected error", test.testName) } if string(errStream.Bytes()) != test.errStreamContent { t.Errorf("%s: expected %s, got %v", test.testName, test.errStreamContent, string(errStream.Bytes())) } } } func TestSecretTypeSpecified(t *testing.T) { options := CreateSecretOptions{ Name: "any", SecretTypeName: string(kapi.SecretTypeDockercfg), Sources: []string{"./bsFixtures/www.google.com"}, Stderr: ioutil.Discard, } secret, err := options.BundleSecret() if err != nil { t.Errorf("unexpected error: %v", err) } if secret.Type != kapi.SecretTypeDockercfg { t.Errorf("expected %v, got %v", kapi.SecretTypeDockercfg, secret.Type) } } func TestSecretTypeDiscovered(t *testing.T) { options := CreateSecretOptions{ Name: "any", Sources: []string{"./bsFixtures/leadingdot/.dockercfg"}, Stderr: ioutil.Discard, } secret, err := options.BundleSecret() if err != nil { t.Errorf("unexpected error: %v", err) } if secret.Type != kapi.SecretTypeDockercfg { t.Errorf("expected %v, got %v", kapi.SecretTypeDockercfg, secret.Type) } }