@Test
  public void testSerialization() throws IOException, ClassNotFoundException {
    Condition cond = new Condition();
    Set<UUID> ids = new HashSet<>();
    ids.add(UUID.randomUUID());
    ids.add(UUID.randomUUID());
    cond.inPortIds = ids;
    cond.portGroup = UUID.randomUUID();
    cond.tpSrc = new Range<>(40000, 41000);
    cond.tpSrcInv = false;
    cond.tpDst = new Range<>(42000, 43000);
    cond.tpDstInv = true;
    cond.etherType = 0x86DD;

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    OutputStream out = new BufferedOutputStream(bos);
    JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(new OutputStreamWriter(out));
    jsonGenerator.writeObject(cond);
    out.close();
    byte[] data = bos.toByteArray();
    ByteArrayInputStream bis = new ByteArrayInputStream(data);
    InputStream in = new BufferedInputStream(bis);
    JsonParser jsonParser = jsonFactory.createJsonParser(new InputStreamReader(in));
    Condition c = jsonParser.readValueAs(Condition.class);
    in.close();
    Assert.assertTrue(cond.equals(c));
  }
  @Test
  public void testTpDst_upperPorts() {
    pktCtx.wcmatch().setDstPort(50000);

    Condition cond = new Condition();
    pktCtx.inPortId_$eq(UUID.randomUUID());
    Assert.assertTrue(cond.matches(pktCtx));
    cond.tpDst = new Range<>(40000, Transport.MAX_PORT_NO);
    Assert.assertTrue(cond.matches(pktCtx));
    cond.tpDstInv = true;
    Assert.assertFalse(cond.matches(pktCtx));
    cond.tpDstInv = false;
    Assert.assertTrue(cond.matches(pktCtx));
    cond.tpDst = new Range<>(55000, Transport.MAX_PORT_NO);
    Assert.assertFalse(cond.matches(pktCtx));
    cond.tpDstInv = true;
    Assert.assertTrue(cond.matches(pktCtx));
    cond.tpDstInv = false;
    Assert.assertFalse(cond.matches(pktCtx));
    cond.tpDst = new Range<>(45000, 55000);
    Assert.assertTrue(cond.matches(pktCtx));
    cond.tpDstInv = true;
    Assert.assertFalse(cond.matches(pktCtx));
    cond.tpDstInv = false;
    cond.tpDst = new Range<>(0, Transport.MAX_PORT_NO);
    Assert.assertTrue(cond.matches(pktCtx));
  }
 @Test
 public void testTpDst() {
   // tpDst is set to 1234
   Condition cond = new Condition();
   pktCtx.inPortId_$eq(UUID.randomUUID());
   Assert.assertTrue(cond.matches(pktCtx));
   cond.tpDst = new Range<>(1235, Transport.MAX_PORT_NO);
   Assert.assertFalse(cond.matches(pktCtx));
   cond.tpDstInv = true;
   Assert.assertTrue(cond.matches(pktCtx));
   cond.tpDstInv = false;
   cond.tpDst = new Range<>(1233, Transport.MAX_PORT_NO);
   Assert.assertTrue(cond.matches(pktCtx));
   cond.tpDstInv = true;
   Assert.assertFalse(cond.matches(pktCtx));
   cond.tpDstInv = false;
   cond.tpDst = new Range<>(1233, 1233);
   Assert.assertFalse(cond.matches(pktCtx));
   cond.tpDst = new Range<>(1233, 1234);
   Assert.assertTrue(cond.matches(pktCtx));
   cond.tpDstInv = true;
   Assert.assertFalse(cond.matches(pktCtx));
   cond.tpDstInv = false;
   cond.tpDst = new Range<>(0, 1234);
   Assert.assertTrue(cond.matches(pktCtx));
 }