github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/layer3/l3_scheduling_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/common/extensions" 13 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/agents" 14 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers" 15 th "github.com/gophercloud/gophercloud/testhelper" 16 ) 17 18 func TestLayer3RouterScheduling(t *testing.T) { 19 client, err := clients.NewNetworkV2Client() 20 th.AssertNoErr(t, err) 21 22 _, err = extensions.Get(client, "l3_agent_scheduler").Extract() 23 if err != nil { 24 t.Skip("Extension l3_agent_scheduler not present") 25 } 26 27 network, err := networking.CreateNetwork(t, client) 28 th.AssertNoErr(t, err) 29 defer networking.DeleteNetwork(t, client, network.ID) 30 31 subnet, err := networking.CreateSubnet(t, client, network.ID) 32 th.AssertNoErr(t, err) 33 defer networking.DeleteSubnet(t, client, subnet.ID) 34 35 router, err := CreateRouter(t, client, network.ID) 36 th.AssertNoErr(t, err) 37 defer DeleteRouter(t, client, router.ID) 38 tools.PrintResource(t, router) 39 40 routerInterface, err := CreateRouterInterfaceOnSubnet(t, client, subnet.ID, router.ID) 41 tools.PrintResource(t, routerInterface) 42 th.AssertNoErr(t, err) 43 defer DeleteRouterInterface(t, client, routerInterface.PortID, router.ID) 44 45 // List hosting agent 46 allPages, err := routers.ListL3Agents(client, router.ID).AllPages() 47 th.AssertNoErr(t, err) 48 hostingAgents, err := routers.ExtractL3Agents(allPages) 49 th.AssertNoErr(t, err) 50 th.AssertIntGreaterOrEqual(t, len(hostingAgents), 1) 51 hostingAgent := hostingAgents[0] 52 t.Logf("Router %s is scheduled on %s", router.ID, hostingAgent.ID) 53 54 // remove from hosting agent 55 err = agents.RemoveL3Router(client, hostingAgent.ID, router.ID).ExtractErr() 56 th.AssertNoErr(t, err) 57 58 containsRouterFunc := func(rs []routers.Router, routerID string) bool { 59 for _, r := range rs { 60 if r.ID == router.ID { 61 return true 62 } 63 } 64 return false 65 } 66 67 // List routers on hosting agent 68 routersOnHostingAgent, err := agents.ListL3Routers(client, hostingAgent.ID).Extract() 69 th.AssertNoErr(t, err) 70 th.AssertEquals(t, containsRouterFunc(routersOnHostingAgent, router.ID), false) 71 t.Logf("Router %s is not scheduled on %s", router.ID, hostingAgent.ID) 72 73 // schedule back 74 err = agents.ScheduleL3Router(client, hostingAgents[0].ID, agents.ScheduleL3RouterOpts{RouterID: router.ID}).ExtractErr() 75 th.AssertNoErr(t, err) 76 77 // List hosting agent after readding 78 routersOnHostingAgent, err = agents.ListL3Routers(client, hostingAgent.ID).Extract() 79 th.AssertNoErr(t, err) 80 th.AssertEquals(t, containsRouterFunc(routersOnHostingAgent, router.ID), true) 81 t.Logf("Router %s is scheduled on %s", router.ID, hostingAgent.ID) 82 }