Add unit test for secrets flag in config file
This commit is contained in:
		@@ -9,6 +9,7 @@ load(
 | 
				
			|||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "credentialmanager.go",
 | 
				
			||||||
        "nodemanager.go",
 | 
					        "nodemanager.go",
 | 
				
			||||||
        "vsphere.go",
 | 
					        "vsphere.go",
 | 
				
			||||||
        "vsphere_util.go",
 | 
					        "vsphere_util.go",
 | 
				
			||||||
@@ -26,25 +27,36 @@ go_library(
 | 
				
			|||||||
        "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library",
 | 
					        "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library",
 | 
				
			||||||
        "//vendor/gopkg.in/gcfg.v1:go_default_library",
 | 
					        "//vendor/gopkg.in/gcfg.v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
					        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/client-go/informers:go_default_library",
 | 
					        "//vendor/k8s.io/client-go/informers:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/client-go/tools/cache:go_default_library",
 | 
					        "//vendor/k8s.io/client-go/tools/cache:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["vsphere_test.go"],
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "credentialmanager_test.go",
 | 
				
			||||||
 | 
					        "vsphere_test.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    embed = [":go_default_library"],
 | 
					    embed = [":go_default_library"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/cloudprovider:go_default_library",
 | 
					        "//pkg/cloudprovider:go_default_library",
 | 
				
			||||||
        "//pkg/cloudprovider/providers/vsphere/vclib:go_default_library",
 | 
					        "//pkg/cloudprovider/providers/vsphere/vclib:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/controller:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/vmware/govmomi/lookup/simulator:go_default_library",
 | 
					        "//vendor/github.com/vmware/govmomi/lookup/simulator:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/vmware/govmomi/simulator:go_default_library",
 | 
					        "//vendor/github.com/vmware/govmomi/simulator:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/vmware/govmomi/simulator/vpx:go_default_library",
 | 
					        "//vendor/github.com/vmware/govmomi/simulator/vpx:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/vmware/govmomi/sts/simulator:go_default_library",
 | 
					        "//vendor/github.com/vmware/govmomi/sts/simulator:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/client-go/informers:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -352,3 +352,221 @@ func TestVolumes(t *testing.T) {
 | 
				
			|||||||
	// 	t.Fatalf("Cannot delete VMDK volume %s: %v", volPath, err)
 | 
						// 	t.Fatalf("Cannot delete VMDK volume %s: %v", volPath, err)
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestSecretVSphereConfig(t *testing.T) {
 | 
				
			||||||
 | 
						var vs *VSphere
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							username = "user"
 | 
				
			||||||
 | 
							password = "password"
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						var testcases = []struct {
 | 
				
			||||||
 | 
							testName                 string
 | 
				
			||||||
 | 
							conf                     string
 | 
				
			||||||
 | 
							expectedIsSecretProvided bool
 | 
				
			||||||
 | 
							expectedUsername         string
 | 
				
			||||||
 | 
							expectedPassword         string
 | 
				
			||||||
 | 
							expectedError            error
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "Username and password with old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedUsername: username,
 | 
				
			||||||
 | 
								expectedPassword: password,
 | 
				
			||||||
 | 
								expectedError:    nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretName and SecretNamespace in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								secret-namespace = "kube-system"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedIsSecretProvided: true,
 | 
				
			||||||
 | 
								expectedError:            nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretName and SecretNamespace with Username and Password in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								secret-namespace = "kube-system"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedIsSecretProvided: true,
 | 
				
			||||||
 | 
								expectedError:            nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretName and SecretNamespace with Username missing in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								secret-namespace = "kube-system"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedIsSecretProvided: true,
 | 
				
			||||||
 | 
								expectedError:            nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretNamespace missing with Username and Password in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedUsername: username,
 | 
				
			||||||
 | 
								expectedPassword: password,
 | 
				
			||||||
 | 
								expectedError:    nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretNamespace and Username missing in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedError: ErrUsernameMissing,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretNamespace and Password missing in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedError: ErrPasswordMissing,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretNamespace, Username and Password missing in old configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								working-dir = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedError: ErrUsernameMissing,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "Username and password with new configuration but username and password in global section",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								[VirtualCenter "0.0.0.0"]
 | 
				
			||||||
 | 
								[Workspace]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								folder = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedUsername: username,
 | 
				
			||||||
 | 
								expectedPassword: password,
 | 
				
			||||||
 | 
								expectedError:    nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "Username and password with new configuration, username and password in virtualcenter section",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								port = 443
 | 
				
			||||||
 | 
								insecure-flag = true
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								[VirtualCenter "0.0.0.0"]
 | 
				
			||||||
 | 
								user = user
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								[Workspace]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								folder = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedUsername: username,
 | 
				
			||||||
 | 
								expectedPassword: password,
 | 
				
			||||||
 | 
								expectedError:    nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretName and SecretNamespace with new configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								secret-namespace = "kube-system"
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								[VirtualCenter "0.0.0.0"]
 | 
				
			||||||
 | 
								[Workspace]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								folder = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedIsSecretProvided: true,
 | 
				
			||||||
 | 
								expectedError:            nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								testName: "SecretName and SecretNamespace with Username missing in new configuration",
 | 
				
			||||||
 | 
								conf: `[Global]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								port = 443
 | 
				
			||||||
 | 
								insecure-flag = true
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								secret-name = "vccreds"
 | 
				
			||||||
 | 
								secret-namespace = "kube-system"
 | 
				
			||||||
 | 
								[VirtualCenter "0.0.0.0"]
 | 
				
			||||||
 | 
								password = password
 | 
				
			||||||
 | 
								[Workspace]
 | 
				
			||||||
 | 
								server = 0.0.0.0
 | 
				
			||||||
 | 
								datacenter = us-west
 | 
				
			||||||
 | 
								folder = kubernetes
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								expectedIsSecretProvided: true,
 | 
				
			||||||
 | 
								expectedError:            nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, testcase := range testcases {
 | 
				
			||||||
 | 
							t.Logf("Executing Testcase: %s", testcase.testName)
 | 
				
			||||||
 | 
							cfg, err := readConfig(strings.NewReader(testcase.conf))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								t.Fatalf("Should succeed when a valid config is provided: %s", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							vs, err = buildVSphereFromConfig(cfg)
 | 
				
			||||||
 | 
							if err != testcase.expectedError {
 | 
				
			||||||
 | 
								t.Fatalf("Should succeed when a valid config is provided: %s", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if vs.isSecretInfoProvided != testcase.expectedIsSecretProvided {
 | 
				
			||||||
 | 
								t.Fatalf("SecretName and SecretNamespace was expected in config %s. error: %s",
 | 
				
			||||||
 | 
									testcase.conf, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !testcase.expectedIsSecretProvided {
 | 
				
			||||||
 | 
								for _, vsInstance := range vs.vsphereInstanceMap {
 | 
				
			||||||
 | 
									if vsInstance.conn.Username != testcase.expectedUsername {
 | 
				
			||||||
 | 
										t.Fatalf("Expected username doesn't match actual username in config %s. error: %s",
 | 
				
			||||||
 | 
											testcase.expectedUsername, vsInstance.conn.Username, testcase.conf, err)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if vsInstance.conn.Password != testcase.expectedPassword {
 | 
				
			||||||
 | 
										t.Fatalf("Expected password doesn't match actual password in config %s. error: %s",
 | 
				
			||||||
 | 
											testcase.expectedPassword, vsInstance.conn.Password, testcase.conf, err)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user