/**
   * Verify that we properly ignore operations on schemas including those with wildcard
   * substitutions.
   */
  public void testSchemasIgnored() throws ReplicatorException, InterruptedException {
    // Configure the filter to allow databases including wild cards.
    ReplicateFilter rf = new ReplicateFilter();
    rf.setTungstenSchema("tungsten_foo");
    rf.setIgnore("foo,foobar?,bar*");
    filterHelper.setFilter(rf);

    // Confirm that the following commands are ignored if the default
    // database is foo.
    verifyStmtIgnore(filterHelper, 0, "bar", "create database foo");
    verifyStmtIgnore(filterHelper, 1, "foo", "drop database bar");
    verifyStmtIgnore(filterHelper, 2, "foo", "delete from bar2.test where id=2");
    verifyStmtIgnore(filterHelper, 3, "foo", "insert into foobar1.x1 values(1,2,3)");
    verifyStmtIgnore(filterHelper, 4, "foo", "update test_tab set age=32 where id=1");

    // Just for calibration ensure we accept a non-matching schema.
    verifyStmtAccept(filterHelper, 5, "foo", "insert into test.tab values(52,1)");

    // All done.
    filterHelper.done();
  }
  /** Verify that we always accept the Tungsten catalog even if it is explicitly ignored. */
  public void testTungstenCatalogAccept() throws ReplicatorException, InterruptedException {
    // Configure the filter to allow databases including wild cards.
    ReplicateFilter rf = new ReplicateFilter();
    rf.setTungstenSchema("tungsten_foo");
    rf.setIgnore("tungsten_foo");
    filterHelper.setFilter(rf);

    // Confirm that the following commands are accepted.
    verifyStmtAccept(
        filterHelper, 0, "bar", "delete from tungsten_foo.trep_commit_seqno where task_id=9");
    verifyRowAccept(
        filterHelper,
        1,
        "tungsten_foo",
        "trep_commit_seqno",
        new String[] {"task_id"},
        new Object[] {0});

    // All done.
    filterHelper.done();
  }
  /** Verify that we handle cases where a subset of databases and/or tables is ignored. */
  public void testSchemasIgnoreSubset() throws ReplicatorException, InterruptedException {
    // Configure the filter to allow databases including wild cards.
    ReplicateFilter rf = new ReplicateFilter();
    rf.setTungstenSchema("tungsten_foo");
    rf.setDo("foobar?,bar*,foo");
    rf.setIgnore("foo.test,foobar2,bar23*");
    filterHelper.setFilter(rf);

    // Confirm that the following commands are accepted if the default
    // database is foo.
    verifyStmtAccept(filterHelper, 0, null, "create database foobar1");
    verifyStmtAccept(filterHelper, 1, "foo", "drop table foo.test2");
    verifyStmtAccept(filterHelper, 2, "foo", "delete from bar2.test where id=2");

    // Confirm that we ignore subset values.
    verifyStmtIgnore(filterHelper, 3, "foo", "delete from foo.test where id=2");
    verifyStmtIgnore(filterHelper, 4, "foo", "create table foobar2.foobar1 (id int)");
    verifyStmtIgnore(filterHelper, 5, "foo", "drop database bar234");

    // All done.
    filterHelper.done();
  }
  /** Verify that we accept and ignore databases appropriately when using row updates. */
  public void testRowHandling() throws ReplicatorException, InterruptedException {
    // Configure the filter to allow databases including wild cards.
    ReplicateFilter rf = new ReplicateFilter();
    rf.setTungstenSchema("tungsten_foo");
    rf.setDo("foobar?,bar*,foo");
    rf.setIgnore("foo.test,foobar2,bar23*");
    filterHelper.setFilter(rf);

    // Verify accepted events.
    String names[] = {"id"};
    Long values[] = {new Long(99)};
    verifyRowAccept(filterHelper, 0, "foobar1", "foobar2", names, values);
    verifyRowAccept(filterHelper, 1, "bar2", "foo", names, values);
    verifyRowAccept(filterHelper, 2, "foo", "test2", names, values);

    // Verify ignored events.
    verifyRowIgnore(filterHelper, 3, "foo", "test", names, values);
    verifyRowIgnore(filterHelper, 4, "foobar2", "foobar1", names, values);
    verifyRowIgnore(filterHelper, 5, "bar234", "foobar1", names, values);

    // All done.
    filterHelper.done();
  }