github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/extensions.go (about)

     1  package extensions
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/gophercloud/gophercloud"
     7  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
     8  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external"
     9  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups"
    10  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules"
    11  	"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
    12  	"github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  // CreateExternalNetwork will create an external network. An error will be
    17  // returned if the creation failed.
    18  func CreateExternalNetwork(t *testing.T, client *gophercloud.ServiceClient) (*networks.Network, error) {
    19  	networkName := tools.RandomString("TESTACC-", 8)
    20  	networkDescription := tools.RandomString("TESTACC-DESC-", 8)
    21  
    22  	t.Logf("Attempting to create external network: %s", networkName)
    23  
    24  	adminStateUp := true
    25  	isExternal := true
    26  
    27  	networkCreateOpts := networks.CreateOpts{
    28  		Name:         networkName,
    29  		Description:  networkDescription,
    30  		AdminStateUp: &adminStateUp,
    31  	}
    32  
    33  	createOpts := external.CreateOptsExt{
    34  		CreateOptsBuilder: networkCreateOpts,
    35  		External:          &isExternal,
    36  	}
    37  
    38  	network, err := networks.Create(client, createOpts).Extract()
    39  	if err != nil {
    40  		return network, err
    41  	}
    42  
    43  	t.Logf("Created external network: %s", networkName)
    44  
    45  	th.AssertEquals(t, network.Name, networkName)
    46  	th.AssertEquals(t, network.Description, networkDescription)
    47  
    48  	return network, nil
    49  }
    50  
    51  // CreatePortWithSecurityGroup will create a port with a security group
    52  // attached. An error will be returned if the port could not be created.
    53  func CreatePortWithSecurityGroup(t *testing.T, client *gophercloud.ServiceClient, networkID, subnetID, secGroupID string) (*ports.Port, error) {
    54  	portName := tools.RandomString("TESTACC-", 8)
    55  	portDescription := tools.RandomString("TESTACC-DESC-", 8)
    56  	iFalse := false
    57  
    58  	t.Logf("Attempting to create port: %s", portName)
    59  
    60  	createOpts := ports.CreateOpts{
    61  		NetworkID:      networkID,
    62  		Name:           portName,
    63  		Description:    portDescription,
    64  		AdminStateUp:   &iFalse,
    65  		FixedIPs:       []ports.IP{{SubnetID: subnetID}},
    66  		SecurityGroups: &[]string{secGroupID},
    67  	}
    68  
    69  	port, err := ports.Create(client, createOpts).Extract()
    70  	if err != nil {
    71  		return port, err
    72  	}
    73  
    74  	t.Logf("Successfully created port: %s", portName)
    75  
    76  	th.AssertEquals(t, port.Name, portName)
    77  	th.AssertEquals(t, port.Description, portDescription)
    78  	th.AssertEquals(t, port.NetworkID, networkID)
    79  
    80  	return port, nil
    81  }
    82  
    83  // CreateSecurityGroup will create a security group with a random name.
    84  // An error will be returned if one was failed to be created.
    85  func CreateSecurityGroup(t *testing.T, client *gophercloud.ServiceClient) (*groups.SecGroup, error) {
    86  	secGroupName := tools.RandomString("TESTACC-", 8)
    87  	secGroupDescription := tools.RandomString("TESTACC-DESC-", 8)
    88  
    89  	t.Logf("Attempting to create security group: %s", secGroupName)
    90  
    91  	createOpts := groups.CreateOpts{
    92  		Name:        secGroupName,
    93  		Description: secGroupDescription,
    94  	}
    95  
    96  	secGroup, err := groups.Create(client, createOpts).Extract()
    97  	if err != nil {
    98  		return secGroup, err
    99  	}
   100  
   101  	t.Logf("Created security group: %s", secGroup.ID)
   102  
   103  	th.AssertEquals(t, secGroup.Name, secGroupName)
   104  	th.AssertEquals(t, secGroup.Description, secGroupDescription)
   105  
   106  	return secGroup, nil
   107  }
   108  
   109  // CreateSecurityGroupRule will create a security group rule with a random name
   110  // and random port between 80 and 99.
   111  // An error will be returned if one was failed to be created.
   112  func CreateSecurityGroupRule(t *testing.T, client *gophercloud.ServiceClient, secGroupID string) (*rules.SecGroupRule, error) {
   113  	t.Logf("Attempting to create security group rule in group: %s", secGroupID)
   114  
   115  	description := "Rule description"
   116  	fromPort := tools.RandomInt(80, 89)
   117  	toPort := tools.RandomInt(90, 99)
   118  
   119  	createOpts := rules.CreateOpts{
   120  		Description:  description,
   121  		Direction:    "ingress",
   122  		EtherType:    "IPv4",
   123  		SecGroupID:   secGroupID,
   124  		PortRangeMin: fromPort,
   125  		PortRangeMax: toPort,
   126  		Protocol:     rules.ProtocolTCP,
   127  	}
   128  
   129  	rule, err := rules.Create(client, createOpts).Extract()
   130  	if err != nil {
   131  		return rule, err
   132  	}
   133  
   134  	t.Logf("Created security group rule: %s", rule.ID)
   135  
   136  	th.AssertEquals(t, rule.SecGroupID, secGroupID)
   137  	th.AssertEquals(t, rule.Description, description)
   138  
   139  	return rule, nil
   140  }
   141  
   142  // DeleteSecurityGroup will delete a security group of a specified ID.
   143  // A fatal error will occur if the deletion failed. This works best as a
   144  // deferred function
   145  func DeleteSecurityGroup(t *testing.T, client *gophercloud.ServiceClient, secGroupID string) {
   146  	t.Logf("Attempting to delete security group: %s", secGroupID)
   147  
   148  	err := groups.Delete(client, secGroupID).ExtractErr()
   149  	if err != nil {
   150  		t.Fatalf("Unable to delete security group: %v", err)
   151  	}
   152  }
   153  
   154  // DeleteSecurityGroupRule will delete a security group rule of a specified ID.
   155  // A fatal error will occur if the deletion failed. This works best as a
   156  // deferred function
   157  func DeleteSecurityGroupRule(t *testing.T, client *gophercloud.ServiceClient, ruleID string) {
   158  	t.Logf("Attempting to delete security group rule: %s", ruleID)
   159  
   160  	err := rules.Delete(client, ruleID).ExtractErr()
   161  	if err != nil {
   162  		t.Fatalf("Unable to delete security group rule: %v", err)
   163  	}
   164  }