+ public void syncGroups_groupsForNode() throws Exception {
+ // Define NodeIds
+ NodeId nodeWithoutTunnel = new NodeId("nodeIdWithoutTunnel");
+ NodeId nodeIdIpV6 = new NodeId("nodeIdIpV6");
+ NodeId nodeIdIpV4 = new NodeId("nodeIdIpV4");
+ Endpoint endpoint = buildEndpoint(IPV4_0, MAC_0, new NodeConnectorId(OPENFLOW + CONNECTOR_0.getValue())).build();
+
+ when(ctx.getTenant(any(TenantId.class))).thenReturn(getTestIndexedTenant());
+ when(ctx.getEndpointManager()).thenReturn(endpointManager);
+ when(ctx.getCurrentPolicy()).thenReturn(policyInfo);
+
+ OrdinalFactory.EndpointFwdCtxOrdinals ordinals = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, endpoint);
+ Preconditions.checkNotNull(ordinals);
+
+ // EgKeys
+ Set<EgKey> egKeys = new HashSet<>();
+ egKeys.add(new EgKey(buildTenant().getId(), endpoint.getEndpointGroup()));
+ // Nodes
+ Set<NodeId> nodeIds = new HashSet<>();
+ nodeIds.add(NODE_ID);
+ nodeIds.add(nodeWithoutTunnel);
+ nodeIds.add(nodeIdIpV6);
+ nodeIds.add(nodeIdIpV4);
+ // Endpoints
+ Collection<Endpoint> endpoints = new HashSet<>();
+ endpoints.add(buildEndpoint(IPV4_1, MAC_1, CONNECTOR_1).build());
+ endpoints.add(buildEndpoint(IPV4_2, MAC_2, CONNECTOR_2).build());
+
+ when(ctx.getSwitchManager()).thenReturn(switchManager);
+ when(endpointManager.getGroupsForNode(NODE_ID)).thenReturn(egKeys);
+ when(endpointManager.getNodesForGroup(any(EgKey.class))).thenReturn(nodeIds);
+ when(endpointManager.getEndpointsForNode(any(NodeId.class))).thenReturn(endpoints);
+ when(switchManager.getTunnelIP(nodeIdIpV6, TunnelTypeVxlan.class)).thenReturn(new IpAddress(IPV6_1));
+ when(switchManager.getTunnelIP(nodeIdIpV4, TunnelTypeVxlan.class)).thenReturn(new IpAddress(IPV4_1));
+ when(switchManager.getTunnelPort(NODE_ID, TunnelTypeVxlan.class)).thenReturn(CONNECTOR_1);
+ when(policyInfo.getPeers(any(EgKey.class))).thenReturn(egKeys);
+
+ groupTable.syncGroups(NODE_ID, ordinals, endpoint, GROUP_ID, ofWriter);
+
+ // Verify method order
+ InOrder order = inOrder(endpointManager, policyInfo, switchManager, ofWriter);
+ order.verify(endpointManager, times(1)).getGroupsForNode(NODE_ID);
+ order.verify(endpointManager, times(1)).getNodesForGroup(any(EgKey.class));
+ order.verify(policyInfo, times(1)).getPeers(any(EgKey.class));
+ order.verify(endpointManager, times(1)).getNodesForGroup(any(EgKey.class));
+ order.verify(switchManager, times(1)).getTunnelIP(nodeWithoutTunnel, TunnelTypeVxlan.class);
+ order.verify(switchManager, times(1)).getTunnelPort(NODE_ID, TunnelTypeVxlan.class);
+ order.verify(switchManager, times(1)).getTunnelIP(any(NodeId.class), eq(TunnelTypeVxlan.class));
+ order.verify(switchManager, times(1)).getTunnelPort(NODE_ID, TunnelTypeVxlan.class);
+ order.verify(switchManager, times(1)).getTunnelIP(any(NodeId.class), eq(TunnelTypeVxlan.class));
+ order.verify(switchManager, times(1)).getTunnelPort(NODE_ID, TunnelTypeVxlan.class);
+ order.verify(ofWriter, atLeastOnce()).writeBucket(any(NodeId.class), any(GroupId.class), any(Bucket.class));