github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/networking/v2/networks_test.go (about)

     1  //go:build acceptance || networking || networks
     2  
     3  package v2
     4  
     5  import (
     6  	"context"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/external"
    13  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/portsecurity"
    14  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks"
    15  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    16  )
    17  
    18  func TestNetworksExternalList(t *testing.T) {
    19  	client, err := clients.NewNetworkV2Client()
    20  	th.AssertNoErr(t, err)
    21  
    22  	choices, err := clients.AcceptanceTestChoicesFromEnv()
    23  	th.AssertNoErr(t, err)
    24  
    25  	type networkWithExt struct {
    26  		networks.Network
    27  		external.NetworkExternalExt
    28  	}
    29  
    30  	var allNetworks []networkWithExt
    31  
    32  	iTrue := true
    33  	networkListOpts := networks.ListOpts{
    34  		ID: choices.ExternalNetworkID,
    35  	}
    36  	listOpts := external.ListOptsExt{
    37  		ListOptsBuilder: networkListOpts,
    38  		External:        &iTrue,
    39  	}
    40  
    41  	allPages, err := networks.List(client, listOpts).AllPages(context.TODO())
    42  	th.AssertNoErr(t, err)
    43  
    44  	err = networks.ExtractNetworksInto(allPages, &allNetworks)
    45  	th.AssertNoErr(t, err)
    46  
    47  	var found bool
    48  	for _, network := range allNetworks {
    49  		if network.External == true && network.ID == choices.ExternalNetworkID {
    50  			found = true
    51  		}
    52  	}
    53  
    54  	th.AssertEquals(t, found, true)
    55  
    56  	iFalse := false
    57  	networkListOpts = networks.ListOpts{
    58  		ID: choices.ExternalNetworkID,
    59  	}
    60  	listOpts = external.ListOptsExt{
    61  		ListOptsBuilder: networkListOpts,
    62  		External:        &iFalse,
    63  	}
    64  
    65  	allPages, err = networks.List(client, listOpts).AllPages(context.TODO())
    66  	th.AssertNoErr(t, err)
    67  
    68  	v, err := networks.ExtractNetworks(allPages)
    69  	th.AssertNoErr(t, err)
    70  	th.AssertEquals(t, len(v), 0)
    71  }
    72  
    73  func TestNetworksCRUD(t *testing.T) {
    74  	client, err := clients.NewNetworkV2Client()
    75  	th.AssertNoErr(t, err)
    76  
    77  	// Create a network
    78  	network, err := CreateNetwork(t, client)
    79  	th.AssertNoErr(t, err)
    80  	defer DeleteNetwork(t, client, network.ID)
    81  
    82  	tools.PrintResource(t, network)
    83  
    84  	newName := tools.RandomString("TESTACC-", 8)
    85  	newDescription := ""
    86  	updateOpts := &networks.UpdateOpts{
    87  		Name:        &newName,
    88  		Description: &newDescription,
    89  	}
    90  
    91  	_, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract()
    92  	th.AssertNoErr(t, err)
    93  
    94  	newNetwork, err := networks.Get(context.TODO(), client, network.ID).Extract()
    95  	th.AssertNoErr(t, err)
    96  
    97  	tools.PrintResource(t, newNetwork)
    98  	th.AssertEquals(t, newNetwork.Name, newName)
    99  	th.AssertEquals(t, newNetwork.Description, newDescription)
   100  
   101  	type networkWithExt struct {
   102  		networks.Network
   103  		portsecurity.PortSecurityExt
   104  	}
   105  
   106  	var allNetworks []networkWithExt
   107  
   108  	allPages, err := networks.List(client, nil).AllPages(context.TODO())
   109  	th.AssertNoErr(t, err)
   110  
   111  	err = networks.ExtractNetworksInto(allPages, &allNetworks)
   112  	th.AssertNoErr(t, err)
   113  
   114  	var found bool
   115  	for _, network := range allNetworks {
   116  		if network.ID == newNetwork.ID {
   117  			found = true
   118  		}
   119  	}
   120  
   121  	th.AssertEquals(t, found, true)
   122  }
   123  
   124  func TestNetworksPortSecurityCRUD(t *testing.T) {
   125  	client, err := clients.NewNetworkV2Client()
   126  	th.AssertNoErr(t, err)
   127  
   128  	// Create a network without port security
   129  	network, err := CreateNetworkWithoutPortSecurity(t, client)
   130  	if err != nil {
   131  		t.Fatalf("Unable to create network: %v", err)
   132  	}
   133  	defer DeleteNetwork(t, client, network.ID)
   134  
   135  	var networkWithExtensions struct {
   136  		networks.Network
   137  		portsecurity.PortSecurityExt
   138  	}
   139  
   140  	err = networks.Get(context.TODO(), client, network.ID).ExtractInto(&networkWithExtensions)
   141  	th.AssertNoErr(t, err)
   142  
   143  	tools.PrintResource(t, networkWithExtensions)
   144  
   145  	iTrue := true
   146  	networkUpdateOpts := networks.UpdateOpts{}
   147  	updateOpts := portsecurity.NetworkUpdateOptsExt{
   148  		UpdateOptsBuilder:   networkUpdateOpts,
   149  		PortSecurityEnabled: &iTrue,
   150  	}
   151  
   152  	err = networks.Update(context.TODO(), client, network.ID, updateOpts).ExtractInto(&networkWithExtensions)
   153  	th.AssertNoErr(t, err)
   154  
   155  	tools.PrintResource(t, networkWithExtensions)
   156  }
   157  
   158  func TestNetworksRevision(t *testing.T) {
   159  	client, err := clients.NewNetworkV2Client()
   160  	th.AssertNoErr(t, err)
   161  
   162  	// Create a network
   163  	network, err := CreateNetwork(t, client)
   164  	th.AssertNoErr(t, err)
   165  	defer DeleteNetwork(t, client, network.ID)
   166  
   167  	tools.PrintResource(t, network)
   168  
   169  	// Store the current revision number.
   170  	oldRevisionNumber := network.RevisionNumber
   171  
   172  	// Update the network without revision number.
   173  	// This should work.
   174  	newName := tools.RandomString("TESTACC-", 8)
   175  	newDescription := ""
   176  	updateOpts := &networks.UpdateOpts{
   177  		Name:        &newName,
   178  		Description: &newDescription,
   179  	}
   180  	network, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract()
   181  	th.AssertNoErr(t, err)
   182  
   183  	tools.PrintResource(t, network)
   184  
   185  	// This should fail due to an old revision number.
   186  	newDescription = "new description"
   187  	updateOpts = &networks.UpdateOpts{
   188  		Name:           &newName,
   189  		Description:    &newDescription,
   190  		RevisionNumber: &oldRevisionNumber,
   191  	}
   192  	_, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract()
   193  	th.AssertErr(t, err)
   194  	if !strings.Contains(err.Error(), "RevisionNumberConstraintFailed") {
   195  		t.Fatalf("expected to see an error of type RevisionNumberConstraintFailed, but got the following error instead: %v", err)
   196  	}
   197  
   198  	// Reread the network to show that it did not change.
   199  	network, err = networks.Get(context.TODO(), client, network.ID).Extract()
   200  	th.AssertNoErr(t, err)
   201  
   202  	tools.PrintResource(t, network)
   203  
   204  	// This should work because now we do provide a valid revision number.
   205  	newDescription = "new description"
   206  	updateOpts = &networks.UpdateOpts{
   207  		Name:           &newName,
   208  		Description:    &newDescription,
   209  		RevisionNumber: &network.RevisionNumber,
   210  	}
   211  	network, err = networks.Update(context.TODO(), client, network.ID, updateOpts).Extract()
   212  	th.AssertNoErr(t, err)
   213  
   214  	tools.PrintResource(t, network)
   215  
   216  	th.AssertEquals(t, network.Name, newName)
   217  	th.AssertEquals(t, network.Description, newDescription)
   218  }