Skip to content

Commit

Permalink
Comply with de-facto standar for multiple interfaces single ADD request
Browse files Browse the repository at this point in the history
The de-facto standard says that only a single interface can report the
`default` knob enabled.

Thus, this commit changes the code to assert that behavior when multiple
interfaces are passed.

Signed-off-by: Miguel Duarte Barroso <mdbarroso@redhat.com>
  • Loading branch information
maiqueb committed Sep 6, 2024
1 parent ec02fb3 commit afe49cd
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 22 deletions.
2 changes: 1 addition & 1 deletion pkg/utils/net-attach-def.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ func CreateNetworkStatuses(r cnitypes.Result, networkName string, defaultNetwork
if iface.Sandbox != "" {
ns := &v1.NetworkStatus{
Name: networkName,
Default: defaultNetwork,
Default: defaultNetwork && i == 0,
Interface: iface.Name,
Mac: iface.Mac,
Mtu: iface.Mtu,
Expand Down
82 changes: 61 additions & 21 deletions pkg/utils/net-attach-def_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,31 +269,71 @@ var _ = Describe("Netwok Attachment Definition manipulations", func() {
Options: []string{"ndots:2"},
},
}
var err error
networkStatuses, err = CreateNetworkStatuses(cniResult, "test-multi-net-attach-def", false, nil)
Expect(err).NotTo(HaveOccurred())

})

It("creates network statuses for interfaces with sandbox", func() {
Expect(networkStatuses).To(HaveLen(2))
// Check details for the first returned network status
Expect(networkStatuses[0].Name).To(Equal("test-multi-net-attach-def"))
Expect(networkStatuses[0].Interface).To(Equal("example0"))
Expect(networkStatuses[0].Mtu).To(Equal(1500))
Expect(networkStatuses[0].Mac).To(Equal("00:AA:BB:CC:DD:01"))
Expect(networkStatuses[0].IPs).To(ConsistOf("192.0.2.1", "192.0.2.2"))

// Check details for the second returned network status
Expect(networkStatuses[1].Interface).To(Equal("example1"))
Expect(networkStatuses[1].Mtu).To(Equal(1500))
Expect(networkStatuses[1].Mac).To(Equal("00:AA:BB:CC:DD:02"))
Expect(networkStatuses[1].IPs).To(ConsistOf("192.0.2.3"))
Context("for a secondary network", func() {
BeforeEach(func() {
var err error
networkStatuses, err = CreateNetworkStatuses(cniResult, "test-multi-net-attach-def", false, nil)
Expect(err).NotTo(HaveOccurred())
})

It("creates network statuses for interfaces with sandbox", func() {
Expect(networkStatuses).To(HaveLen(2))
// Check details for the first returned network status
Expect(networkStatuses[0].Name).To(Equal("test-multi-net-attach-def"))
Expect(networkStatuses[0].Interface).To(Equal("example0"))
Expect(networkStatuses[0].Mtu).To(Equal(1500))
Expect(networkStatuses[0].Mac).To(Equal("00:AA:BB:CC:DD:01"))
Expect(networkStatuses[0].IPs).To(ConsistOf("192.0.2.1", "192.0.2.2"))
Expect(networkStatuses[0].Default).To(BeFalse())

// Check details for the second returned network status
Expect(networkStatuses[1].Interface).To(Equal("example1"))
Expect(networkStatuses[1].Mtu).To(Equal(1500))
Expect(networkStatuses[1].Mac).To(Equal("00:AA:BB:CC:DD:02"))
Expect(networkStatuses[1].IPs).To(ConsistOf("192.0.2.3"))
Expect(networkStatuses[1].Default).To(BeFalse())
})

It("excludes interfaces without a sandbox", func() {
for _, status := range networkStatuses {
Expect(status.Interface).NotTo(Equal("foo"))
}
})
})

It("excludes interfaces without a sandbox", func() {
for _, status := range networkStatuses {
Expect(status.Interface).NotTo(Equal("foo"))
}
Context("for the cluster default network", func() {
BeforeEach(func() {
var err error
networkStatuses, err = CreateNetworkStatuses(cniResult, "test-multi-net-attach-def", true, nil)
Expect(err).NotTo(HaveOccurred())
})

It("creates network statuses for interfaces with sandbox", func() {
Expect(networkStatuses).To(HaveLen(2))
// Check details for the first returned network status
Expect(networkStatuses[0].Name).To(Equal("test-multi-net-attach-def"))
Expect(networkStatuses[0].Interface).To(Equal("example0"))
Expect(networkStatuses[0].Mtu).To(Equal(1500))
Expect(networkStatuses[0].Mac).To(Equal("00:AA:BB:CC:DD:01"))
Expect(networkStatuses[0].IPs).To(ConsistOf("192.0.2.1", "192.0.2.2"))
Expect(networkStatuses[0].Default).To(BeTrue())

// Check details for the second returned network status
Expect(networkStatuses[1].Interface).To(Equal("example1"))
Expect(networkStatuses[1].Mtu).To(Equal(1500))
Expect(networkStatuses[1].Mac).To(Equal("00:AA:BB:CC:DD:02"))
Expect(networkStatuses[1].IPs).To(ConsistOf("192.0.2.3"))
Expect(networkStatuses[1].Default).To(BeFalse())
})

It("excludes interfaces without a sandbox", func() {
for _, status := range networkStatuses {
Expect(status.Interface).NotTo(Equal("foo"))
}
})
})
})

Expand Down

0 comments on commit afe49cd

Please sign in to comment.