/*
   * create a container that all threads can use
   */
  private long commonContainer() throws T_Fail {

    ContextManager cm1 = contextService.newContextManager();
    contextService.setCurrentContextManager(cm1);
    long cid;

    try {
      Transaction t = t_util.t_startTransaction();
      cid = t_util.t_addContainer(t, 0);
      t_util.t_commit(t);
      t.close();
    } catch (StandardException se) {

      cm1.cleanupOnError(se);
      throw T_Fail.exceptionFail(se);
    } finally {
      contextService.resetCurrentContextManager(cm1);
    }
    return cid;
  }
  /**
   * Run the tests
   *
   * @exception T_Fail Unexpected behaviour from the API
   */
  protected void setupTest() throws T_Fail {
    String rollbackOff = PropertyUtil.getSystemProperty(TEST_ROLLBACK_OFF);
    testRollback = !Boolean.valueOf(rollbackOff).booleanValue();

    // don't automatic boot this service if it gets left around
    if (startParams == null) {
      startParams = new Properties();
    }

    startParams.put(Property.NO_AUTO_BOOT, Boolean.TRUE.toString());
    // remove the service directory to ensure a clean run
    startParams.put(Property.DELETE_ON_CREATE, Boolean.TRUE.toString());

    // see if we are testing encryption
    startParams = T_Util.setEncryptionParam(startParams);

    try {
      factory =
          (RawStoreFactory)
              Monitor.createPersistentService(
                  getModuleToTestProtocolName(), testService, startParams);
      if (factory == null) {
        throw T_Fail.testFailMsg(getModuleToTestProtocolName() + " service not started.");
      }

      lf = factory.getLockFactory();
      if (lf == null) {
        throw T_Fail.testFailMsg("LockFactory.MODULE not found");
      }
    } catch (StandardException mse) {
      throw T_Fail.exceptionFail(mse);
    }

    t_util = new T_Util(factory, lf, contextService);
    commonContainer = commonContainer();

    return;
  }
  /*
   * create a stream container load with rowCount number of rows.
   * fetch it all back, and check to make sure all rows are correct.
   */
  protected void SF001(int rowCount, int columnCount, int columnType, boolean forceAbort)
      throws StandardException, T_Fail {

    Transaction t = t_util.t_startTransaction();

    int segmentId = StreamContainerHandle.TEMPORARY_SEGMENT;
    Properties properties = new Properties();
    properties.put(RawStoreFactory.STREAM_FILE_BUFFER_SIZE_PARAMETER, "16384");

    // create row source
    T_RowSource testRowSource = null;
    if (forceAbort)
      testRowSource = new T_RowSource(rowCount, columnCount, columnType, forceAbort, t);
    else testRowSource = new T_RowSource(rowCount, columnCount, columnType, forceAbort, null);

    long startms = System.currentTimeMillis();

    long containerId = t.addAndLoadStreamContainer(segmentId, properties, testRowSource, null);

    long endms = System.currentTimeMillis();
    long time = endms - startms;
    REPORT("SF001 - write: " + time + "ms");

    // open the container, and start fetching...
    StreamContainerHandle scHandle = t.openStreamContainer(segmentId, containerId, false);

    // set up the template row
    DataValueDescriptor template[] = null;
    template = testRowSource.getTemplate();

    DataValueDescriptor readRow[] = null;
    readRow = testRowSource.getTemplate();
    segmentId = StreamContainerHandle.TEMPORARY_SEGMENT;
    int fetchCount = 0;
    startms = System.currentTimeMillis();
    ValueRow vReadRow = new ValueRow(readRow.length);
    while (scHandle.fetchNext(vReadRow)) {
      fetchCount++;
      // check to make sure the row is what we inserted.
      // this depends on T_RowSource generate identical rows.
      if (!vReadRow.toString().equals(template.toString()))
        throw T_Fail.testFailMsg(
            "Record's value incorrect, expected :"
                + template.toString()
                + ": - got :"
                + vReadRow.toString());
    }
    endms = System.currentTimeMillis();
    time = endms - startms;
    // check to make sure we got the right number of rows.
    if (fetchCount != rowCount)
      throw T_Fail.testFailMsg(
          "incorrect number of row fetched.  Expecting "
              + rowCount
              + " rows, got "
              + fetchCount
              + ", rows instead.");
    REPORT("SF001 - fetch: " + time + "ms");

    scHandle.close();

    t_util.t_commit(t);
    t.close();

    PASS(
        "SF001, rowCount = "
            + rowCount
            + ", columnCount = "
            + columnCount
            + ", clumn type: "
            + columnType);
  }