vpcs_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package ecs
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/denverdino/aliyungo/common"
  6. )
  7. func TestVPCCreationAndDeletion(t *testing.T) {
  8. client := NewTestClient()
  9. instance, err := client.DescribeInstanceAttribute(TestInstanceId)
  10. if err != nil {
  11. t.Fatalf("Failed to describe instance %s: %v", TestInstanceId, err)
  12. }
  13. //client.SetDebug(true)
  14. regionId := instance.RegionId
  15. zoneId := instance.ZoneId
  16. args := CreateVpcArgs{
  17. RegionId: regionId,
  18. VpcName: "My_AliyunGO_test_VPC",
  19. Description: "My AliyunGO test VPC",
  20. CidrBlock: "172.16.0.0/16",
  21. ClientToken: client.GenerateClientToken(),
  22. }
  23. resp, err := client.CreateVpc(&args)
  24. if err != nil {
  25. t.Fatalf("Failed to create VPC: %v", err)
  26. }
  27. t.Logf("VPC is created successfully: %++v", resp)
  28. vpcId := resp.VpcId
  29. newName := args.VpcName + "_update"
  30. newDesc := args.Description + "_update"
  31. modifyArgs := ModifyVpcAttributeArgs{
  32. VpcId: vpcId,
  33. VpcName: newName,
  34. Description: newDesc,
  35. }
  36. err = client.ModifyVpcAttribute(&modifyArgs)
  37. if err != nil {
  38. t.Errorf("Failed to modify VPC: %v", err)
  39. }
  40. describeArgs := DescribeVpcsArgs{
  41. VpcId: vpcId,
  42. RegionId: regionId,
  43. }
  44. vpcs, _, err := client.DescribeVpcs(&describeArgs)
  45. if err != nil {
  46. t.Errorf("Failed to describe VPCs: %v", err)
  47. }
  48. t.Logf("VPCs: %++v", vpcs)
  49. if vpcs[0].VpcName != newName {
  50. t.Errorf("Failed to modify VPC with new name: %s", newName)
  51. }
  52. err = client.WaitForVpcAvailable(regionId, vpcId, 60)
  53. if err != nil {
  54. t.Errorf("Failed to wait VPC to available: %v", err)
  55. }
  56. _testECSSecurityGroupCreationAndDeletion(t, client, regionId, vpcId)
  57. //Test VSwitch
  58. vSwitchId, err := testCreateVSwitch(t, client, regionId, zoneId, vpcId, resp.VRouterId)
  59. if err != nil {
  60. t.Errorf("Failed to create VSwitch: %v", err)
  61. } else {
  62. if TestIAmRich {
  63. instanceId, sgId, err := testCreateInstanceVpc(t, client, regionId, vpcId, vSwitchId, instance.ImageId)
  64. if err == nil {
  65. testEipAddress(t, client, regionId, instanceId)
  66. //Test VRouter
  67. testVRouter(t, client, regionId, vpcId, resp.VRouterId, instanceId)
  68. }
  69. if instanceId != "" {
  70. err = client.StopInstance(instanceId, true)
  71. if err != nil {
  72. t.Errorf("Failed to stop instance %s: %v", instanceId, err)
  73. } else {
  74. err = client.WaitForInstance(instanceId, Stopped, 0)
  75. if err != nil {
  76. t.Errorf("Instance %s is failed to stop: %v", instanceId, err)
  77. }
  78. t.Logf("Instance %s is stopped successfully.", instanceId)
  79. }
  80. err = client.DeleteInstance(instanceId)
  81. if err != nil {
  82. t.Errorf("Failed to delete instance %s: %v", instanceId, err)
  83. } else {
  84. t.Logf("Instance %s is deleted successfully.", instanceId)
  85. }
  86. }
  87. if sgId != "" {
  88. //Wait the instance deleted completedly
  89. time.Sleep(10 * time.Second)
  90. err = client.DeleteSecurityGroup(regionId, sgId)
  91. if err != nil {
  92. t.Fatalf("Failed to delete security group %s: %v", sgId, err)
  93. }
  94. t.Logf("Security group %s is deleted successfully.", sgId)
  95. }
  96. }
  97. }
  98. if vSwitchId != "" {
  99. err = client.DeleteVSwitch(vSwitchId)
  100. if err != nil {
  101. t.Fatalf("Failed to delete VSwitch: %v", err)
  102. }
  103. t.Logf("VSwitch %s is deleted successfully.", vSwitchId)
  104. }
  105. time.Sleep(20 * time.Second)
  106. err = client.DeleteVpc(vpcId)
  107. if err != nil {
  108. t.Errorf("Failed to delete VPC: %v", err)
  109. }
  110. t.Logf("VPC %s is deleted successfully.", vpcId)
  111. }
  112. func testCreateInstanceVpc(t *testing.T, client *Client, regionId common.Region, vpcId string, vswitchId, imageId string) (instanceId string, sgId string, err error) {
  113. sgName := "test-security-group"
  114. args := CreateSecurityGroupArgs{
  115. RegionId: regionId,
  116. VpcId: vpcId,
  117. SecurityGroupName: sgName,
  118. }
  119. sgId, err = client.CreateSecurityGroup(&args)
  120. if err != nil {
  121. t.Errorf("Failed to create security group %s: %v", sgName, err)
  122. return "", "", err
  123. }
  124. createArgs := CreateInstanceArgs{
  125. RegionId: regionId,
  126. ImageId: imageId,
  127. InstanceType: "ecs.t1.small",
  128. SecurityGroupId: sgId,
  129. VSwitchId: vswitchId,
  130. }
  131. instanceId, err = client.CreateInstance(&createArgs)
  132. if err != nil {
  133. t.Errorf("Failed to create instance from Image %s: %v", imageId, err)
  134. return "", sgId, err
  135. }
  136. t.Logf("Instance %s is created successfully.", instanceId)
  137. instance, err := client.DescribeInstanceAttribute(instanceId)
  138. t.Logf("Instance: %++v %v", instance, err)
  139. err = client.WaitForInstance(instanceId, Stopped, 0)
  140. err = client.StartInstance(instanceId)
  141. if err != nil {
  142. t.Errorf("Failed to start instance %s: %v", instanceId, err)
  143. return instanceId, sgId, err
  144. }
  145. err = client.WaitForInstance(instanceId, Running, 0)
  146. return instanceId, sgId, err
  147. }