Skip to content

Commit

Permalink
Add tests for custom subnetID feature
Browse files Browse the repository at this point in the history
  • Loading branch information
malt3 committed May 10, 2024
1 parent 2b9fa01 commit e406d69
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2482,5 +2482,62 @@ var _ = Describe("Check loadbalancer reconcile", Serial, Ordered, func() {
return fmt.Errorf("projectID is not correctly set in infrastructure %v", lb.Spec.Infrastructure.ProjectID)
}, time.Second*5, time.Millisecond*500).Should(Succeed())
})

It("should update subnet from annotation", func() {
By("creating a service without overwritten subnet id")
service := v1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: "service-test34",
Namespace: "default",
},
Spec: v1.ServiceSpec{
Ports: []v1.ServicePort{
{
Name: "port1",
Protocol: v1.ProtocolTCP,
Port: 12345,
TargetPort: intstr.IntOrString{IntVal: 12345},
NodePort: 31034,
},
},
Type: "LoadBalancer",
},
}
Expect(k8sClient.Create(ctx, &service)).Should(Succeed())

By("checking that the defaultNetwork SubnetID is set")
Eventually(func() error {
err := k8sClient.Get(ctx, types.NamespacedName{Name: "default--service-test34", Namespace: "default"}, &lb)
if err != nil {
return err
}
if (testInfraDefaults.SubnetID == nil && lb.Spec.Infrastructure.DefaultNetwork.SubnetID == nil) ||
(lb.Spec.Infrastructure.DefaultNetwork.SubnetID != nil && testInfraDefaults.SubnetID != nil &&
*lb.Spec.Infrastructure.DefaultNetwork.SubnetID == *testInfraDefaults.SubnetID) {
return nil
}
return fmt.Errorf("defaultNetwork subbnetID is not correct %v", lb.Spec.Infrastructure.DefaultNetwork.SubnetID)
}, time.Second*5, time.Millisecond*500).Should(Succeed())

By("update svc to overwrite subbnetwork ID")
Expect(k8sClient.Get(ctx, client.ObjectKey{Name: service.Name, Namespace: service.Namespace}, &service)).Should(Succeed())
service.ObjectMeta.Annotations = map[string]string{
yawolv1beta1.ServiceDefaultSubnetID: "newSubnetID",
}
Expect(k8sClient.Update(ctx, &service)).Should(Succeed())

By("check if lb gets new subnet ID")
Eventually(func() error {
err := k8sClient.Get(ctx, types.NamespacedName{Name: "default--service-test34", Namespace: "default"}, &lb)
if err != nil {
return err
}
if lb.Spec.Infrastructure.DefaultNetwork.SubnetID != nil &&
*lb.Spec.Infrastructure.DefaultNetwork.SubnetID == "newSubnetID" {
return nil
}
return fmt.Errorf("defaultNetwork SubnetID is not correct %v", lb.Spec.Infrastructure.DefaultNetwork.NetworkID)
}, time.Second*5, time.Millisecond*500).Should(Succeed())
})
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -1016,6 +1016,7 @@ func getMockLB(lbNN types.NamespacedName) *LB {
DefaultNetwork: yawolv1beta1.LoadBalancerDefaultNetwork{
FloatingNetID: ptr.To("floatingnet-id"),
NetworkID: "network-id",
SubnetID: ptr.To("subnet-id"),
},
Flavor: yawolv1beta1.OpenstackFlavorRef{
FlavorID: ptr.To("flavor-id"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,60 @@ var _ = Describe("load balancer machine", Serial, Ordered, func() {
})
}) // openstack not working

Context("customizable subnetID features", func() {
BeforeEach(func() {
lbm.Spec.Infrastructure.DefaultNetwork.SubnetID = ptr.To("lb-subnetID")
})

It("should create openstack resources", func() {
lbmNN := runtimeClient.ObjectKeyFromObject(lbm)

Eventually(func(g Gomega) {
var actual yawolv1beta1.LoadBalancerMachine
g.Expect(k8sClient.Get(ctx, lbmNN, &actual)).To(Succeed())

g.Expect(actual.Status.ServerID).ToNot(BeNil())
g.Expect(actual.Status.DefaultPortID).ToNot(BeNil())

_, err := client.ServerClientObj.Get(ctx, *actual.Status.ServerID)
g.Expect(err).To(Succeed())

port, err := client.PortClientObj.Get(ctx, *actual.Status.DefaultPortID)
g.Expect(err).To(Succeed())
g.Expect(port.FixedIPs).To(HaveLen(1))

g.Expect(port.FixedIPs[0].SubnetID).To(Equal("lb-subnetID"))
}, timeout, interval).Should(Succeed())
})
}) // customizable subnetID features

Context("fallback to default subnetID", func() {
BeforeEach(func() {
lbm.Spec.Infrastructure.DefaultNetwork.SubnetID = nil // unset
})

It("should create openstack resources", func() {
lbmNN := runtimeClient.ObjectKeyFromObject(lbm)

Eventually(func(g Gomega) {
var actual yawolv1beta1.LoadBalancerMachine
g.Expect(k8sClient.Get(ctx, lbmNN, &actual)).To(Succeed())

g.Expect(actual.Status.ServerID).ToNot(BeNil())
g.Expect(actual.Status.DefaultPortID).ToNot(BeNil())

_, err := client.ServerClientObj.Get(ctx, *actual.Status.ServerID)
g.Expect(err).To(Succeed())

port, err := client.PortClientObj.Get(ctx, *actual.Status.DefaultPortID)
g.Expect(err).To(Succeed())
g.Expect(len(port.FixedIPs)).To(Equal(1))

g.Expect(port.FixedIPs[0].SubnetID).To(Equal("default-subnet-id"))
}, timeout, interval).Should(Succeed())
})
}) // fallback to default subnetID

Context("additionalNetworks features", func() {
BeforeEach(func() {
lbm.Spec.Infrastructure.AdditionalNetworks = []yawolv1beta1.LoadBalancerAdditionalNetwork{
Expand Down
10 changes: 9 additions & 1 deletion internal/openstack/testing/fake.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,20 @@ func GetFakeClient() *MockClient {
},
CreateFunc: func(ctx context.Context, optsBuilder ports.CreateOptsBuilder) (*ports.Port, error) {
opts := optsBuilder.(ports.CreateOpts)
var fixedIPs []ports.IP
if opts.FixedIPs != nil {
fixedIPs = opts.FixedIPs.([]ports.IP)
}

subnetID := "default-subnet-id"
if len(fixedIPs) > 0 {
subnetID = fixedIPs[0].SubnetID
}
port := &ports.Port{
ID: getID(&client),
Name: opts.Name,
NetworkID: opts.NetworkID,
FixedIPs: []ports.IP{{IPAddress: generateIP()}},
FixedIPs: []ports.IP{{SubnetID: subnetID, IPAddress: generateIP()}},
}

if opts.SecurityGroups != nil {
Expand Down

0 comments on commit e406d69

Please sign in to comment.