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 }