blob: 97850ee06bd359091b4de2e0f258c62514235f3a [file] [log] [blame]
package extensions
import (
"testing"
"github.com/gophercloud/gophercloud"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/acceptance/tools"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/networking/v2/extensions/external"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/networking/v2/extensions/security/groups"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/networking/v2/extensions/security/rules"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/networking/v2/networks"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/networking/v2/ports"
)
// CreateExternalNetwork will create an external network. An error will be
// returned if the creation failed.
func CreateExternalNetwork(t *testing.T, client *gophercloud.ServiceClient) (*networks.Network, error) {
networkName := tools.RandomString("TESTACC-", 8)
t.Logf("Attempting to create external network: %s", networkName)
adminStateUp := true
isExternal := true
createOpts := external.CreateOpts{
External: &isExternal,
}
createOpts.Name = networkName
createOpts.AdminStateUp = &adminStateUp
network, err := networks.Create(client, createOpts).Extract()
if err != nil {
return network, err
}
t.Logf("Created external network: %s", networkName)
return network, nil
}
// CreatePortWithSecurityGroup will create a port with a security group
// attached. An error will be returned if the port could not be created.
func CreatePortWithSecurityGroup(t *testing.T, client *gophercloud.ServiceClient, networkID, subnetID, secGroupID string) (*ports.Port, error) {
portName := tools.RandomString("TESTACC-", 8)
iFalse := false
t.Logf("Attempting to create port: %s", portName)
createOpts := ports.CreateOpts{
NetworkID: networkID,
Name: portName,
AdminStateUp: &iFalse,
FixedIPs: []ports.IP{ports.IP{SubnetID: subnetID}},
SecurityGroups: []string{secGroupID},
}
port, err := ports.Create(client, createOpts).Extract()
if err != nil {
return port, err
}
t.Logf("Successfully created port: %s", portName)
return port, nil
}
// CreateSecurityGroup will create a security group with a random name.
// An error will be returned if one was failed to be created.
func CreateSecurityGroup(t *testing.T, client *gophercloud.ServiceClient) (*groups.SecGroup, error) {
secGroupName := tools.RandomString("TESTACC-", 8)
t.Logf("Attempting to create security group: %s", secGroupName)
createOpts := groups.CreateOpts{
Name: secGroupName,
}
secGroup, err := groups.Create(client, createOpts).Extract()
if err != nil {
return secGroup, err
}
t.Logf("Created security group: %s", secGroup.ID)
return secGroup, nil
}
// CreateSecurityGroupRule will create a security group rule with a random name
// and random port between 80 and 99.
// An error will be returned if one was failed to be created.
func CreateSecurityGroupRule(t *testing.T, client *gophercloud.ServiceClient, secGroupID string) (*rules.SecGroupRule, error) {
t.Logf("Attempting to create security group rule in group: %s", secGroupID)
fromPort := tools.RandomInt(80, 89)
toPort := tools.RandomInt(90, 99)
createOpts := rules.CreateOpts{
Direction: "ingress",
EtherType: "IPv4",
SecGroupID: secGroupID,
PortRangeMin: fromPort,
PortRangeMax: toPort,
Protocol: rules.ProtocolTCP,
}
rule, err := rules.Create(client, createOpts).Extract()
if err != nil {
return rule, err
}
t.Logf("Created security group rule: %s", rule.ID)
return rule, nil
}
// DeleteSecurityGroup will delete a security group of a specified ID.
// A fatal error will occur if the deletion failed. This works best as a
// deferred function
func DeleteSecurityGroup(t *testing.T, client *gophercloud.ServiceClient, secGroupID string) {
t.Logf("Attempting to delete security group: %s", secGroupID)
err := groups.Delete(client, secGroupID).ExtractErr()
if err != nil {
t.Fatalf("Unable to delete security group: %v", err)
}
}
// DeleteSecurityGroupRule will delete a security group rule of a specified ID.
// A fatal error will occur if the deletion failed. This works best as a
// deferred function
func DeleteSecurityGroupRule(t *testing.T, client *gophercloud.ServiceClient, ruleID string) {
t.Logf("Attempting to delete security group rule: %s", ruleID)
err := rules.Delete(client, ruleID).ExtractErr()
if err != nil {
t.Fatalf("Unable to delete security group rule: %v", err)
}
}