github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/networking/v2/extensions/trunk_details/trunks_test.go (about) 1 //go:build acceptance || trunks 2 // +build acceptance trunks 3 4 package trunk_details 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 v2 "github.com/gophercloud/gophercloud/internal/acceptance/openstack/networking/v2" 11 v2Trunks "github.com/gophercloud/gophercloud/internal/acceptance/openstack/networking/v2/extensions/trunks" 12 "github.com/gophercloud/gophercloud/openstack/common/extensions" 13 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/trunk_details" 14 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/trunks" 15 "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" 16 th "github.com/gophercloud/gophercloud/testhelper" 17 ) 18 19 type portWithTrunkDetails struct { 20 ports.Port 21 trunk_details.TrunkDetailsExt 22 } 23 24 func TestListPortWithSubports(t *testing.T) { 25 client, err := clients.NewNetworkV2Client() 26 if err != nil { 27 t.Fatalf("Unable to create a network client: %v", err) 28 } 29 30 _, err = extensions.Get(client, "trunk-details").Extract() 31 if err != nil { 32 t.Skip("This test requires trunk-details Neutron extension") 33 } 34 35 // Create Network 36 network, err := v2.CreateNetwork(t, client) 37 if err != nil { 38 t.Fatalf("Unable to create network: %v", err) 39 } 40 defer v2.DeleteNetwork(t, client, network.ID) 41 42 // Create Subnet 43 subnet, err := v2.CreateSubnet(t, client, network.ID) 44 if err != nil { 45 t.Fatalf("Unable to create subnet: %v", err) 46 } 47 defer v2.DeleteSubnet(t, client, subnet.ID) 48 49 // Create port 50 parentPort, err := v2.CreatePort(t, client, network.ID, subnet.ID) 51 if err != nil { 52 t.Fatalf("Unable to create port: %v", err) 53 } 54 defer v2.DeletePort(t, client, parentPort.ID) 55 56 subport1, err := v2.CreatePort(t, client, network.ID, subnet.ID) 57 if err != nil { 58 t.Fatalf("Unable to create port: %v", err) 59 } 60 defer v2.DeletePort(t, client, subport1.ID) 61 62 subport2, err := v2.CreatePort(t, client, network.ID, subnet.ID) 63 if err != nil { 64 t.Fatalf("Unable to create port: %v", err) 65 } 66 defer v2.DeletePort(t, client, subport2.ID) 67 68 trunk, err := v2Trunks.CreateTrunk(t, client, parentPort.ID, subport1.ID, subport2.ID) 69 if err != nil { 70 t.Fatalf("Unable to create trunk: %v", err) 71 } 72 defer v2Trunks.DeleteTrunk(t, client, trunk.ID) 73 74 // Test LIST ports with trunk details 75 allPages, err := ports.List(client, ports.ListOpts{ID: parentPort.ID}).AllPages() 76 th.AssertNoErr(t, err) 77 78 var allPorts []portWithTrunkDetails 79 err = ports.ExtractPortsInto(allPages, &allPorts) 80 th.AssertNoErr(t, err) 81 82 th.AssertEquals(t, 1, len(allPorts)) 83 port := allPorts[0] 84 85 th.AssertEquals(t, trunk.ID, port.TrunkDetails.TrunkID) 86 th.AssertEquals(t, 2, len(port.TrunkDetails.SubPorts)) 87 88 // Note that MAC address is not (currently) returned in list queries. We 89 // exclude it from the comparison here in case it's ever added. MAC 90 // address is returned in GET queries, so we do assert that in the GET 91 // test below. 92 // Tracked in https://bugs.launchpad.net/neutron/+bug/2020552 93 // TODO: Remove this workaround when the bug is resolved 94 th.AssertDeepEquals(t, trunks.Subport{ 95 SegmentationID: 1, 96 SegmentationType: "vlan", 97 PortID: subport1.ID, 98 }, port.TrunkDetails.SubPorts[0].Subport) 99 th.AssertDeepEquals(t, trunks.Subport{ 100 SegmentationID: 2, 101 SegmentationType: "vlan", 102 PortID: subport2.ID, 103 }, port.TrunkDetails.SubPorts[1].Subport) 104 105 // Test GET port with trunk details 106 err = ports.Get(client, parentPort.ID).ExtractInto(&port) 107 th.AssertEquals(t, trunk.ID, port.TrunkDetails.TrunkID) 108 th.AssertEquals(t, 2, len(port.TrunkDetails.SubPorts)) 109 th.AssertDeepEquals(t, trunk_details.Subport{ 110 Subport: trunks.Subport{ 111 SegmentationID: 1, 112 SegmentationType: "vlan", 113 PortID: subport1.ID, 114 }, 115 MACAddress: subport1.MACAddress, 116 }, port.TrunkDetails.SubPorts[0]) 117 th.AssertDeepEquals(t, trunk_details.Subport{ 118 Subport: trunks.Subport{ 119 SegmentationID: 2, 120 SegmentationType: "vlan", 121 PortID: subport2.ID, 122 }, 123 MACAddress: subport2.MACAddress, 124 }, port.TrunkDetails.SubPorts[1]) 125 }