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  }