Skip to content

Commit 567dbb3

Browse files
author
Huy Mai
committed
E2E: Add subports to trunked port to test subports deletion
Signed-off-by: Huy Mai <[email protected]>
1 parent 82d7acf commit 567dbb3

File tree

1 file changed

+109
-9
lines changed

1 file changed

+109
-9
lines changed

test/e2e/suites/e2e/e2e_test.go

Lines changed: 109 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828
"strings"
2929
"time"
3030

31+
"github.com/gophercloud/gophercloud/v2"
32+
"github.com/gophercloud/gophercloud/v2/openstack"
3133
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/volumes"
3234
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers"
3335
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/routers"
@@ -429,9 +431,10 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
429431

430432
// Note that as the bootstrap config does not have cloud.conf, the node will not be added to the cluster.
431433
// We still expect the port for the machine to be created.
434+
machineDeployment := makeMachineDeployment(namespace.Name, md3Name, clusterName, "", 1)
432435
framework.CreateMachineDeployment(ctx, framework.CreateMachineDeploymentInput{
433436
Creator: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
434-
MachineDeployment: makeMachineDeployment(namespace.Name, md3Name, clusterName, "", 1),
437+
MachineDeployment: machineDeployment,
435438
BootstrapConfigTemplate: makeJoinBootstrapConfigTemplate(namespace.Name, md3Name),
436439
InfraMachineTemplate: makeOpenStackMachineTemplateWithPortOptions(namespace.Name, clusterName, md3Name, customPortOptions, machineTags),
437440
})
@@ -445,33 +448,130 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
445448
return len(plist)
446449
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
447450

448-
port := plist[0]
449-
Expect(port.Description).To(Equal("primary"))
450-
Expect(port.Tags).To(ContainElement(testTag))
451+
primaryPort := plist[0]
452+
Expect(primaryPort.Description).To(Equal("primary"))
453+
Expect(primaryPort.Tags).To(ContainElement(testTag))
451454

452455
// assert trunked port is created.
453456
Eventually(func() int {
454457
plist, err = shared.DumpOpenStackPorts(e2eCtx, ports.ListOpts{Description: "trunked", Tags: testTag})
455458
Expect(err).To(BeNil())
456459
return len(plist)
457460
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
458-
port = plist[0]
459-
Expect(port.Description).To(Equal("trunked"))
460-
Expect(port.Tags).To(ContainElement(testTag))
461+
trunkedPort := plist[0]
462+
Expect(trunkedPort.Description).To(Equal("trunked"))
463+
Expect(trunkedPort.Tags).To(ContainElement(testTag))
461464

462465
// assert trunk data.
463466
var trunk *trunks.Trunk
464467
Eventually(func() int {
465-
trunk, err = shared.DumpOpenStackTrunks(e2eCtx, port.ID)
468+
trunk, err = shared.DumpOpenStackTrunks(e2eCtx, trunkedPort.ID)
466469
Expect(err).To(BeNil())
467470
Expect(trunk).NotTo(BeNil())
468471
return 1
469472
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
470-
Expect(trunk.PortID).To(Equal(port.ID))
473+
Expect(trunk.PortID).To(Equal(trunkedPort.ID))
474+
471475
// assert port level security group is created by name using SecurityGroupFilters
476+
472477
securityGroupsList, err := shared.DumpOpenStackSecurityGroups(e2eCtx, groups.ListOpts{Name: testSecurityGroupName})
473478
Expect(err).NotTo(HaveOccurred())
474479
Expect(securityGroupsList).To(HaveLen(1))
480+
481+
// Testing subports
482+
shared.Logf("Create a new port and add it as a subport of the trunk")
483+
484+
providerClient, clientOpts, _, err := shared.GetTenantProviderClient(e2eCtx)
485+
Expect(err).To(BeNil(), "Cannot create providerClient")
486+
487+
networkClient, err := openstack.NewNetworkV2(providerClient, gophercloud.EndpointOpts{
488+
Region: clientOpts.RegionName,
489+
})
490+
Expect(err).To(BeNil(), "Cannot create network client")
491+
492+
networksList, err := shared.DumpOpenStackNetworks(
493+
e2eCtx,
494+
networks.ListOpts{
495+
TenantID: securityGroupsList[0].TenantID,
496+
},
497+
)
498+
Expect(err).To(BeNil(), "Cannot get network List")
499+
500+
createOpts := ports.CreateOpts{
501+
Name: "subPort",
502+
NetworkID: networksList[0].ID,
503+
}
504+
505+
subPort, err := ports.Create(ctx, networkClient, createOpts).Extract()
506+
Expect(err).To(BeNil(), "Cannot create subPort")
507+
508+
addSubportsOpts := trunks.AddSubportsOpts{
509+
Subports: []trunks.Subport{
510+
{
511+
SegmentationID: 1,
512+
SegmentationType: "vlan",
513+
PortID: subPort.ID,
514+
},
515+
},
516+
}
517+
shared.Logf("Add subport to trunk")
518+
_, err = trunks.AddSubports(ctx, networkClient, trunk.ID, addSubportsOpts).Extract()
519+
Expect(err).To(BeNil(), "Cannot add subports")
520+
521+
subports, err := trunks.GetSubports(ctx, networkClient, trunk.ID).Extract()
522+
Expect(err).To(BeNil())
523+
Expect(subports).To(HaveLen(1))
524+
525+
shared.Logf("Get machine object from MachineDeployments")
526+
c := e2eCtx.Environment.BootstrapClusterProxy.GetClient()
527+
528+
machines := framework.GetMachinesByMachineDeployments(ctx, framework.GetMachinesByMachineDeploymentsInput{
529+
Lister: c,
530+
ClusterName: clusterName,
531+
Namespace: namespace.Name,
532+
MachineDeployment: *machineDeployment,
533+
})
534+
535+
Expect(machines).To(HaveLen(1))
536+
537+
machine := machines[0]
538+
539+
shared.Logf("Fetching serverID")
540+
allServers, err := shared.DumpOpenStackServers(e2eCtx, servers.ListOpts{Name: machine.Name})
541+
Expect(err).To(BeNil())
542+
Expect(allServers).To(HaveLen(1))
543+
serverID := allServers[0].ID
544+
Expect(err).To(BeNil())
545+
546+
shared.Logf("Deleting the machine deployment, which should trigger trunk deletion")
547+
548+
err = c.Delete(ctx, machineDeployment)
549+
Expect(err).To(BeNil())
550+
551+
shared.Logf("Waiting for the server to be cleaned")
552+
553+
computeClient, err := openstack.NewComputeV2(providerClient, gophercloud.EndpointOpts{
554+
Region: clientOpts.RegionName,
555+
})
556+
Expect(err).To(BeNil(), "Cannot create compute client")
557+
558+
Eventually(
559+
func() bool {
560+
_, err := servers.Get(ctx, computeClient, serverID).Extract()
561+
return gophercloud.ResponseCodeIs(err, 404)
562+
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-delete-cluster")...,
563+
).Should(BeTrue())
564+
565+
// Wait here for some time, to make sure the reconciler fully cleans everything
566+
time.Sleep(10 * time.Second)
567+
568+
// Verify that the trunk is deleted
569+
_, err = trunks.Get(ctx, networkClient, trunk.ID).Extract()
570+
Expect(gophercloud.ResponseCodeIs(err, 404)).To(BeTrue())
571+
572+
// Verify that subPort is deleted
573+
_, err = ports.Get(ctx, networkClient, subPort.ID).Extract()
574+
Expect(gophercloud.ResponseCodeIs(err, 404)).To(BeTrue())
475575
})
476576
})
477577

0 commit comments

Comments
 (0)