github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/networking/v1/helpers.go (about) 1 package v1 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/opentelekomcloud/gophertelekomcloud" 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients" 9 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" 10 "github.com/opentelekomcloud/gophertelekomcloud/openstack/common/tags" 11 "github.com/opentelekomcloud/gophertelekomcloud/openstack/networking/v1/eips" 12 "github.com/opentelekomcloud/gophertelekomcloud/openstack/networking/v1/subnets" 13 "github.com/opentelekomcloud/gophertelekomcloud/openstack/networking/v1/vpcs" 14 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 15 ) 16 17 // CreateNetwork - create VPC+Subnet and returns active subnet instance 18 func CreateNetwork(t *testing.T, prefix, az string) *subnets.Subnet { 19 client, err := clients.NewNetworkV1Client() 20 th.AssertNoErr(t, err) 21 vpc, err := vpcs.Create(client, vpcs.CreateOpts{ 22 Name: tools.RandomString(prefix, 4), 23 CIDR: "192.168.0.0/16", 24 }).Extract() 25 th.AssertNoErr(t, err) 26 enableDHCP := true 27 subnet, err := subnets.Create(client, subnets.CreateOpts{ 28 Name: tools.RandomString(prefix, 4), 29 CIDR: "192.168.0.0/24", 30 DNSList: []string{"1.1.1.1", "8.8.8.8"}, 31 GatewayIP: "192.168.0.1", 32 EnableDHCP: &enableDHCP, 33 AvailabilityZone: az, 34 VpcID: vpc.ID, 35 }).Extract() 36 th.AssertNoErr(t, err) 37 38 err = waitForSubnetToBeActive(client, subnet.ID, 300) 39 th.AssertNoErr(t, err) 40 41 return subnet 42 } 43 44 // DeleteNetwork - remove subnet and network 45 func DeleteNetwork(t *testing.T, subnet *subnets.Subnet) { 46 client, err := clients.NewNetworkV1Client() 47 th.AssertNoErr(t, err) 48 49 err = subnets.Delete(client, subnet.VpcID, subnet.ID).ExtractErr() 50 th.AssertNoErr(t, err) 51 err = waitForSubnetToBeDeleted(client, subnet.ID, 300) 52 th.AssertNoErr(t, err) 53 54 err = vpcs.Delete(client, subnet.VpcID).ExtractErr() 55 th.AssertNoErr(t, err) 56 } 57 58 func CreateEip(t *testing.T, client *golangsdk.ServiceClient, bandwidthSize int) *eips.PublicIp { 59 t.Logf("Attempting to create eip/bandwidth") 60 eipCreateOpts := eips.ApplyOpts{ 61 IP: eips.PublicIpOpts{ 62 Type: "5_bgp", 63 }, 64 Bandwidth: eips.BandwidthOpts{ 65 ShareType: "PER", 66 Name: tools.RandomString("acc-band-", 3), 67 Size: bandwidthSize, 68 }, 69 } 70 71 eip, err := eips.Apply(client, eipCreateOpts).Extract() 72 th.AssertNoErr(t, err) 73 74 // wait to be DOWN 75 t.Logf("Waiting for eip %s to be active", eip.ID) 76 err = waitForEipToActive(client, eip.ID, 1200) 77 th.AssertNoErr(t, err) 78 79 newEip, err := eips.Get(client, eip.ID).Extract() 80 th.AssertNoErr(t, err) 81 82 t.Logf("Created eip/bandwidth: %s", newEip.ID) 83 84 return newEip 85 } 86 87 func DeleteEip(t *testing.T, client *golangsdk.ServiceClient, eipID string) { 88 t.Logf("Attempting to delete eip/bandwidth: %s", eipID) 89 90 err := eips.Delete(client, eipID).ExtractErr() 91 th.AssertNoErr(t, err) 92 93 // wait to be deleted 94 t.Logf("Waitting for eip %s to be deleted", eipID) 95 96 err = waitForEipToDelete(client, eipID, 1200) 97 th.AssertNoErr(t, err) 98 99 t.Logf("Deleted eip/bandwidth: %s", eipID) 100 } 101 102 func waitForEipToActive(client *golangsdk.ServiceClient, eipID string, secs int) error { 103 return golangsdk.WaitFor(secs, func() (bool, error) { 104 eip, err := eips.Get(client, eipID).Extract() 105 if err != nil { 106 return false, err 107 } 108 if eip.Status == "DOWN" { 109 return true, nil 110 } 111 112 return false, nil 113 }) 114 } 115 116 func waitForEipToDelete(client *golangsdk.ServiceClient, eipID string, secs int) error { 117 return golangsdk.WaitFor(secs, func() (bool, error) { 118 _, err := eips.Get(client, eipID).Extract() 119 if err != nil { 120 if _, ok := err.(golangsdk.ErrDefault404); ok { 121 return true, nil 122 } 123 return false, err 124 } 125 126 return false, nil 127 }) 128 } 129 130 func createSubnet(t *testing.T, client *golangsdk.ServiceClient, vpcID string) *subnets.Subnet { 131 enableDHCP := true 132 createSubnetOpts := subnets.CreateOpts{ 133 Name: tools.RandomString("acc-subnet-", 3), 134 Description: "some description", 135 CIDR: "192.168.20.0/24", 136 GatewayIP: "192.168.20.1", 137 EnableDHCP: &enableDHCP, 138 VpcID: vpcID, 139 } 140 t.Logf("Attempting to create subnet: %s", createSubnetOpts.Name) 141 142 subnet, err := subnets.Create(client, createSubnetOpts).Extract() 143 th.AssertNoErr(t, err) 144 th.AssertEquals(t, subnet.Description, createSubnetOpts.Description) 145 146 // wait to be active 147 t.Logf("Waitting for subnet %s to be active", subnet.ID) 148 err = waitForSubnetToBeActive(client, subnet.ID, 600) 149 th.AssertNoErr(t, err) 150 t.Logf("Created subnet: %v", subnet.ID) 151 152 return subnet 153 } 154 155 func deleteSubnet(t *testing.T, client *golangsdk.ServiceClient, vpcID string, id string) { 156 t.Logf("Attempting to delete subnet: %s", id) 157 158 err := subnets.Delete(client, vpcID, id).ExtractErr() 159 th.AssertNoErr(t, err) 160 161 t.Logf("Waiting for subnet %s to be deleted", id) 162 err = waitForSubnetToBeDeleted(client, id, 60) 163 th.AssertNoErr(t, err) 164 165 t.Logf("Deleted subnet: %s", id) 166 } 167 168 func waitForSubnetToBeDeleted(client *golangsdk.ServiceClient, subnetID string, secs int) error { 169 return golangsdk.WaitFor(secs, func() (bool, error) { 170 _, err := subnets.Get(client, subnetID).Extract() 171 if err != nil { 172 if _, ok := err.(golangsdk.ErrDefault404); ok { 173 return true, nil 174 } 175 return false, err 176 } 177 178 return false, nil 179 }) 180 } 181 182 func waitForSubnetToBeActive(client *golangsdk.ServiceClient, subnetID string, secs int) error { 183 return golangsdk.WaitFor(secs, func() (bool, error) { 184 n, err := subnets.Get(client, subnetID).Extract() 185 if err != nil { 186 return false, err 187 } 188 189 if n.Status == "ACTIVE" { 190 return true, nil 191 } 192 193 // If subnet status is other than Active, send error 194 if n.Status == "DOWN" || n.Status == "ERROR" { 195 return false, fmt.Errorf("subnet status: '%s'", n.Status) 196 } 197 198 return false, nil 199 }) 200 } 201 202 func createVpc(t *testing.T, client *golangsdk.ServiceClient) *vpcs.Vpc { 203 createOpts := vpcs.CreateOpts{ 204 Name: tools.RandomString("acc-vpc-", 3), 205 CIDR: "192.168.20.0/24", 206 } 207 208 t.Logf("Attempting to create vpc: %s", createOpts.Name) 209 210 vpc, err := vpcs.Create(client, createOpts).Extract() 211 th.AssertNoErr(t, err) 212 t.Logf("Created vpc: %s", vpc.ID) 213 214 return vpc 215 } 216 217 func deleteVpc(t *testing.T, client *golangsdk.ServiceClient, vpcID string) { 218 t.Logf("Attempting to delete vpc: %s", vpcID) 219 220 err := vpcs.Delete(client, vpcID).ExtractErr() 221 th.AssertNoErr(t, err) 222 223 t.Logf("Deleted vpc: %s", vpcID) 224 } 225 226 func createEipTags(t *testing.T, client *golangsdk.ServiceClient, eipID string, eipTags []tags.ResourceTag) { 227 err := tags.Create(client, "publicips", eipID, eipTags).ExtractErr() 228 th.AssertNoErr(t, err) 229 } 230 231 func deleteEipTags(t *testing.T, client *golangsdk.ServiceClient, eipID string, eipTags []tags.ResourceTag) { 232 err := tags.Delete(client, "publicips", eipID, eipTags).ExtractErr() 233 th.AssertNoErr(t, err) 234 }