func TestShowAvailabilityZone(t *testing.T) { expectedStruct := photon.AvailabilityZone{ ID: "availabilityzone_id", Name: "availabilityzone_name", } response, err := json.Marshal(expectedStruct) if err != nil { t.Error("Not expecting error serializaing expected response") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/availabilityzones/"+expectedStruct.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{expectedStruct.ID}) cxt := cli.NewContext(nil, set, nil) err = showAvailabilityZone(cxt, os.Stdout) if err != nil { t.Error("Not expecting show availabilityzone to fail: " + err.Error()) } }
func TestShowPhysicalNetwork(t *testing.T) { expectedStruct := photon.Subnet{ ID: "network_id", Name: "network_name", PortGroups: []string{"port", "group"}, IsDefault: false, } response, err := json.Marshal(expectedStruct) if err != nil { t.Error("Not expecting error serializing expected response") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/subnets/"+expectedStruct.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{expectedStruct.ID}) cxt := cli.NewContext(nil, set, nil) err = showPhysicalNetwork(cxt, os.Stdout) if err != nil { t.Error("Error showing networks: " + err.Error()) } }
func TestShow(t *testing.T) { authInfo := photon.AuthInfo{} response, err := json.Marshal(authInfo) if err != nil { t.Error("Not expecting error serializing expected status") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/auth", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) cxt := cli.NewContext(nil, set, nil) err = show(cxt) if err != nil { t.Error(err) } }
func TestEnableClusterType(t *testing.T) { deploymentId := "deployment1" queuedTask := &photon.Task{ Operation: "CONFIGURE_CLUSTER", State: "QUEUED", Entity: photon.Entity{ID: deploymentId}, } completedTask := &photon.Task{ Operation: "CONFIGURE_CLUSTER", State: "COMPLETED", Entity: photon.Entity{ID: deploymentId}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error during serializing expected queuedTask") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error during serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/deployments/"+deploymentId+"/enable_cluster_type", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set := flag.NewFlagSet("test", 0) err = set.Parse([]string{deploymentId}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set.String("type", "SWARM", "Cluster type") set.String("image-id", "abcd", "image id") cxt := cli.NewContext(nil, set, globalCtx) err = enableClusterType(cxt) if err != nil { t.Error(err) t.Error("Not expecting deployment list hosts to fail") } }
func TestAcquireFloatingIp(t *testing.T) { queuedTask := &photon.Task{ Operation: "ACQUIRE_FLOATING_IP", State: "QUEUED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } completedTask := &photon.Task{ Operation: "ACQUIRE_FLOATING_IP", State: "COMPLETED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected queuedTask") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/vms/"+"fake_vm_ID"+"/acquire_floating_ip", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake_vm_ID"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set.String("network_id", "fake_network_id", "network id") cxt := cli.NewContext(nil, set, globalCtx) err = acquireFloatingIp(cxt, os.Stdout) if err != nil { t.Error("Not expecting error creating VM image: " + err.Error()) } }
func TestListDeploymentHosts(t *testing.T) { hostList := MockHostsPage{ Items: []photon.Host{ { Username: "******", Password: "******", Address: "testIP", Tags: []string{"CLOUD"}, ID: "host-test-id", State: "COMPLETED", }, }, NextPageLink: "/fake-next-page-link", PreviousPageLink: "", } response, err := json.Marshal(hostList) if err != nil { t.Error("Not expecting error serializing host list") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/deployments/1/hosts", mocks.CreateResponder(200, string(response[:]))) hostList = MockHostsPage{ Items: []photon.Host{}, NextPageLink: "", PreviousPageLink: "", } response, err = json.Marshal(hostList) if err != nil { t.Error("Not expecting error serializing expected taskLists") } mocks.RegisterResponder( "GET", server.URL+"/fake-next-page-link", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"1"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = listDeploymentHosts(cxt, os.Stdout) if err != nil { t.Error("Not expecting deployment list hosts to fail") } }
func TestResizeCluster(t *testing.T) { queuedTask := &photon.Task{ Operation: "RESIZE_CLUSTER", State: "QUEUED", ID: "fake_resize_cluster_task_id", Entity: photon.Entity{ID: "fake_cluster_id"}, } queuedTaskResponse, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected queued task") } completedTask := &photon.Task{ Operation: "RESIZE_CLUSTER", State: "COMPLETED", ID: "fake_resize_cluster_task_id", Entity: photon.Entity{ID: "fake_cluster_id"}, } completedTaskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completed task") } server := mocks.NewTestServer() defer server.Close() mocks.RegisterResponder( "POST", server.URL+"/clusters/fake_cluster_id/resize", mocks.CreateResponder(200, string(queuedTaskResponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/fake_resize_cluster_task_id", mocks.CreateResponder(200, string(completedTaskResponse[:]))) mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting argument parsing to fail") } set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake_cluster_id", "50"}) if err != nil { t.Error("Not expecting argument parsing to fail") } ctx := cli.NewContext(nil, set, globalCtx) err = resizeCluster(ctx, os.Stdout) if err != nil { t.Error("Not expecting error resizing cluster: " + err.Error()) } }
func TestVMNetworks(t *testing.T) { queuedTask := &photon.Task{ Operation: "GET_NETWORKS", State: "COMPLETED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } taskResponse, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializaing expected queuedTask") } networkMap := make(map[string]interface{}) networkMap["network"] = "VMmgmtNetwork" networkMap["macAddress"] = "00:0c:29:7a:b4:d5" networkMap["ipAddress"] = "10.144.121.12" networkMap["netmask"] = "255.255.252.0" networkMap["isConnected"] = "true" networkConnectionMap := make(map[string]interface{}) networkConnectionMap["networkConnections"] = []interface{}{networkMap} completedTask := &photon.Task{ Operation: "GET_NETWORKS", State: "COMPLETED", ResourceProperties: networkConnectionMap, } response, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializaing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/vms/"+"fake_vm_ID"+"/subnets", mocks.CreateResponder(200, string(taskResponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake_vm_ID"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = listVMNetworks(cxt, os.Stdout) if err != nil { t.Error("Not expecting error getting vm networks: " + err.Error()) } }
func TestSetDefaultVirtualNetwork(t *testing.T) { completedTask := &photon.Task{ Operation: "SET_DEFAULT_NETWORK", State: "COMPLETED", Entity: photon.Entity{ID: "id"}, } taskresponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completedTask") } info := &photon.Info{ NetworkType: SOFTWARE_DEFINED, } infoString, err := json.Marshal(info) if err != nil { t.Error("Not expecting error when serializing expected info") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/subnets/"+completedTask.Entity.ID+"/set_default", mocks.CreateResponder(200, string(taskresponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+completedTask.ID, mocks.CreateResponder(200, string(taskresponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/info", mocks.CreateResponder(200, string(infoString[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set := flag.NewFlagSet("test", 0) err = set.Parse([]string{completedTask.Entity.ID}) cxt := cli.NewContext(nil, set, globalCtx) err = setDefaultNetwork(cxt, os.Stdout) if err != nil { t.Error("Not expecting set default network to fail", err) } }
func TestFlavorTasks(t *testing.T) { taskList := MockTasksPage{ Items: []photon.Task{ { Operation: "CREATE_FLAVOR", State: "COMPLETED", ID: "1", Entity: photon.Entity{ID: "fake-id", Kind: "flavor"}, }, }, NextPageLink: "/fake-next-page-link", PreviousPageLink: "", } response, err := json.Marshal(taskList) if err != nil { t.Error("Not expecting error serializaing expected status") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/flavors/fake-id/tasks", mocks.CreateResponder(200, string(response[:]))) taskList = MockTasksPage{ Items: []photon.Task{}, NextPageLink: "", PreviousPageLink: "", } response, err = json.Marshal(taskList) if err != nil { t.Error("Not expecting error serializing expected taskLists") } mocks.RegisterResponder( "GET", server.URL+"/fake-next-page-link", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake-id"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = getFlavorTasks(cxt, os.Stdout) if err != nil { t.Error("Not expecting error retrieving tenant tasks") } }
func TestSetDeploymentSecurityGroups(t *testing.T) { deploymentId := "deployment1" queuedTask := &photon.Task{ Operation: "UPDATE_DEPLOYMENT_SECURITY_GROUPS", State: "QUEUED", Entity: photon.Entity{ID: deploymentId}, } completedTask := &photon.Task{ Operation: "UPDATE_DEPLOYMENT_SECURITY_GROUPS", State: "COMPLETED", Entity: photon.Entity{ID: deploymentId}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error during serializing expected queuedTask") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error during serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/deployments/"+deploymentId+"/set_security_groups", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set := flag.NewFlagSet("test", 0) err = set.Parse([]string{deploymentId, "tenant\admingroup"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, globalCtx) err = setDeploymentSecurityGroups(cxt) if err != nil { t.Error(err) t.Error("Not expecting setDeploymentSecurityGroups to fail") } }
func TestCreateVirtualSubnet(t *testing.T) { queuedTask := &photon.Task{ Operation: "CREATE_NETWORK", State: "QUEUED", Entity: photon.Entity{ID: "network-ID"}, } completedTask := &photon.Task{ Operation: "CREATE_NETWORK", State: "COMPLETED", Entity: photon.Entity{ID: "network-ID"}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected queuedTask") } taskresponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/projects/project_id/subnets", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskresponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set := flag.NewFlagSet("test", 0) set.String("name", "network_name", "network name") set.String("routingType", "ROUTED", "routing type") set.Int("size", 256, "network size") set.Int("staticIpSize", 0, "reserved static ip size") set.String("projectId", "project_id", "project ID") cxt := cli.NewContext(nil, set, globalCtx) err = createVirtualNetwork(cxt, os.Stdout) if err != nil { t.Error("Not expecting create network to fail", err) } }
func TestGetVMMksTicket(t *testing.T) { completedTask := &photon.Task{ Operation: "GET_MKS_TICKET", State: "COMPLETED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } response, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializaing expected completedTask") } mksMap := make(map[string]interface{}) mksMap["ticket"] = "ticket-id" mksTask := &photon.Task{ State: "COMPLETED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, ResourceProperties: mksMap, } mksresponse, err := json.Marshal(mksTask) if err != nil { t.Error("Not expecting error serializaing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/vms/"+"fake_vm_ID"+"/mks_ticket", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+completedTask.ID, mocks.CreateResponder(200, string(mksresponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake_vm_ID"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = getVMMksTicket(cxt, os.Stdout) if err != nil { t.Error("Not expecting error getting vm mks ticket: " + err.Error()) } }
func TestTargetInfo(t *testing.T) { server := mocks.NewTestServer() defer server.Close() // We first test that with exactly one deployment, we work as expected. // This is the expected case in a real installation err := mockInfo(t, server) if err != nil { t.Error("Failed to mock info: " + err.Error()) } mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalFlags := flag.NewFlagSet("global-flags", flag.ContinueOnError) globalFlags.String("output", "json", "output") err = globalFlags.Parse([]string{"--output=json"}) if err != nil { t.Error(err) } globalCtx := cli.NewContext(nil, globalFlags, nil) commandFlags := flag.NewFlagSet("command-flags", flag.ContinueOnError) err = commandFlags.Parse([]string{}) if err != nil { t.Error(err) } cxt := cli.NewContext(nil, commandFlags, globalCtx) var output bytes.Buffer err = showInfo(cxt, &output) if err != nil { t.Error("showInfo ailed unexpectedly: " + err.Error()) } // Verify we have the fields we expect err = checkRegExp(`\"baseVersion\":\s*\".*\"`, output) if err != nil { t.Errorf("Show info produce a JSON field named 'baseVersion': %s", err) } err = checkRegExp(`\"fullVersion\":\s*\".*\"`, output) if err != nil { t.Errorf("Show info produce a JSON field named 'fullVersion': %s", err) } err = checkRegExp(`\"gitCommitHash\":\s*\".*\"`, output) if err != nil { t.Errorf("Show info produce a JSON field named 'gitCommitHash': %s", err) } err = checkRegExp(`\"networkType\":\s*\".*\"`, output) if err != nil { t.Errorf("Show info produce a JSON field named 'networkType': %s", err) } }
func TestSetVMMetadata(t *testing.T) { queuedTask := &photon.Task{ Operation: "SET_METADATA", State: "QUEUED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } taskResponse, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializaing expected queuedTask") } completedTask := &photon.Task{ Operation: "SET_METADATA", State: "COMPLETED", ID: "fake-vm-task-ID", Entity: photon.Entity{ID: "fake_vm_ID"}, } response, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializaing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/vms/"+"fake_vm_ID"+"/set_metadata", mocks.CreateResponder(200, string(taskResponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake_vm_ID"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } set.String("metadata", "{\"a\":\"b\", \"c\":\"d\"}", "vm metadata") cxt := cli.NewContext(nil, set, nil) err = setVMMetadata(cxt, os.Stdout) if err != nil { t.Error("Not expecting error setting vm metadata: " + err.Error()) } }
func TestHostGetVMs(t *testing.T) { vmListStruct := photon.VMs{ Items: []photon.VM{ { Name: "fake_vm_name", ID: "fake_vm_ID", Flavor: "fake_vm_flavor_name", State: "STOPPED", SourceImageID: "fake_image_ID", Host: "fake_host_ip", Datastore: "fake_datastore_ID", AttachedDisks: []photon.AttachedDisk{ { Name: "d1", Kind: "ephemeral-disk", Flavor: "fake_ephemeral_flavor_ID", CapacityGB: 0, BootDisk: true, }, }, }, }, } response, err := json.Marshal(vmListStruct) if err != nil { t.Error("Not expecting error serializing host list") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/hosts/1/vms", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"1"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = listHostVMs(cxt, os.Stdout) if err != nil { t.Error("Not expecting deployment list hosts to fail") } }
func TestUpdateImageDatastores(t *testing.T) { deploymentId := "deployment1" queuedTask := &photon.Task{ Operation: "UPDATE_IMAGE_DATASTORES", State: "QUEUED", Entity: photon.Entity{ID: "1"}, } completedTask := photon.Task{ ID: "task1", Operation: "UPDATE_IMAGE_DATASTORES", State: "COMPLETED", Entity: photon.Entity{ID: deploymentId}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error when serializing tasks") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error during serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/deployments/"+deploymentId+"/set_image_datastores", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{deploymentId}) if err != nil { t.Error(err) } set.String("datastores", "ds1,ds2", "blob") ctx := cli.NewContext(nil, set, nil) err = updateImageDatastores(ctx) if err != nil { t.Error(err) } }
func TestResumeSystem(t *testing.T) { queuedTask := &photon.Task{ Operation: "RESUME_SYSTEM", State: "QUEUED", Entity: photon.Entity{ID: "1"}, } completedTask := &photon.Task{ Operation: "RESUME_SYSTEM", State: "COMPLETED", Entity: photon.Entity{ID: "1"}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error during serializing expected queuedTask") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error during serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/deployments/"+queuedTask.Entity.ID+"/resume_system", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{queuedTask.Entity.ID}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = resumeSystem(cxt) if err != nil { t.Error(err) t.Error("Not expecting resumeSystem to fail") } }
func TestGetDeployment(t *testing.T) { auth := &photon.AuthInfo{ Enabled: false, } stats := &photon.StatsInfo{ Enabled: false, } getStruct := photon.Deployment{ ImageDatastores: []string{"testname"}, ID: "1", Auth: auth, State: "COMPLETED", Stats: stats, } response, err := json.Marshal(getStruct) if err != nil { t.Error("Not expecting error serializaing expected createTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/deployments/"+getStruct.ID, mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/deployments/1/vms", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{getStruct.ID}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = showDeployment(cxt, os.Stdout) if err != nil { t.Error("Not expecting get deployment to fail") } }
func TestSetHostAvailabilityZone(t *testing.T) { queuedTask := &photon.Task{ Operation: "SET_AVAILABILITYZONE", State: "QUEUED", ID: "fake-task-id", Entity: photon.Entity{ID: "fake-host-id"}, } completedTask := &photon.Task{ Operation: "SET_AVAILABILITYZONE", State: "COMPLETED", ID: "fake-task-id", Entity: photon.Entity{ID: "fake-host-id"}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected createTask") } taskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected createTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/hosts"+"/fake-host-id"+"/set_availability_zone", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskResponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake-host-id", "fake-availability-zone-id"}) cxt := cli.NewContext(nil, set, nil) err = setHostAvailabilityZone(cxt, os.Stdout) if err != nil { t.Error("Error listing hosts: " + err.Error()) } }
func TestClusterTriggerMaintenance(t *testing.T) { // Start mock server server := mocks.NewTestServer() defer server.Close() // Create mock response completedTask := &photon.Task{ Operation: "TRIGGER_CLUSTER_MAINTENANCE", State: "COMPLETED", ID: "fake_cluster_task_id", Entity: photon.Entity{ID: "fake_cluster_id"}, } completedTaskResponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completed task") } // Register mock response with mock server mocks.RegisterResponder( "POST", server.URL+"/clusters/fake_cluster_id/trigger_maintenance", mocks.CreateResponder(200, string(completedTaskResponse[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/fake_cluster_task_id", mocks.CreateResponder(200, string(completedTaskResponse[:]))) mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) commandFlags := flag.NewFlagSet("command-flags", flag.ContinueOnError) err = commandFlags.Parse([]string{"fake_cluster_id"}) if err != nil { t.Error(err) } ctx := cli.NewContext(nil, commandFlags, nil) err = triggerMaintenance(ctx) if err != nil { t.Error("Not expecting error for cluster trigger maintenance: " + err.Error()) } }
func TestGetStatus(t *testing.T) { // test GetStatus when config file doesn't exist err := cf.RemoveConfigFile() if err != nil { t.Error("Not expecting error removing config file") } set := flag.NewFlagSet("test", 0) cxt := cli.NewContext(nil, set, nil) err = getStatus(cxt, os.Stdout) if err == nil { t.Error("Expected to receive error trying to get status when config file does not exist") } // test GetStatus with mock client and mock server expectedStruct := photon.Status{ Status: "READY", Components: []photon.Component{ {Component: "chairman", Message: "", Status: "READY"}, {Component: "housekeeper", Message: "", Status: "READY"}, }, } response, err := json.Marshal(expectedStruct) if err != nil { t.Error("Not expecting error serializing expected status") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/status", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) err = getStatus(cxt, os.Stdout) if err != nil { t.Error("Not expecting error getting status of mock client") } }
func TestSetSecurityGroupsForProject(t *testing.T) { taskId := "task1" projectId := "project1" completedTask := photon.Task{ ID: taskId, Operation: "PUSH_TENANT_SECURITY_GROUPS", State: "COMPLETED", Entity: photon.Entity{ID: projectId}, } response, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializaing expected status") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/projects/"+projectId+"/set_security_groups", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+taskId, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{projectId, "sg1"}) if err != nil { t.Error(err) } cxt := cli.NewContext(nil, set, nil) err = setSecurityGroupsForProject(cxt) if err != nil { t.Error(err) } }
func TestCheckSoftwareDefinedNetworkEnabled(t *testing.T) { info := &photon.Info{ NetworkType: SOFTWARE_DEFINED, } infoString, err := json.Marshal(info) if err != nil { t.Error("Not expecting error when serializing info") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/info", mocks.CreateResponder(200, string(infoString[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, nil, globalCtx) sdnEnabled, err := isSoftwareDefinedNetwork(cxt) if err != nil { t.Error("Not expecting checking if a network is software-defined to fail", err) } if !sdnEnabled { t.Error("This network should be software-defined") } }
func TestShowMonitorTask(t *testing.T) { task := photon.Task{ Operation: "CREATE_FLAVOR", State: "COMPLETED", ID: "fake-flavor-task-id", Entity: photon.Entity{ID: "fake-flavor-id", Kind: "vm"}, } response, err := json.Marshal(task) if err != nil { t.Error("Not expecting error serializaing expected taskLists") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/tasks/fake-flavor-id", mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{"fake-flavor-id"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = showTask(cxt) if err != nil { t.Error("Not expecting error showing task: " + err.Error()) } err = monitorTask(cxt) if err != nil { t.Error("Not expecting error monitoring task: " + err.Error()) } }
func TestCheckNetworkTypeNotDefined(t *testing.T) { info := &photon.Info{ NetworkType: NOT_AVAILABLE, } infoString, err := json.Marshal(info) if err != nil { t.Error("Not expecting error when serializing info") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/info", mocks.CreateResponder(200, string(infoString[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) globalSet := flag.NewFlagSet("test", 0) globalSet.Bool("non-interactive", true, "doc") globalCtx := cli.NewContext(nil, globalSet, nil) err = globalSet.Parse([]string{"--non-interactive"}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, nil, globalCtx) expectedErrMsg := "Network type is missing" _, err = isSoftwareDefinedNetwork(cxt) if err == nil || err.Error() != expectedErrMsg { t.Error("Error should have happened due to missing network type") } }
func TestShowHost(t *testing.T) { expectedStruct := photon.Host{ ID: "506b13eb-f85d-4bad-a29e-e63a1e3eb043", Address: "196.128.1.1", Tags: []string{"CLOUD"}, State: "READY", Metadata: map[string]string{}, } response, err := json.Marshal(expectedStruct) if err != nil { log.Fatal("Not expecting error serializing expected response") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/hosts/"+expectedStruct.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{expectedStruct.ID}) if err != nil { log.Fatal("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = showHost(cxt, os.Stdout) if err != nil { t.Error("Error showing hosts: " + err.Error()) } }
func TestShowFlavor(t *testing.T) { getStruct := photon.Flavor{ Name: "testname", ID: "1", Kind: "persistent-disk", Cost: []photon.QuotaLineItem{{Key: "k", Value: 1, Unit: "B"}}, } response, err := json.Marshal(getStruct) if err != nil { t.Error("Not expecting error serializaing expected createTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/flavors/"+getStruct.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{getStruct.ID}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt := cli.NewContext(nil, set, nil) err = showFlavor(cxt, os.Stdout) if err != nil { t.Error("Not expecting get deployment to fail") } }
func TestShowVirtuallNetwork(t *testing.T) { expectedVirtualSubnet := photon.VirtualSubnet{ ID: "network_id", Name: "network_name", IsDefault: false, State: "READY", RoutingType: "ROUTED", Cidr: "192.168.0.0/24", LowIpDynamic: "192.168.0.1", HighIpDynamic: "192.168.0.200", } response, err := json.Marshal(expectedVirtualSubnet) if err != nil { t.Error("Not expecting error serializing expected response") } server := mocks.NewTestServer() mocks.RegisterResponder( "GET", server.URL+"/subnets/"+expectedVirtualSubnet.ID, mocks.CreateResponder(200, string(response[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) err = set.Parse([]string{expectedVirtualSubnet.ID}) cxt := cli.NewContext(nil, set, nil) err = showVirtualNetwork(cxt, os.Stdout) if err != nil { t.Error("Error showing networks: " + err.Error()) } }
func TestCreateDeleteAvailabilityZone(t *testing.T) { queuedTask := &photon.Task{ Operation: "CREATE_AVAILABILITYZONE", State: "QUEUED", Entity: photon.Entity{ID: "1"}, } completedTask := &photon.Task{ Operation: "CREATE_AVAILABILITYZONE", State: "COMPLETED", Entity: photon.Entity{ID: "1"}, } response, err := json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected queuedTask") } taskresponse, err := json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completedTask") } server := mocks.NewTestServer() mocks.RegisterResponder( "POST", server.URL+"/availabilityzones", mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskresponse[:]))) defer server.Close() mocks.Activate(true) httpClient := &http.Client{Transport: mocks.DefaultMockTransport} client.Esxclient = photon.NewTestClient(server.URL, nil, httpClient) set := flag.NewFlagSet("test", 0) set.String("name", "fake_availabilityZone", "availability zone name") cxt := cli.NewContext(nil, set, nil) err = createAvailabilityZone(cxt, os.Stdout) if err != nil { t.Error("Not expecting create availability zone to fail: " + err.Error()) } queuedTask = &photon.Task{ Operation: "DELETE_AVAILABILITYZONE", State: "QUEUED", Entity: photon.Entity{ID: "1"}, } completedTask = &photon.Task{ Operation: "DELETE_AVAILABILITYZONE", State: "COMPLETED", Entity: photon.Entity{ID: "1"}, } response, err = json.Marshal(queuedTask) if err != nil { t.Error("Not expecting error serializing expected queuedTask") } taskresponse, err = json.Marshal(completedTask) if err != nil { t.Error("Not expecting error serializing expected completedTask") } mocks.RegisterResponder( "DELETE", server.URL+"/availabilityzones/"+queuedTask.Entity.ID, mocks.CreateResponder(200, string(response[:]))) mocks.RegisterResponder( "GET", server.URL+"/tasks/"+queuedTask.ID, mocks.CreateResponder(200, string(taskresponse[:]))) set = flag.NewFlagSet("test", 0) err = set.Parse([]string{queuedTask.Entity.ID}) if err != nil { t.Error("Not expecting arguments parsing to fail") } cxt = cli.NewContext(nil, set, nil) err = deleteAvailabilityZone(cxt) if err != nil { t.Error("Not expecting delete availabilityzone to fail: " + err.Error()) } }