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

     1  //go:build acceptance || networking || layer3 || router
     2  // +build acceptance networking layer3 router
     3  
     4  package layer3
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	networking "github.com/gophercloud/gophercloud/internal/acceptance/openstack/networking/v2"
    11  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    12  	"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers"
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  func TestLayer3RouterCreateDelete(t *testing.T) {
    17  	client, err := clients.NewNetworkV2Client()
    18  	th.AssertNoErr(t, err)
    19  
    20  	network, err := networking.CreateNetwork(t, client)
    21  	th.AssertNoErr(t, err)
    22  	defer networking.DeleteNetwork(t, client, network.ID)
    23  
    24  	router, err := CreateRouter(t, client, network.ID)
    25  	th.AssertNoErr(t, err)
    26  	defer DeleteRouter(t, client, router.ID)
    27  
    28  	tools.PrintResource(t, router)
    29  
    30  	newName := tools.RandomString("TESTACC-", 8)
    31  	newDescription := ""
    32  	updateOpts := routers.UpdateOpts{
    33  		Name:        newName,
    34  		Description: &newDescription,
    35  	}
    36  
    37  	_, err = routers.Update(client, router.ID, updateOpts).Extract()
    38  	th.AssertNoErr(t, err)
    39  
    40  	newRouter, err := routers.Get(client, router.ID).Extract()
    41  	th.AssertNoErr(t, err)
    42  
    43  	tools.PrintResource(t, newRouter)
    44  	th.AssertEquals(t, newRouter.Name, newName)
    45  	th.AssertEquals(t, newRouter.Description, newDescription)
    46  
    47  	listOpts := routers.ListOpts{}
    48  	allPages, err := routers.List(client, listOpts).AllPages()
    49  	th.AssertNoErr(t, err)
    50  
    51  	allRouters, err := routers.ExtractRouters(allPages)
    52  	th.AssertNoErr(t, err)
    53  
    54  	var found bool
    55  	for _, router := range allRouters {
    56  		if router.ID == newRouter.ID {
    57  			found = true
    58  		}
    59  	}
    60  
    61  	th.AssertEquals(t, found, true)
    62  }
    63  
    64  func TestLayer3ExternalRouterCreateDelete(t *testing.T) {
    65  	clients.RequireAdmin(t)
    66  
    67  	client, err := clients.NewNetworkV2Client()
    68  	th.AssertNoErr(t, err)
    69  
    70  	router, err := CreateExternalRouter(t, client)
    71  	th.AssertNoErr(t, err)
    72  	defer DeleteRouter(t, client, router.ID)
    73  
    74  	tools.PrintResource(t, router)
    75  
    76  	efi := []routers.ExternalFixedIP{}
    77  	for _, extIP := range router.GatewayInfo.ExternalFixedIPs {
    78  		efi = append(efi,
    79  			routers.ExternalFixedIP{
    80  				IPAddress: extIP.IPAddress,
    81  				SubnetID:  extIP.SubnetID,
    82  			},
    83  		)
    84  	}
    85  	// Add a new external router IP
    86  	efi = append(efi,
    87  		routers.ExternalFixedIP{
    88  			SubnetID: router.GatewayInfo.ExternalFixedIPs[0].SubnetID,
    89  		},
    90  	)
    91  
    92  	enableSNAT := true
    93  	gatewayInfo := routers.GatewayInfo{
    94  		NetworkID:        router.GatewayInfo.NetworkID,
    95  		EnableSNAT:       &enableSNAT,
    96  		ExternalFixedIPs: efi,
    97  	}
    98  
    99  	newName := tools.RandomString("TESTACC-", 8)
   100  	newDescription := ""
   101  	updateOpts := routers.UpdateOpts{
   102  		Name:        newName,
   103  		Description: &newDescription,
   104  		GatewayInfo: &gatewayInfo,
   105  	}
   106  
   107  	_, err = routers.Update(client, router.ID, updateOpts).Extract()
   108  	th.AssertNoErr(t, err)
   109  
   110  	newRouter, err := routers.Get(client, router.ID).Extract()
   111  	th.AssertNoErr(t, err)
   112  
   113  	tools.PrintResource(t, newRouter)
   114  	th.AssertEquals(t, newRouter.Name, newName)
   115  	th.AssertEquals(t, newRouter.Description, newDescription)
   116  	th.AssertEquals(t, *newRouter.GatewayInfo.EnableSNAT, enableSNAT)
   117  	th.AssertDeepEquals(t, newRouter.GatewayInfo.ExternalFixedIPs, efi)
   118  
   119  	// Test Gateway removal
   120  	updateOpts = routers.UpdateOpts{
   121  		GatewayInfo: &routers.GatewayInfo{},
   122  	}
   123  
   124  	newRouter, err = routers.Update(client, router.ID, updateOpts).Extract()
   125  	th.AssertNoErr(t, err)
   126  	th.AssertDeepEquals(t, newRouter.GatewayInfo, routers.GatewayInfo{})
   127  
   128  }
   129  
   130  func TestLayer3RouterInterface(t *testing.T) {
   131  	clients.RequireAdmin(t)
   132  
   133  	client, err := clients.NewNetworkV2Client()
   134  	th.AssertNoErr(t, err)
   135  
   136  	// Create Network
   137  	network, err := networking.CreateNetwork(t, client)
   138  	th.AssertNoErr(t, err)
   139  	defer networking.DeleteNetwork(t, client, network.ID)
   140  
   141  	subnet, err := networking.CreateSubnet(t, client, network.ID)
   142  	th.AssertNoErr(t, err)
   143  	defer networking.DeleteSubnet(t, client, subnet.ID)
   144  
   145  	tools.PrintResource(t, subnet)
   146  
   147  	router, err := CreateExternalRouter(t, client)
   148  	th.AssertNoErr(t, err)
   149  	defer DeleteRouter(t, client, router.ID)
   150  
   151  	aiOpts := routers.AddInterfaceOpts{
   152  		SubnetID: subnet.ID,
   153  	}
   154  
   155  	iface, err := routers.AddInterface(client, router.ID, aiOpts).Extract()
   156  	th.AssertNoErr(t, err)
   157  
   158  	tools.PrintResource(t, router)
   159  	tools.PrintResource(t, iface)
   160  
   161  	riOpts := routers.RemoveInterfaceOpts{
   162  		SubnetID: subnet.ID,
   163  	}
   164  
   165  	_, err = routers.RemoveInterface(client, router.ID, riOpts).Extract()
   166  	th.AssertNoErr(t, err)
   167  }
   168  
   169  func TestLayer3RouterAgents(t *testing.T) {
   170  	t.Skip("TestLayer3RouterAgents needs to be re-worked to work with both ML2/OVS and OVN")
   171  	clients.RequireAdmin(t)
   172  
   173  	client, err := clients.NewNetworkV2Client()
   174  	th.AssertNoErr(t, err)
   175  
   176  	network, err := networking.CreateNetwork(t, client)
   177  	th.AssertNoErr(t, err)
   178  	defer networking.DeleteNetwork(t, client, network.ID)
   179  
   180  	router, err := CreateRouter(t, client, network.ID)
   181  	th.AssertNoErr(t, err)
   182  	defer DeleteRouter(t, client, router.ID)
   183  
   184  	tools.PrintResource(t, router)
   185  
   186  	newName := tools.RandomString("TESTACC-", 8)
   187  	newDescription := ""
   188  	updateOpts := routers.UpdateOpts{
   189  		Name:        newName,
   190  		Description: &newDescription,
   191  	}
   192  
   193  	_, err = routers.Update(client, router.ID, updateOpts).Extract()
   194  	th.AssertNoErr(t, err)
   195  
   196  	_, err = routers.Get(client, router.ID).Extract()
   197  	th.AssertNoErr(t, err)
   198  
   199  	// Test ListL3Agents for HA or not HA router
   200  	l3AgentsPages, err := routers.ListL3Agents(client, router.ID).AllPages()
   201  	th.AssertNoErr(t, err)
   202  	l3Agents, err := routers.ExtractL3Agents(l3AgentsPages)
   203  	th.AssertNoErr(t, err)
   204  
   205  	tools.PrintResource(t, l3Agents)
   206  
   207  	var found bool
   208  	for _, agent := range l3Agents {
   209  		if agent.Binary == "neutron-l3-agent" {
   210  			found = true
   211  		}
   212  	}
   213  
   214  	th.AssertEquals(t, found, true)
   215  }