+ List<MatchBuilder> matchBuilds = aclMatches.buildMatch();
+
+ for (MatchBuilder matchBuilder : matchBuilds) {
+ // The layer3 match should be there with src/dst values
+ Ipv4Match l3 = (Ipv4Match) matchBuilder.getLayer3Match();
+ assertNotNull(l3);
+ assertEquals(l3.getIpv4Destination().getValue().toString(), IPV4_DST_STR);
+ assertEquals(l3.getIpv4Source().getValue().toString(), IPV4_SRC_STR);
+
+ // There should be an IPv4 etherType set
+ EthernetMatch ethMatch = matchBuilder.getEthernetMatch();
+ assertNotNull(ethMatch);
+ assertEquals(ethMatch.getEthernetType().getType().getValue(), Long.valueOf(NwConstants.ETHTYPE_IPV4));
+
+ // The rest should be null
+ assertNull(matchBuilder.getIpMatch());
+ assertNull(matchBuilder.getLayer4Match());
+ }
+ assertEquals(1, matchBuilds.size());
+ }
+
+ @Test
+ public void buildIpv4SrcLwrTcpMatchTest() {
+ AceIpBuilder aceIpBuilder = new AceIpBuilder();
+ aceIpBuilder.setAceIpVersion(new AceIpv4Builder().build());
+ aceIpBuilder.setProtocol(IPProtocols.TCP.shortValue());
+
+ SourcePortRangeBuilder srcPortRange = new SourcePortRangeBuilder();
+ srcPortRange.setLowerPort(new PortNumber(TCP_SRC_LOWER_PORT));
+ aceIpBuilder.setSourcePortRange(srcPortRange.build());
+
+ MatchesBuilder matchesBuilder = new MatchesBuilder();
+ matchesBuilder.setAceType(aceIpBuilder.build());
+
+ AclMatches aclMatches = new AclMatches(matchesBuilder.build());
+ List<MatchBuilder> matchBuilds = aclMatches.buildMatch();
+
+ Set<Integer> srcTcpMatches = new HashSet<>();
+
+ for (MatchBuilder matchBuilder : matchBuilds) {
+ // There should be an IPv4 etherType set
+ EthernetMatch ethMatch = matchBuilder.getEthernetMatch();
+ assertNotNull(ethMatch);
+ assertEquals(ethMatch.getEthernetType().getType().getValue(), Long.valueOf(NwConstants.ETHTYPE_IPV4));
+
+ // Make sure its TCP
+ IpMatch ipMatch = matchBuilder.getIpMatch();
+ assertNotNull(ipMatch);
+ assertEquals(ipMatch.getIpProtocol(), Short.valueOf(IPProtocols.TCP.shortValue()));
+
+ NxmOfTcpSrc tcpSrc = matchBuilder
+ .augmentation(GeneralAugMatchNodesNodeTableFlow.class).getExtensionList().get(0)
+ .getExtension().augmentation(NxAugMatchNodesNodeTableFlow.class).getNxmOfTcpSrc();
+
+
+ if (tcpSrc != null) {
+ srcTcpMatches.add(tcpSrc.getPort().getValue());
+ srcTcpMatches.add(tcpSrc.getMask());
+ }
+
+ // The layer3 match should be null
+ assertNull(matchBuilder.getLayer3Match());
+ }
+ assertEquals(1, matchBuilds.size());
+ assertEquals(2, srcTcpMatches.size());
+ assertTrue(srcTcpMatches.contains(TCP_SRC_LOWER_PORT));
+ assertTrue(srcTcpMatches.contains(65535));
+ }
+
+ @Test
+ public void buildIpv4SrcTcpMatchTest() {
+ AceIpBuilder aceIpBuilder = new AceIpBuilder();
+ aceIpBuilder.setAceIpVersion(new AceIpv4Builder().build());
+ aceIpBuilder.setProtocol(IPProtocols.TCP.shortValue());
+
+ SourcePortRangeBuilder srcPortRange = new SourcePortRangeBuilder();
+ srcPortRange.setLowerPort(new PortNumber(TCP_SRC_LOWER_PORT));
+ srcPortRange.setUpperPort(new PortNumber(TCP_SRC_UPPER_PORT));
+ aceIpBuilder.setSourcePortRange(srcPortRange.build());
+
+ MatchesBuilder matchesBuilder = new MatchesBuilder();
+ matchesBuilder.setAceType(aceIpBuilder.build());
+
+ AclMatches aclMatches = new AclMatches(matchesBuilder.build());
+ List<MatchBuilder> matchBuilds = aclMatches.buildMatch();
+
+ Set<Integer> srcTcpMatches = new HashSet<>();
+
+ for (MatchBuilder matchBuilder : matchBuilds) {
+ // There should be an IPv4 etherType set
+ EthernetMatch ethMatch = matchBuilder.getEthernetMatch();
+ assertNotNull(ethMatch);
+ assertEquals(ethMatch.getEthernetType().getType().getValue(), Long.valueOf(NwConstants.ETHTYPE_IPV4));
+
+ // Make sure its TCP
+ IpMatch ipMatch = matchBuilder.getIpMatch();
+ assertNotNull(ipMatch);
+ assertEquals(ipMatch.getIpProtocol(), Short.valueOf(IPProtocols.TCP.shortValue()));
+
+ NxmOfTcpSrc tcpSrc = matchBuilder
+ .augmentation(GeneralAugMatchNodesNodeTableFlow.class).getExtensionList().get(0)
+ .getExtension().augmentation(NxAugMatchNodesNodeTableFlow.class).getNxmOfTcpSrc();
+
+
+ if (tcpSrc != null) {
+ srcTcpMatches.add(tcpSrc.getPort().getValue());
+ srcTcpMatches.add(tcpSrc.getMask());
+ }
+
+ // The layer3 match should be null
+ assertNull(matchBuilder.getLayer3Match());
+ }
+ assertEquals(2, matchBuilds.size());
+ assertEquals(4, srcTcpMatches.size());
+ assertTrue(srcTcpMatches.contains(TCP_SRC_LOWER_PORT));
+ assertTrue(srcTcpMatches.contains(TCP_SRC_UPPER_PORT));
+ assertTrue(srcTcpMatches.contains(65535));
+ assertTrue(srcTcpMatches.contains(65534));
+ }
+
+ @Test
+ public void buildIpv4DstLwrTcpMatchTest() {
+ AceIpBuilder aceIpBuilder = new AceIpBuilder();
+ aceIpBuilder.setAceIpVersion(new AceIpv4Builder().build());
+ aceIpBuilder.setProtocol(IPProtocols.TCP.shortValue());
+
+ DestinationPortRangeBuilder dstPortRange = new DestinationPortRangeBuilder();
+ dstPortRange.setLowerPort(new PortNumber(TCP_DST_LOWER_PORT));
+ aceIpBuilder.setDestinationPortRange(dstPortRange.build());
+
+ MatchesBuilder matchesBuilder = new MatchesBuilder();
+ matchesBuilder.setAceType(aceIpBuilder.build());
+
+ AclMatches aclMatches = new AclMatches(matchesBuilder.build());
+ List<MatchBuilder> matchBuilds = aclMatches.buildMatch();
+
+ Set<Integer> dstTcpMatches = new HashSet<>();
+
+ for (MatchBuilder matchBuilder : matchBuilds) {
+ // There should be an IPv4 etherType set
+ EthernetMatch ethMatch = matchBuilder.getEthernetMatch();
+ assertNotNull(ethMatch);
+ assertEquals(ethMatch.getEthernetType().getType().getValue(), Long.valueOf(NwConstants.ETHTYPE_IPV4));
+
+ // Make sure its TCP
+ IpMatch ipMatch = matchBuilder.getIpMatch();
+ assertNotNull(ipMatch);
+ assertEquals(ipMatch.getIpProtocol(), Short.valueOf(IPProtocols.TCP.shortValue()));
+
+ NxmOfTcpDst tcpDst = matchBuilder
+ .augmentation(GeneralAugMatchNodesNodeTableFlow.class).getExtensionList().get(0)
+ .getExtension().augmentation(NxAugMatchNodesNodeTableFlow.class).getNxmOfTcpDst();
+
+ if (tcpDst != null) {
+ dstTcpMatches.add(tcpDst.getPort().getValue());
+ dstTcpMatches.add(tcpDst.getMask());
+ }
+ // The layer3 match should be null
+ assertNull(matchBuilder.getLayer3Match());
+ }
+ assertEquals(1, matchBuilds.size());
+ assertEquals(2, dstTcpMatches.size());
+ assertTrue(dstTcpMatches.contains(TCP_DST_LOWER_PORT));
+ assertTrue(dstTcpMatches.contains(65535));
+ }
+
+ @Test
+ public void buildIpv4DstTcpMatchTest() {
+ AceIpBuilder aceIpBuilder = new AceIpBuilder();
+ aceIpBuilder.setAceIpVersion(new AceIpv4Builder().build());
+ aceIpBuilder.setProtocol(IPProtocols.TCP.shortValue());
+
+ DestinationPortRangeBuilder dstPortRange = new DestinationPortRangeBuilder();
+ dstPortRange.setLowerPort(new PortNumber(TCP_DST_LOWER_PORT));
+ dstPortRange.setUpperPort(new PortNumber(TCP_DST_UPPER_PORT));
+ aceIpBuilder.setDestinationPortRange(dstPortRange.build());
+
+ MatchesBuilder matchesBuilder = new MatchesBuilder();
+ matchesBuilder.setAceType(aceIpBuilder.build());
+
+ AclMatches aclMatches = new AclMatches(matchesBuilder.build());
+ List<MatchBuilder> matchBuilds = aclMatches.buildMatch();
+
+ Set<Integer> dstTcpMatches = new HashSet<>();
+
+ for (MatchBuilder matchBuilder : matchBuilds) {
+ // There should be an IPv4 etherType set
+ EthernetMatch ethMatch = matchBuilder.getEthernetMatch();
+ assertNotNull(ethMatch);
+ assertEquals(ethMatch.getEthernetType().getType().getValue(), Long.valueOf(NwConstants.ETHTYPE_IPV4));
+
+ // Make sure its TCP
+ IpMatch ipMatch = matchBuilder.getIpMatch();
+ assertNotNull(ipMatch);
+ assertEquals(ipMatch.getIpProtocol(), Short.valueOf(IPProtocols.TCP.shortValue()));
+
+ NxmOfTcpDst tcpDst = matchBuilder
+ .augmentation(GeneralAugMatchNodesNodeTableFlow.class).getExtensionList().get(0)
+ .getExtension().augmentation(NxAugMatchNodesNodeTableFlow.class).getNxmOfTcpDst();
+
+ if (tcpDst != null) {
+ dstTcpMatches.add(tcpDst.getPort().getValue());
+ dstTcpMatches.add(tcpDst.getMask());
+ }
+ // The layer3 match should be null
+ assertNull(matchBuilder.getLayer3Match());
+ }
+ assertEquals(1, matchBuilds.size());
+ assertEquals(2, dstTcpMatches.size());
+ assertTrue(dstTcpMatches.contains(TCP_DST_LOWER_PORT));
+ assertTrue(dstTcpMatches.contains(TCP_DST_UPPER_PORT));
+ assertTrue(dstTcpMatches.contains(65535));