@Override
 public void runBare() throws Throwable {
   if (combosEvaluated) {
     super.runBare();
   } else {
     CombinationTestSupport[] combinations = getCombinations();
     for (int i = 0; i < combinations.length; i++) {
       CombinationTestSupport test = combinations[i];
       if (getName() == null || getName().equals(test.getName())) {
         test.runBare();
       }
     }
   }
 }
  private CombinationTestSupport[] getCombinations() {
    try {
      Method method = getClass().getMethod("initCombos", (Class[]) null);
      method.invoke(this, (Object[]) null);
    } catch (Throwable e) {
    }

    String name = getName().split(" ")[0];
    String comboSetupMethodName =
        "initCombosFor" + Character.toUpperCase(name.charAt(0)) + name.substring(1);
    try {
      Method method = getClass().getMethod(comboSetupMethodName, (Class[]) null);
      method.invoke(this, (Object[]) null);
    } catch (Throwable e) {
    }

    try {
      ArrayList<HashMap<String, Object>> expandedOptions = new ArrayList<HashMap<String, Object>>();
      expandCombinations(new ArrayList<ComboOption>(comboOptions.values()), expandedOptions);

      if (expandedOptions.isEmpty()) {
        combosEvaluated = true;
        return new CombinationTestSupport[] {this};
      } else {

        ArrayList<CombinationTestSupport> result = new ArrayList<CombinationTestSupport>();
        // Run the test case for each possible combination
        for (Iterator<HashMap<String, Object>> iter = expandedOptions.iterator();
            iter.hasNext(); ) {
          CombinationTestSupport combo =
              (CombinationTestSupport) TestSuite.createTest(getClass(), name);
          combo.combosEvaluated = true;
          combo.setOptions(iter.next());
          result.add(combo);
        }

        CombinationTestSupport rc[] = new CombinationTestSupport[result.size()];
        result.toArray(rc);
        return rc;
      }
    } catch (Throwable e) {
      combosEvaluated = true;
      return new CombinationTestSupport[] {this};
    }
  }
 protected void tearDown() throws Exception {
   ignoreClientError.set(true);
   ignoreServerError.set(true);
   try {
     if (clientTransport != null) {
       clientTransport.stop();
     }
     if (serverTransport != null) {
       serverTransport.stop();
     }
     if (server != null) {
       server.stop();
     }
   } catch (Throwable e) {
     e.printStackTrace();
   }
   super.tearDown();
 }
 protected void setUp() throws Exception {
   super.setUp();
   startTransportServer();
 }