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

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