Skip to content

Commit

Permalink
add test case for peering id removal and verify status update
Browse files Browse the repository at this point in the history
  • Loading branch information
ushabelgur committed Apr 29, 2024
1 parent 4da0420 commit afabf60
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 15 deletions.
21 changes: 21 additions & 0 deletions controllers/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,27 @@ var _ = Describe("Network Controller", Label("network"), Ordered, func() {
State: metalnetv1alpha1.NetworkPeeringStateReady,
}))))

By("Removing peeredIDs")
// Update the k8s network object
baseNetwork := network.DeepCopy()
network.Spec.PeeredIDs = []int32{}
Expect(k8sClient.Patch(ctx, network, client.MergeFrom(baseNetwork))).To(Succeed())

// Update the k8s network object
baseNetwork2 := network2.DeepCopy()
network2.Spec.PeeredIDs = []int32{}
Expect(k8sClient.Patch(ctx, network2, client.MergeFrom(baseNetwork2))).To(Succeed())

Expect(networkReconcile(ctx, *network)).To(Succeed())
Expect(networkReconcile(ctx, *network2)).To(Succeed())

By("Verifying peering information removed from status")
Eventually(Object(network)).Should(SatisfyAll(
HaveField("Status.Peerings", BeEmpty())))

Eventually(Object(network2)).Should(SatisfyAll(
HaveField("Status.Peerings", BeEmpty())))

// Deletes the k8s network object after spec is completed
DeferCleanup(func(ctx SpecContext) {
Expect(k8sClient.Delete(ctx, networkInterface)).To(Succeed())
Expand Down
26 changes: 13 additions & 13 deletions controllers/network_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,9 @@ func (r *NetworkReconciler) reconcilePeeredVNIs(ctx context.Context, log logr.Lo
missing := r.setDifference(mbPeerVnis, specPeerVnis)
added := r.setDifference(specPeerVnis, mbPeerVnis)

statusPeerVnis := map[uint32]metalnetv1alpha1.NetworkPeeringState{}
networkPeeringState := map[uint32]metalnetv1alpha1.NetworkPeeringState{}
for _, v := range network.Status.Peerings {
statusPeerVnis[uint32(v.ID)] = v.State
networkPeeringState[uint32(v.ID)] = v.State
}

var errs []error
Expand All @@ -313,7 +313,7 @@ func (r *NetworkReconciler) reconcilePeeredVNIs(ctx context.Context, log logr.Lo
continue
}
}
delete(statusPeerVnis, peeredVNI)
delete(networkPeeringState, peeredVNI)
}

if err := errors.Join(errs...); err != nil {
Expand Down Expand Up @@ -356,53 +356,53 @@ func (r *NetworkReconciler) reconcilePeeredVNIs(ctx context.Context, log logr.Lo
}
}

delete(statusPeerVnis, peeredVNI)
delete(networkPeeringState, peeredVNI)
}

for _, peeredVNI := range added.UnsortedList() {
if !ownVniAvail {
return nil
}
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStatePending
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStatePending
log.V(1).Info("Checking the existence of the peeredVNI in dp-service (added)", "peeredVNI", peeredVNI)
peeredVniAvail, err := r.DPDK.GetVni(ctx, peeredVNI, 0)
if err != nil {
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
errs = append(errs, err)
continue
}
log.V(1).Info("Checked the existence of the peeredVNI in dp-service (added)", "peeredVNI", peeredVNI, "peeredVniAvail", peeredVniAvail)
if err := r.MetalnetCache.AddVniToPeerVnis(vni, peeredVNI); err != nil {
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
errs = append(errs, err)
continue
}
if ownVniAvail && !peeredVniAvail.Spec.InUse {
if err := r.subscribeIfNotSubscribed(ctx, peeredVNI); err != nil {
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
errs = append(errs, err)
continue
}
}
if ownVniAvail && peeredVniAvail.Spec.InUse {
if err := r.recycleVNISubscription(ctx, vni); err != nil {
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
errs = append(errs, err)
continue
}
if err := r.recycleVNISubscription(ctx, peeredVNI); err != nil {
statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateError
errs = append(errs, err)
continue
}
}

statusPeerVnis[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateReady
networkPeeringState[peeredVNI] = metalnetv1alpha1.NetworkPeeringStateReady
}
}

newStatusPeerings := make([]metalnetv1alpha1.NetworkPeeringStatus, 0, len(statusPeerVnis))
for peeredId, status := range statusPeerVnis {
newStatusPeerings := make([]metalnetv1alpha1.NetworkPeeringStatus, 0, len(networkPeeringState))
for peeredId, status := range networkPeeringState {
newStatusPeerings = append(newStatusPeerings, metalnetv1alpha1.NetworkPeeringStatus{
ID: int32(peeredId),
State: status,
Expand Down
2 changes: 1 addition & 1 deletion controllers/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ var _ = BeforeSuite(func() {
logger := zap.New(zap.UseFlagOptions(&opts))

metalnetCache = internal.NewMetalnetCache(&logger)
metalnetMBClient := metalbond.NewMetalnetClient(&logger, dpdkClient, metalnetCache, &defaultRouterAddr, metalbond.ClientOptions{
metalnetMBClient = metalbond.NewMetalnetClient(&logger, dpdkClient, metalnetCache, &defaultRouterAddr, metalbond.ClientOptions{
IPv4Only: true,
PreferredNetwork: nil,
})
Expand Down
1 change: 0 additions & 1 deletion metalbond/metalbond_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,6 @@ func (c *MetalnetClient) RemoveRoute(vni mb.VNI, dest mb.Destination, hop mb.Nex

func (c *MetalnetClient) CleanupNotPeeredRoutes(vni uint32) error {
ctx := context.TODO()

routes, err := c.dpdk.ListRoutes(ctx, vni)
if err != nil {
return fmt.Errorf("error listing dpdk routes for vni %d: %w", vni, err)
Expand Down

0 comments on commit afabf60

Please sign in to comment.