Skip to content

Commit

Permalink
Use mock network for memberlist unit tests (antrea-io#4152)
Browse files Browse the repository at this point in the history
Otherwise tests would fail if the memberlist port is already bound on
the server that runs the tests.

Signed-off-by: Quan Tian <qtian@vmware.com>
  • Loading branch information
tnqn committed Aug 25, 2022
1 parent 52db699 commit 7afa4fb
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
2 changes: 1 addition & 1 deletion cmd/antrea-agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ func run(o *Options) error {
return fmt.Errorf("invalid Node Transport IPAddr in Node config: %v", nodeConfig)
}
memberlistCluster, err = memberlist.NewCluster(nodeTransportIP, o.config.ClusterMembershipPort,
nodeConfig.Name, nodeInformer, externalIPPoolInformer,
nodeConfig.Name, nodeInformer, externalIPPoolInformer, nil,
)
if err != nil {
return fmt.Errorf("error creating new memberlist cluster: %v", err)
Expand Down
2 changes: 2 additions & 0 deletions pkg/agent/memberlist/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ func NewCluster(
nodeName string,
nodeInformer coreinformers.NodeInformer,
externalIPPoolInformer crdinformers.ExternalIPPoolInformer,
transport memberlist.Transport, // Parameterized for testing, could be left nil for production code.
) (*Cluster, error) {
// The Node join/leave events will be notified via it.
nodeEventCh := make(chan memberlist.NodeEvent, 1024)
Expand All @@ -148,6 +149,7 @@ func NewCluster(

conf := memberlist.DefaultLocalConfig()
conf.Name = c.nodeName
conf.Transport = transport
conf.BindPort = c.bindPort
conf.AdvertisePort = c.bindPort
conf.AdvertiseAddr = nodeIP.String()
Expand Down
15 changes: 8 additions & 7 deletions pkg/agent/memberlist/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ type fakeCluster struct {
crdClient *fakeversioned.Clientset
}

func newFakeCluster(nodeConfig *config.NodeConfig, stopCh <-chan struct{}, i int) (*fakeCluster, error) {
port := apis.AntreaAgentClusterMembershipPort + i

func newFakeCluster(nodeConfig *config.NodeConfig, stopCh <-chan struct{}) (*fakeCluster, error) {
clientset := fake.NewSimpleClientset()
informerFactory := informers.NewSharedInformerFactory(clientset, 0)

Expand All @@ -56,7 +54,10 @@ func newFakeCluster(nodeConfig *config.NodeConfig, stopCh <-chan struct{}, i int
crdInformerFactory := crdinformers.NewSharedInformerFactory(crdClient, 0)
ipPoolInformer := crdInformerFactory.Crd().V1alpha2().ExternalIPPools()
ip := net.ParseIP("127.0.0.1")
cluster, err := NewCluster(ip, port, nodeConfig.Name, nodeInformer, ipPoolInformer)
// Use mock network to avoid port conflict with system network and any impact on the system network.
mockNetwork := &memberlist.MockNetwork{}
mockTransport := mockNetwork.NewTransport(nodeConfig.Name)
cluster, err := NewCluster(ip, apis.AntreaAgentClusterMembershipPort, nodeConfig.Name, nodeInformer, ipPoolInformer, mockTransport)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -132,15 +133,15 @@ func TestCluster_Run(t *testing.T) {
expectEgressSelectResult: false,
},
}
for i, tCase := range testCases {
for _, tCase := range testCases {
t.Run(tCase.name, func(t *testing.T) {
nodeConfig := &config.NodeConfig{
Name: localNodeName,
NodeIPv4Addr: &net.IPNet{IP: net.IPv4(127, 0, 0, 1), Mask: net.IPv4Mask(255, 255, 255, 255)},
}
stopCh := make(chan struct{})
defer close(stopCh)
fakeCluster, err := newFakeCluster(nodeConfig, stopCh, i)
fakeCluster, err := newFakeCluster(nodeConfig, stopCh)
if err != nil {
t.Fatalf("New fake memberlist server error: %v", err)
}
Expand Down Expand Up @@ -186,7 +187,7 @@ func TestCluster_RunClusterEvents(t *testing.T) {
Spec: crdv1a2.EgressSpec{ExternalIPPool: fakeEIP1.Name, EgressIP: "1.1.1.2"},
}

fakeCluster, err := newFakeCluster(nodeConfig, stopCh, 10)
fakeCluster, err := newFakeCluster(nodeConfig, stopCh)
if err != nil {
t.Fatalf("New fake memberlist server error: %v", err)
}
Expand Down

0 comments on commit 7afa4fb

Please sign in to comment.