Skip to content

Commit 5d92223

Browse files
authored
Merge pull request kubernetes-sigs#2141 from Nordix/mquhuy/ensure-trunkport-deletion-e2e-test
🌱 E2E: Add subports to trunked port to test subports deletion
2 parents 16d4e87 + 567dbb3 commit 5d92223

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"
@@ -482,9 +484,10 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
482484

483485
// Note that as the bootstrap config does not have cloud.conf, the node will not be added to the cluster.
484486
// We still expect the port for the machine to be created.
487+
machineDeployment := makeMachineDeployment(namespace.Name, md3Name, clusterName, "", 1)
485488
framework.CreateMachineDeployment(ctx, framework.CreateMachineDeploymentInput{
486489
Creator: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
487-
MachineDeployment: makeMachineDeployment(namespace.Name, md3Name, clusterName, "", 1),
490+
MachineDeployment: machineDeployment,
488491
BootstrapConfigTemplate: makeJoinBootstrapConfigTemplate(namespace.Name, md3Name),
489492
InfraMachineTemplate: makeOpenStackMachineTemplateWithPortOptions(namespace.Name, clusterName, md3Name, customPortOptions, machineTags),
490493
})
@@ -498,33 +501,130 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
498501
return len(plist)
499502
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
500503

501-
port := plist[0]
502-
Expect(port.Description).To(Equal("primary"))
503-
Expect(port.Tags).To(ContainElement(testTag))
504+
primaryPort := plist[0]
505+
Expect(primaryPort.Description).To(Equal("primary"))
506+
Expect(primaryPort.Tags).To(ContainElement(testTag))
504507

505508
// assert trunked port is created.
506509
Eventually(func() int {
507510
plist, err = shared.DumpOpenStackPorts(e2eCtx, ports.ListOpts{Description: "trunked", Tags: testTag})
508511
Expect(err).To(BeNil())
509512
return len(plist)
510513
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
511-
port = plist[0]
512-
Expect(port.Description).To(Equal("trunked"))
513-
Expect(port.Tags).To(ContainElement(testTag))
514+
trunkedPort := plist[0]
515+
Expect(trunkedPort.Description).To(Equal("trunked"))
516+
Expect(trunkedPort.Tags).To(ContainElement(testTag))
514517

515518
// assert trunk data.
516519
var trunk *trunks.Trunk
517520
Eventually(func() int {
518-
trunk, err = shared.DumpOpenStackTrunks(e2eCtx, port.ID)
521+
trunk, err = shared.DumpOpenStackTrunks(e2eCtx, trunkedPort.ID)
519522
Expect(err).To(BeNil())
520523
Expect(trunk).NotTo(BeNil())
521524
return 1
522525
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")...).Should(Equal(1))
523-
Expect(trunk.PortID).To(Equal(port.ID))
526+
Expect(trunk.PortID).To(Equal(trunkedPort.ID))
527+
524528
// assert port level security group is created by name using SecurityGroupFilters
529+
525530
securityGroupsList, err := shared.DumpOpenStackSecurityGroups(e2eCtx, groups.ListOpts{Name: testSecurityGroupName})
526531
Expect(err).NotTo(HaveOccurred())
527532
Expect(securityGroupsList).To(HaveLen(1))
533+
534+
// Testing subports
535+
shared.Logf("Create a new port and add it as a subport of the trunk")
536+
537+
providerClient, clientOpts, _, err := shared.GetTenantProviderClient(e2eCtx)
538+
Expect(err).To(BeNil(), "Cannot create providerClient")
539+
540+
networkClient, err := openstack.NewNetworkV2(providerClient, gophercloud.EndpointOpts{
541+
Region: clientOpts.RegionName,
542+
})
543+
Expect(err).To(BeNil(), "Cannot create network client")
544+
545+
networksList, err := shared.DumpOpenStackNetworks(
546+
e2eCtx,
547+
networks.ListOpts{
548+
TenantID: securityGroupsList[0].TenantID,
549+
},
550+
)
551+
Expect(err).To(BeNil(), "Cannot get network List")
552+
553+
createOpts := ports.CreateOpts{
554+
Name: "subPort",
555+
NetworkID: networksList[0].ID,
556+
}
557+
558+
subPort, err := ports.Create(ctx, networkClient, createOpts).Extract()
559+
Expect(err).To(BeNil(), "Cannot create subPort")
560+
561+
addSubportsOpts := trunks.AddSubportsOpts{
562+
Subports: []trunks.Subport{
563+
{
564+
SegmentationID: 1,
565+
SegmentationType: "vlan",
566+
PortID: subPort.ID,
567+
},
568+
},
569+
}
570+
shared.Logf("Add subport to trunk")
571+
_, err = trunks.AddSubports(ctx, networkClient, trunk.ID, addSubportsOpts).Extract()
572+
Expect(err).To(BeNil(), "Cannot add subports")
573+
574+
subports, err := trunks.GetSubports(ctx, networkClient, trunk.ID).Extract()
575+
Expect(err).To(BeNil())
576+
Expect(subports).To(HaveLen(1))
577+
578+
shared.Logf("Get machine object from MachineDeployments")
579+
c := e2eCtx.Environment.BootstrapClusterProxy.GetClient()
580+
581+
machines := framework.GetMachinesByMachineDeployments(ctx, framework.GetMachinesByMachineDeploymentsInput{
582+
Lister: c,
583+
ClusterName: clusterName,
584+
Namespace: namespace.Name,
585+
MachineDeployment: *machineDeployment,
586+
})
587+
588+
Expect(machines).To(HaveLen(1))
589+
590+
machine := machines[0]
591+
592+
shared.Logf("Fetching serverID")
593+
allServers, err := shared.DumpOpenStackServers(e2eCtx, servers.ListOpts{Name: machine.Name})
594+
Expect(err).To(BeNil())
595+
Expect(allServers).To(HaveLen(1))
596+
serverID := allServers[0].ID
597+
Expect(err).To(BeNil())
598+
599+
shared.Logf("Deleting the machine deployment, which should trigger trunk deletion")
600+
601+
err = c.Delete(ctx, machineDeployment)
602+
Expect(err).To(BeNil())
603+
604+
shared.Logf("Waiting for the server to be cleaned")
605+
606+
computeClient, err := openstack.NewComputeV2(providerClient, gophercloud.EndpointOpts{
607+
Region: clientOpts.RegionName,
608+
})
609+
Expect(err).To(BeNil(), "Cannot create compute client")
610+
611+
Eventually(
612+
func() bool {
613+
_, err := servers.Get(ctx, computeClient, serverID).Extract()
614+
return gophercloud.ResponseCodeIs(err, 404)
615+
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-delete-cluster")...,
616+
).Should(BeTrue())
617+
618+
// Wait here for some time, to make sure the reconciler fully cleans everything
619+
time.Sleep(10 * time.Second)
620+
621+
// Verify that the trunk is deleted
622+
_, err = trunks.Get(ctx, networkClient, trunk.ID).Extract()
623+
Expect(gophercloud.ResponseCodeIs(err, 404)).To(BeTrue())
624+
625+
// Verify that subPort is deleted
626+
_, err = ports.Get(ctx, networkClient, subPort.ID).Extract()
627+
Expect(gophercloud.ResponseCodeIs(err, 404)).To(BeTrue())
528628
})
529629
})
530630

0 commit comments

Comments
 (0)