Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.
Merged
84 changes: 84 additions & 0 deletions acceptance/clients/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,49 @@ func NewImageServiceV2Client() (*golangsdk.ServiceClient, error) {
})
}

// NewNetworkV1Client returns a *ServiceClient for making calls to the
// OpenStack Networking v1 API. An error will be returned if authentication
// or client creation was not possible.
func NewNetworkV1Client() (*golangsdk.ServiceClient, error) {
ao, err := openstack.AuthOptionsFromEnv()
if err != nil {
return nil, err
}

client, err := openstack.AuthenticatedClient(ao)
if err != nil {
return nil, err
}

return openstack.NewNetworkV1(client, golangsdk.EndpointOpts{
Region: os.Getenv("OS_REGION_NAME"),
})
}

// NewPeerNetworkV1Client returns a *ServiceClient for making calls to the
// OpenStack Networking v1 API for VPC peer. An error will be returned if authentication
// or client creation was not possible.
func NewPeerNetworkV1Client() (*golangsdk.ServiceClient, error) {
ao, err := openstack.AuthOptionsFromEnv()
if err != nil {
return nil, err
}

err = UpdatePeerTenantDetails(&ao)
if err != nil {
return nil, err
}

client, err := openstack.AuthenticatedClient(ao)
if err != nil {
return nil, err
}

return openstack.NewNetworkV1(client, golangsdk.EndpointOpts{
Region: os.Getenv("OS_REGION_NAME"),
})
}

// NewNetworkV2Client returns a *ServiceClient for making calls to the
// OpenStack Networking v2 API. An error will be returned if authentication
// or client creation was not possible.
Expand All @@ -352,6 +395,30 @@ func NewNetworkV2Client() (*golangsdk.ServiceClient, error) {
})
}

// NewPeerNetworkV2Client returns a *ServiceClient for making calls to the
// OpenStack Networking v2 API for Peer. An error will be returned if authentication
// or client creation was not possible.
func NewPeerNetworkV2Client() (*golangsdk.ServiceClient, error) {
ao, err := openstack.AuthOptionsFromEnv()
if err != nil {
return nil, err
}

err = UpdatePeerTenantDetails(&ao)
if err != nil {
return nil, err
}

client, err := openstack.AuthenticatedClient(ao)
if err != nil {
return nil, err
}

return openstack.NewNetworkV2(client, golangsdk.EndpointOpts{
Region: os.Getenv("OS_REGION_NAME"),
})
}

// NewObjectStorageV1Client returns a *ServiceClient for making calls to the
// OpenStack Object Storage v1 API. An error will be returned if authentication
// or client creation was not possible.
Expand Down Expand Up @@ -389,3 +456,20 @@ func NewSharedFileSystemV2Client() (*golangsdk.ServiceClient, error) {
Region: os.Getenv("OS_REGION_NAME"),
})
}

func UpdatePeerTenantDetails(ao *golangsdk.AuthOptions) error {

if peerTenantID := os.Getenv("OS_Peer_Tenant_ID"); peerTenantID != "" {
ao.TenantID = peerTenantID
ao.TenantName = ""
return nil

} else if peerTenantName := os.Getenv("OS_Peer_Tenant_Name"); peerTenantName != "" {
ao.TenantID = ""
ao.TenantName = peerTenantName
return nil

} else {
return fmt.Errorf("You're missing some important setup:\n OS_Peer_Tenant_ID or OS_Peer_Tenant_Name env variables must be provided.")
}
}
86 changes: 86 additions & 0 deletions acceptance/openstack/networking/v1/subnets/subnet.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package subnets

import (
"testing"

"github.com/huaweicloud/golangsdk"
"github.com/huaweicloud/golangsdk/acceptance/tools"
"github.com/huaweicloud/golangsdk/openstack/networking/v1/subnets"
"github.com/huaweicloud/golangsdk/openstack/networking/v1/vpcs"
)

func CreateSubnetNResources(t *testing.T, client *golangsdk.ServiceClient) (*subnets.Subnet, error) {

vpcName := tools.RandomString("TESTACC-", 8)

createOpts := vpcs.CreateOpts{
Name: vpcName,
CIDR: "192.168.20.0/24",
}

t.Logf("Attempting to create vpc: %s", vpcName)

vpc, err := vpcs.Create(client, createOpts).Extract()
if err != nil {
return nil, err
}
t.Logf("Created vpc: %s", vpcName)

subnetName := tools.RandomString("ACPTTEST-", 8)

createSubnetOpts := subnets.CreateOpts{
Name: subnetName,
CIDR: "192.168.20.0/24",
GatewayIP: "192.168.20.1",
EnableDHCP: true,
AvailabilityZone: "eu-de-02",
VPC_ID: vpc.ID,
}

t.Logf("Attempting to create subnet: %s", subnetName)

subnet, err := subnets.Create(client, createSubnetOpts).Extract()
if err != nil {
return subnet, err
}
t.Logf("Created subnet: %v", subnet)

return subnet, nil
}

func DeleteSubnetNResources(t *testing.T, client *golangsdk.ServiceClient, vpcID string, id string) {
t.Logf("Attempting to delete subnet: %s", id)

err := subnets.Delete(client, vpcID, id).ExtractErr()
if err != nil {
t.Fatalf("Error deleting subnet: %v", err)
}

t.Logf("Deleted subnet: %s", id)

if err := WaitForSubnetToDelete(client, id, 60); err != nil {
t.Fatalf("Error deleting subnet: %v", err)
}

t.Logf("Attempting to delete vpc: %s", vpcID)

err = vpcs.Delete(client, vpcID).ExtractErr()
if err != nil {
t.Fatalf("Error deleting vpc: %v", err)
}

t.Logf("Deleted vpc: %s", vpcID)
}

func WaitForSubnetToDelete(client *golangsdk.ServiceClient, subnetID string, secs int) error {
return golangsdk.WaitFor(secs, func() (bool, error) {
_, err := subnets.Get(client, subnetID).Extract()
if err != nil {
if _, ok := err.(golangsdk.ErrDefault404); ok {
return true, nil
}
}

return false, nil
})
}
51 changes: 51 additions & 0 deletions acceptance/openstack/networking/v1/subnets/subnet_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package subnets

import (
"testing"

"github.com/huaweicloud/golangsdk/acceptance/clients"
"github.com/huaweicloud/golangsdk/acceptance/tools"
"github.com/huaweicloud/golangsdk/openstack/networking/v1/subnets"
)

func TestSubnetList(t *testing.T) {
client, err := clients.NewNetworkV1Client()
if err != nil {
t.Fatalf("Unable to create a subnet : %v", err)
}
allPages, err := subnets.List(client, subnets.ListOpts{})
tools.PrintResource(t, allPages)

}

func TestSubnetsCRUD(t *testing.T) {
client, err := clients.NewNetworkV1Client()
if err != nil {
t.Fatalf("Unable to create a subnet : %v", err)
}

// Create a subnet
subnet, err := CreateSubnetNResources(t, client)
if err != nil {
t.Fatalf("Unable to create subnet: %v", err)
}

// Delete a subnet
defer DeleteSubnetNResources(t, client, subnet.VPC_ID, subnet.ID)
tools.PrintResource(t, subnet)

// Update a subnet
newName := tools.RandomString("ACPTTEST-", 8)
updateOpts := &subnets.UpdateOpts{
Name: newName,
}
_, err = subnets.Update(client, subnet.VPC_ID, subnet.ID, updateOpts).Extract()

// Query a subnet
newSubnet, err := subnets.Get(client, subnet.ID).Extract()
if err != nil {
t.Fatalf("Unable to retrieve subnet: %v", err)
}

tools.PrintResource(t, newSubnet)
}
40 changes: 40 additions & 0 deletions acceptance/openstack/networking/v1/vpc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package v1

import (
"testing"

"github.com/huaweicloud/golangsdk"
"github.com/huaweicloud/golangsdk/acceptance/tools"
"github.com/huaweicloud/golangsdk/openstack/networking/v1/vpcs"
)

func CreateVpc(t *testing.T, client *golangsdk.ServiceClient) (*vpcs.Vpc, error) {

vpcName := tools.RandomString("TESTACC-", 8)

createOpts := vpcs.CreateOpts{
Name: vpcName,
CIDR: "192.168.20.0/24",
}

t.Logf("Attempting to create vpc: %s", vpcName)

vpc, err := vpcs.Create(client, createOpts).Extract()
if err != nil {
return vpc, err
}
t.Logf("Created vpc: %s", vpcName)

return vpc, nil
}

func DeleteVpc(t *testing.T, client *golangsdk.ServiceClient, vpcID string) {
t.Logf("Attempting to delete vpc: %s", vpcID)

err := vpcs.Delete(client, vpcID).ExtractErr()
if err != nil {
t.Fatalf("Error deleting vpc: %v", err)
}

t.Logf("Deleted vpc: %s", vpcID)
}
58 changes: 58 additions & 0 deletions acceptance/openstack/networking/v1/vpcs_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package v1

import (
"testing"

"github.com/huaweicloud/golangsdk/acceptance/clients"
"github.com/huaweicloud/golangsdk/acceptance/tools"
"github.com/huaweicloud/golangsdk/openstack/networking/v1/vpcs"
)

func TestVpcList(t *testing.T) {
client, err := clients.NewNetworkV1Client()
if err != nil {
t.Fatalf("Unable to create a vpc client: %v", err)
}

listOpts := vpcs.ListOpts{}
allVpcs, err := vpcs.List(client, listOpts)
if err != nil {
t.Fatalf("Unable to list vpcs: %v", err)
}
for _, vpc := range allVpcs {
tools.PrintResource(t, vpc)
}
}

func TestVpcsCRUD(t *testing.T) {
client, err := clients.NewNetworkV1Client()
if err != nil {
t.Fatalf("Unable to create a vpc client: %v", err)
}

// Create a vpc
vpc, err := CreateVpc(t, client)
if err != nil {
t.Fatalf("Unable to create create: %v", err)
}
defer DeleteVpc(t, client, vpc.ID)

tools.PrintResource(t, vpc)

newName := tools.RandomString("TESTACC-", 8)
updateOpts := &vpcs.UpdateOpts{
Name: newName,
}

_, err = vpcs.Update(client, vpc.ID, updateOpts).Extract()
if err != nil {
t.Fatalf("Unable to update vpc: %v", err)
}

newVpc, err := vpcs.Get(client, vpc.ID).Extract()
if err != nil {
t.Fatalf("Unable to retrieve vpc: %v", err)
}

tools.PrintResource(t, newVpc)
}
Loading