RYA-67 Making Accumulo integration tests faster by sharing MiniAccumulo

Each test execution shares a MiniAccumulo instance via a static singleton.
Tests have been updated to use different rya instance names and different
user names to make the tests independent from other tests.


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/d3ba442f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/d3ba442f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/d3ba442f

Branch: refs/heads/master
Commit: d3ba442f045932f8cc70b4c4eb139a8debc1de40
Parents: 643608c
Author: Jonathan Wonders <jwonder...@gmail.com>
Authored: Thu May 18 20:19:26 2017 -0400
Committer: Aaron Mihalik <miha...@alum.mit.edu>
Committed: Fri Jun 2 18:49:20 2017 -0400

----------------------------------------------------------------------
 dao/accumulo.rya/pom.xml                        |   3 +
 .../org/apache/rya/accumulo/AccumuloITBase.java |  29 +-
 .../apache/rya/accumulo/AccumuloRyaITBase.java  |  73 +----
 .../rya/accumulo/MiniAccumuloSingleton.java     |  84 ++++++
 .../rya/accumulo/RyaTestInstanceRule.java       |  94 +++++++
 .../AccumuloRyaDetailsRepositoryIT.java         |  20 +-
 .../api/client/accumulo/AccumuloAddUserIT.java  | 129 ++++-----
 .../client/accumulo/AccumuloCreatePCJIT.java    |  39 +--
 .../client/accumulo/AccumuloDeletePCJIT.java    |  36 +--
 .../accumulo/AccumuloGetInstanceDetailsIT.java  |  14 +-
 .../api/client/accumulo/AccumuloInstallIT.java  |   4 +-
 .../accumulo/AccumuloListInstancesIT.java       |  19 ++
 .../accumulo/AccumuloLoadStatementsFileIT.java  |   9 +-
 .../client/accumulo/AccumuloRemoveUserIT.java   |  63 +++--
 .../client/accumulo/AccumuloUninstallIT.java    |   2 +-
 .../rya/api/client/accumulo/FluoITBase.java     | 120 ++++----
 .../org/apache/rya/shell/RyaShellITBase.java    |  25 +-
 .../accumulo/PcjTablesIntegrationTest.java      |  43 +--
 .../rya/indexing/pcj/fluo/FluoITBase.java       | 282 +++++++++++++++++++
 .../indexing/pcj/fluo/KafkaExportITBase.java    |   6 -
 .../rya/indexing/pcj/fluo/RyaExportITBase.java  | 114 +-------
 .../indexing/pcj/fluo/api/GetPcjMetadataIT.java |  10 +-
 .../indexing/pcj/fluo/api/GetQueryReportIT.java |   5 +-
 .../pcj/fluo/integration/CreateDeleteIT.java    |  14 +-
 .../indexing/pcj/fluo/integration/InputIT.java  |  16 +-
 .../indexing/pcj/fluo/integration/QueryIT.java  |  11 +-
 .../pcj/fluo/integration/RyaExportIT.java       |   4 +-
 .../RyaInputIncrementalUpdateIT.java            |  12 +-
 .../pcj/fluo/integration/StreamingTestIT.java   |   4 +-
 .../HistoricStreamingVisibilityIT.java          |  12 +-
 .../pcj/fluo/visibility/PcjVisibilityIT.java    |  45 +--
 31 files changed, 792 insertions(+), 549 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/pom.xml
----------------------------------------------------------------------
diff --git a/dao/accumulo.rya/pom.xml b/dao/accumulo.rya/pom.xml
index 6248475..5812cda 100644
--- a/dao/accumulo.rya/pom.xml
+++ b/dao/accumulo.rya/pom.xml
@@ -129,6 +129,9 @@ under the License.
                         <artifactId>maven-shade-plugin</artifactId>
                         <executions>
                             <execution>
+                                <goals>
+                                    <goal>shade</goal>
+                                </goals>
                                 <configuration>
                                     <transformers>
                                         <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloITBase.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloITBase.java 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloITBase.java
index 5225555..6d66090 100644
--- a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloITBase.java
+++ b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloITBase.java
@@ -18,8 +18,6 @@
  */
 package org.apache.rya.accumulo;
 
-import java.io.IOException;
-
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Connector;
@@ -27,9 +25,8 @@ import org.apache.accumulo.minicluster.MiniAccumuloCluster;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.zookeeper.ClientCnxn;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Rule;
 
 /**
  * Boilerplate code for a unit test that uses a {@link MiniAccumuloCluster}.
@@ -39,26 +36,17 @@ import org.junit.BeforeClass;
  */
 public class AccumuloITBase {
 
-    // Managed the MiniAccumuloCluster
-    private MiniAccumuloClusterInstance cluster = null;
+    private static MiniAccumuloClusterInstance cluster = 
MiniAccumuloSingleton.getInstance();
+
+    @Rule
+    public RyaTestInstanceRule testInstance = new RyaTestInstanceRule(false);
+
 
     @BeforeClass
     public static void killLoudLogs() {
         Logger.getLogger(ClientCnxn.class).setLevel(Level.ERROR);
     }
 
-    @Before
-    public void initCluster() throws IOException, InterruptedException, 
AccumuloException, AccumuloSecurityException {
-        cluster = new MiniAccumuloClusterInstance();
-        cluster.startMiniAccumulo();
-    }
-
-
-    @After
-    public void tearDownCluster() throws IOException, InterruptedException {
-        cluster.stopMiniAccumulo();
-    }
-
     /**
      * @return The {@link MiniAccumuloClusterInstance} used by the tests.
      */
@@ -102,4 +90,9 @@ public class AccumuloITBase {
     public Connector getConnector() throws AccumuloException, 
AccumuloSecurityException {
         return cluster.getConnector();
     }
+
+    public String getRyaInstanceName() {
+        return testInstance.getRyaInstanceName();
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaITBase.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaITBase.java 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaITBase.java
index a832c32..41d5cea 100644
--- 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaITBase.java
+++ 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/AccumuloRyaITBase.java
@@ -18,31 +18,7 @@
  */
 package org.apache.rya.accumulo;
 
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.TableNotFoundException;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-
-import com.google.common.base.Optional;
-
-import org.apache.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository;
-import org.apache.rya.api.instance.RyaDetails;
-import org.apache.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
-import org.apache.rya.api.instance.RyaDetails.FreeTextIndexDetails;
-import org.apache.rya.api.instance.RyaDetails.GeoIndexDetails;
-import org.apache.rya.api.instance.RyaDetails.JoinSelectivityDetails;
-import org.apache.rya.api.instance.RyaDetails.PCJIndexDetails;
-import org.apache.rya.api.instance.RyaDetails.ProspectorDetails;
-import org.apache.rya.api.instance.RyaDetails.TemporalIndexDetails;
-import org.apache.rya.api.instance.RyaDetailsRepository;
-import 
org.apache.rya.api.instance.RyaDetailsRepository.AlreadyInitializedException;
-import 
org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
+import org.junit.Rule;
 
 /**
  * Contains boilerplate code for spinning up a Mini Accumulo Cluster and 
initializing
@@ -51,59 +27,20 @@ import 
org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryExce
  */
 public class AccumuloRyaITBase {
 
-    // Managed the MiniAccumuloCluster
-    private static final MiniAccumuloClusterInstance cluster = new 
MiniAccumuloClusterInstance();
-
-    // Manage the Rya instances that are hosted on the cluster
-    protected static final AtomicInteger ryaInstanceNameCounter = new 
AtomicInteger(1);
-    private String ryaInstanceName;
-
-    @BeforeClass
-    public static void initCluster() throws IOException, InterruptedException, 
AccumuloException, AccumuloSecurityException {
-        cluster.startMiniAccumulo();
-    }
-
-    @Before
-    public void prepareForNextTest() throws AccumuloException, 
AccumuloSecurityException, TableNotFoundException, AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        // Get the next Rya instance name.
-        ryaInstanceName = "testInstance" + 
ryaInstanceNameCounter.getAndIncrement() + "_";
-
-        // Create Rya Details for the instance name.
-        final RyaDetailsRepository detailsRepo = new 
AccumuloRyaInstanceDetailsRepository(cluster.getConnector(), ryaInstanceName);
-
-        final RyaDetails details = RyaDetails.builder()
-                .setRyaInstanceName(ryaInstanceName)
-                .setRyaVersion("0.0.0.0")
-                .setFreeTextDetails( new FreeTextIndexDetails(true) )
-                .setEntityCentricIndexDetails( new 
EntityCentricIndexDetails(true) )
-              //RYA-215                .setGeoIndexDetails( new 
GeoIndexDetails(true) )
-                .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-                .setPCJIndexDetails(
-                        PCJIndexDetails.builder()
-                            .setEnabled(true) )
-                .setJoinSelectivityDetails( new JoinSelectivityDetails( 
Optional.<Date>absent() ) )
-                .setProspectorDetails( new ProspectorDetails( 
Optional.<Date>absent() ))
-                .build();
-
-        detailsRepo.initialize(details);
-    }
-
-    @AfterClass
-    public static void tearDownCluster() throws IOException, 
InterruptedException {
-        cluster.stopMiniAccumulo();
-    }
+    @Rule
+    public RyaTestInstanceRule testInstance = new RyaTestInstanceRule(true);
 
     /**
      * @return The {@link MiniAccumuloClusterInstance} used by the tests.
      */
     public MiniAccumuloClusterInstance getClusterInstance() {
-        return cluster;
+        return MiniAccumuloSingleton.getInstance();
     }
 
     /**
      * @return The name of the Rya instance that is being used for the current 
test.
      */
     public String getRyaInstanceName() {
-        return ryaInstanceName;
+        return testInstance.getRyaInstanceName();
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/MiniAccumuloSingleton.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/MiniAccumuloSingleton.java
 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/MiniAccumuloSingleton.java
new file mode 100644
index 0000000..8d731d3
--- /dev/null
+++ 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/MiniAccumuloSingleton.java
@@ -0,0 +1,84 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rya.accumulo;
+
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public final class MiniAccumuloSingleton {
+
+    public static MiniAccumuloClusterInstance getInstance() {
+        return InstanceHolder.SINGLETON.instance;
+    }
+
+    private MiniAccumuloSingleton() {
+        // hiding implicit default constructor
+    }
+
+    private enum InstanceHolder {
+
+        SINGLETON;
+
+        private final Logger log;
+        private final MiniAccumuloClusterInstance instance;
+
+        InstanceHolder() {
+            this.log = LoggerFactory.getLogger(MiniAccumuloSingleton.class);
+            this.instance = new MiniAccumuloClusterInstance();
+            try {
+                this.instance.startMiniAccumulo();
+
+                // JUnit does not have an overall lifecycle event for tearing 
down
+                // this kind of resource, but shutdown hooks work alright in 
practice
+                // since this should only be used during testing
+
+                // The only other alternative for lifecycle management is to 
use a
+                // suite lifecycle to enclose the tests that need this 
resource.
+                // In practice this becomes unwieldy.
+
+                Runtime.getRuntime().addShutdownHook(new Thread() {
+                    @Override
+                    public void run() {
+                        try {
+                            InstanceHolder.this.instance.stopMiniAccumulo();
+                        } catch (Throwable t) {
+                            // logging frameworks will likely be shut down
+                            t.printStackTrace(System.err);
+                        }
+                    }
+                });
+
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                log.error("Interrupted while starting mini accumulo", e);
+            } catch (IOException | AccumuloException | 
AccumuloSecurityException e) {
+                log.error("Unexpected error while starting mini accumulo", e);
+            } catch (Throwable e) {
+                // catching throwable because failure to construct an enum
+                // instance will lead to another error being thrown downstream
+                log.error("Unexpected throwable while starting mini accumulo", 
e);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/RyaTestInstanceRule.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/RyaTestInstanceRule.java
 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/RyaTestInstanceRule.java
new file mode 100644
index 0000000..38b4b43
--- /dev/null
+++ 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/RyaTestInstanceRule.java
@@ -0,0 +1,94 @@
+package org.apache.rya.accumulo;
+
+import com.google.common.base.Optional;
+import org.apache.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository;
+import org.apache.rya.api.client.Install.InstallConfiguration;
+import org.apache.rya.api.client.RyaClient;
+import org.apache.rya.api.instance.RyaDetails;
+import org.apache.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
+import org.apache.rya.api.instance.RyaDetails.FreeTextIndexDetails;
+import org.apache.rya.api.instance.RyaDetails.JoinSelectivityDetails;
+import org.apache.rya.api.instance.RyaDetails.PCJIndexDetails;
+import org.apache.rya.api.instance.RyaDetails.ProspectorDetails;
+import org.apache.rya.api.instance.RyaDetails.TemporalIndexDetails;
+import org.apache.rya.api.instance.RyaDetailsRepository;
+import org.junit.rules.ExternalResource;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+public class RyaTestInstanceRule extends ExternalResource {
+
+    private static final MiniAccumuloClusterInstance cluster = 
MiniAccumuloSingleton.getInstance();
+    private static final AtomicInteger ryaInstanceNameCounter = new 
AtomicInteger(1);
+    private static final AtomicInteger userId = new AtomicInteger(1);
+
+    private final boolean install;
+    private String ryaInstanceName;
+
+    public RyaTestInstanceRule(boolean install) {
+        this.install = install;
+    }
+
+    public String getRyaInstanceName() {
+        if (ryaInstanceName == null) {
+            throw new IllegalStateException("Cannot get rya instance name 
outside of a test execution.");
+        }
+        return ryaInstanceName;
+    }
+
+    public String createUniqueUser() {
+        int id = userId.getAndIncrement();
+        return "user_" + id;
+    }
+
+    @Override
+    protected void before() throws Throwable {
+
+        // Get the next Rya instance name.
+        ryaInstanceName = "testInstance_" + 
ryaInstanceNameCounter.getAndIncrement();
+
+        if (install) {
+            // Create Rya Details for the instance name.
+            final RyaDetailsRepository detailsRepo = new 
AccumuloRyaInstanceDetailsRepository(cluster.getConnector(), ryaInstanceName);
+
+            final RyaDetails details = RyaDetails.builder()
+                    .setRyaInstanceName(ryaInstanceName)
+                    .setRyaVersion("0.0.0.0")
+                    .setFreeTextDetails(new FreeTextIndexDetails(true))
+                    .setEntityCentricIndexDetails(new 
EntityCentricIndexDetails(true))
+                    //RYA-215                .setGeoIndexDetails( new 
GeoIndexDetails(true) )
+                    .setTemporalIndexDetails(new TemporalIndexDetails(true))
+                    
.setPCJIndexDetails(PCJIndexDetails.builder().setEnabled(true))
+                    .setJoinSelectivityDetails(new 
JoinSelectivityDetails(Optional.absent()))
+                    .setProspectorDetails(new 
ProspectorDetails(Optional.absent()))
+                    .build();
+
+            detailsRepo.initialize(details);
+        }
+    }
+
+    @Override
+    protected void after() {
+        ryaInstanceName = null;
+        // TODO consider teardown of instance (probably requires additional 
features)
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/instance/AccumuloRyaDetailsRepositoryIT.java
----------------------------------------------------------------------
diff --git 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/instance/AccumuloRyaDetailsRepositoryIT.java
 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/instance/AccumuloRyaDetailsRepositoryIT.java
index 50783af..93ae174 100644
--- 
a/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/instance/AccumuloRyaDetailsRepositoryIT.java
+++ 
b/dao/accumulo.rya/src/test/java/org/apache/rya/accumulo/instance/AccumuloRyaDetailsRepositoryIT.java
@@ -56,7 +56,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
     @Test
     public void initializeAndGet() throws AccumuloException, 
AccumuloSecurityException, AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
+        final String instanceName = getRyaInstanceName();
 
         // Create the metadata object the repository will be initialized with.
         final RyaDetails details = RyaDetails.builder()
@@ -98,7 +98,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
     @Test(expected = AlreadyInitializedException.class)
     public void initialize_alreadyInitialized() throws 
AlreadyInitializedException, RyaDetailsRepositoryException, AccumuloException, 
AccumuloSecurityException {
-        final String instanceName = "testInstance";
+        final String instanceName = getRyaInstanceName();
 
         // Create the metadata object the repository will be initialized with.
         final RyaDetails details = RyaDetails.builder()
@@ -139,7 +139,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
     public void getRyaInstance_notInitialized() throws AccumuloException, 
AccumuloSecurityException, NotInitializedException, 
RyaDetailsRepositoryException {
         // Setup the repository that will be tested using a mini instance of 
Accumulo.
         final Connector connector = getClusterInstance().getConnector();
-        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, "testInstance");
+        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, getRyaInstanceName());
 
         // Try to fetch the details from the uninitialized repository.
         repo.getRyaInstanceDetails();
@@ -147,7 +147,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
     @Test
     public void isInitialized_true() throws AccumuloException, 
AccumuloSecurityException, AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
+        final String instanceName = getRyaInstanceName();
 
         // Create the metadata object the repository will be initialized with.
         final RyaDetails details = RyaDetails.builder()
@@ -176,7 +176,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
         // Setup the repository that will be tested using a mini instance of 
Accumulo.
         final MiniAccumuloClusterInstance clusterInstance = 
getClusterInstance();
         final Connector connector = clusterInstance.getConnector();
-        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, "testInstance");
+        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, instanceName);
 
         // Initialize the repository
         repo.initialize(details);
@@ -189,7 +189,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
     public void isInitialized_false() throws AccumuloException, 
AccumuloSecurityException, RyaDetailsRepositoryException {
         // Setup the repository that will be tested using a mock instance of 
Accumulo.
         final Connector connector = getClusterInstance().getConnector();
-        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, "testInstance");
+        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, getRyaInstanceName());
 
         // Ensure the repository reports that is has not been initialized.
         assertFalse( repo.isInitialized() );
@@ -197,7 +197,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
     @Test
     public void update() throws AlreadyInitializedException, 
RyaDetailsRepositoryException, AccumuloException, AccumuloSecurityException {
-        final String instanceName = "testInstance";
+        final String instanceName = getRyaInstanceName();
 
         // Create the metadata object the repository will be initialized with.
         final RyaDetails details = RyaDetails.builder()
@@ -225,7 +225,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
         // Setup the repository that will be tested using a mini instance of 
Accumulo.
         final Connector connector = getClusterInstance().getConnector();
-        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, "testInstance");
+        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, instanceName);
 
         // Initialize the repository
         repo.initialize(details);
@@ -245,7 +245,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
     @Test(expected = ConcurrentUpdateException.class)
     public void update_outOfDate() throws AccumuloException, 
AccumuloSecurityException, AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
+        final String instanceName = getRyaInstanceName();
 
         // Create the metadata object the repository will be initialized with.
         final RyaDetails details = RyaDetails.builder()
@@ -273,7 +273,7 @@ public class AccumuloRyaDetailsRepositoryIT extends 
AccumuloITBase {
 
         // Setup the repository that will be tested using a mini instance of 
Accumulo.
         final Connector connector = getClusterInstance().getConnector();
-        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, "testInstance");
+        final RyaDetailsRepository repo = new 
AccumuloRyaInstanceDetailsRepository(connector, instanceName);
 
         // Initialize the repository
         repo.initialize(details);

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java
index 53e0bf6..787d110 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java
@@ -32,6 +32,8 @@ import org.apache.rya.api.client.RyaClient;
 import org.apache.rya.api.instance.RyaDetails;
 import org.apache.rya.indexing.accumulo.ConfigUtils;
 import org.apache.rya.sail.config.RyaSailFactory;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 import org.openrdf.model.ValueFactory;
 import org.openrdf.sail.Sail;
@@ -44,31 +46,44 @@ import com.google.common.collect.ImmutableList;
  */
 public class AccumuloAddUserIT extends AccumuloITBase {
 
+    private String ADMIN_USER = testInstance.createUniqueUser();
+
+    @Before
+    public void beforeClass() throws Exception {
+        final SecurityOperations secOps = 
super.getConnector().securityOperations();
+
+        // Create the user that will install the instance of Rya.
+        secOps.createLocalUser(ADMIN_USER, new PasswordToken(ADMIN_USER));
+        secOps.grantSystemPermission(ADMIN_USER, 
SystemPermission.CREATE_TABLE);
+    }
+
+    @After
+    public void afterClass() throws Exception {
+        final SecurityOperations secOps = 
super.getConnector().securityOperations();
+        secOps.dropLocalUser(ADMIN_USER);
+    }
+
     /**
      * Ensure that the user who installs the instance of Rya is reported as 
being a user who can access it.
      */
     @Test
     public void ryaDetailsIncludesOriginalUser() throws Exception {
-        final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
-        // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
 
         // Create a Rya Client for that user.
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(ADMIN_USER, 
ADMIN_USER.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(ADMIN_USER, ADMIN_USER));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Ensure the Rya instance's details only contain the username of the 
user who installed the instance.
         final ImmutableList<String> expectedUsers = 
ImmutableList.<String>builder()
-                .add("userA")
+                .add(ADMIN_USER)
                 .build();
 
-        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails("testInstance_").get();
+        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails(getRyaInstanceName()).get();
         assertEquals(expectedUsers, details.getUsers());
     }
 
@@ -77,32 +92,29 @@ public class AccumuloAddUserIT extends AccumuloITBase {
      */
     @Test
     public void userAddedAlsoAddedToRyaDetails() throws Exception {
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
-        // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
-
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(ADMIN_USER, 
ADMIN_USER.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(ADMIN_USER, ADMIN_USER));
 
         // Create the user that will be added to the instance of Rya.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Add the user.
-        userAClient.getAddUser().addUser("testInstance_", "userB");
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
 
         // Ensure the Rya instance's details have been updated to include the 
added user.
         final ImmutableList<String> expectedUsers = 
ImmutableList.<String>builder()
-                .add("userA")
-                .add("userB")
+                .add(ADMIN_USER)
+                .add(user)
                 .build();
 
-        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails("testInstance_").get();
+        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails(getRyaInstanceName()).get();
         assertEquals(expectedUsers, details.getUsers());
     }
 
@@ -111,21 +123,18 @@ public class AccumuloAddUserIT extends AccumuloITBase {
      */
     @Test
     public void userNotAddedCanNotInsert() throws Exception {
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
-        // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
-
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(ADMIN_USER, 
ADMIN_USER.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(ADMIN_USER, ADMIN_USER));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Create the user that will not be added to the instance of Rya, but 
will try to scan it.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
         //Try to add a statement the Rya instance with the unauthorized user. 
This should fail.
         boolean securityExceptionThrown = false;
@@ -133,8 +142,8 @@ public class AccumuloAddUserIT extends AccumuloITBase {
         Sail sail = null;
         SailConnection sailConn = null;
         try {
-            final AccumuloRdfConfiguration userBConf = 
makeRyaConfig("testInstance_", "userB", "userB", getInstanceName(), 
getZookeepers());
-            sail = RyaSailFactory.getInstance(userBConf);
+            final AccumuloRdfConfiguration userCConf = 
makeRyaConfig(getRyaInstanceName(), user, user, getInstanceName(), 
getZookeepers());
+            sail = RyaSailFactory.getInstance(userCConf);
             sailConn = sail.getConnection();
 
             final ValueFactory vf = sail.getValueFactory();
@@ -147,14 +156,10 @@ public class AccumuloAddUserIT extends AccumuloITBase {
             }
         } finally {
             if(sailConn != null) {
-                try {
-                    sailConn.close();
-                } finally { }
+                sailConn.close();
             }
             if(sail != null) {
-                try {
-                    sail.shutDown();
-                } finally { }
+                sail.shutDown();
             }
         }
 
@@ -166,32 +171,29 @@ public class AccumuloAddUserIT extends AccumuloITBase {
      */
     @Test
     public void userAddedCanInsert() throws Exception {
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
-        // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
-
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(ADMIN_USER, 
ADMIN_USER.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(ADMIN_USER, ADMIN_USER));
 
         // Create the user that will not be added to the instance of Rya, but 
will try to scan it.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Add the user.
-        userAClient.getAddUser().addUser("testInstance_", "userB");
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
 
         // Try to add a statement to the Rya instance. This should succeed.
         Sail sail = null;
         SailConnection sailConn = null;
 
         try {
-            final AccumuloRdfConfiguration userBConf = 
makeRyaConfig("testInstance_", "userB", "userB", getInstanceName(), 
getZookeepers());
-            sail = RyaSailFactory.getInstance(userBConf);
+            final AccumuloRdfConfiguration userDConf = 
makeRyaConfig(getRyaInstanceName(), user, user, getInstanceName(), 
getZookeepers());
+            sail = RyaSailFactory.getInstance(userDConf);
             sailConn = sail.getConnection();
 
             final ValueFactory vf = sail.getValueFactory();
@@ -201,14 +203,10 @@ public class AccumuloAddUserIT extends AccumuloITBase {
 
         } finally {
             if(sailConn != null) {
-                try {
-                    sailConn.close();
-                } finally { }
+                sailConn.close();
             }
             if(sail != null) {
-                try {
-                    sail.shutDown();
-                } finally { }
+                sail.shutDown();
             }
         }
     }
@@ -218,33 +216,30 @@ public class AccumuloAddUserIT extends AccumuloITBase {
      */
     @Test
     public void addUserTwice() throws Exception {
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
-        // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
-
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(ADMIN_USER, 
ADMIN_USER.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(ADMIN_USER, ADMIN_USER));
 
         // Create the user that will not be added to the instance of Rya, but 
will try to scan it.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Add the user.
-        userAClient.getAddUser().addUser("testInstance_", "userB");
-        userAClient.getAddUser().addUser("testInstance_", "userB");
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
 
         // Ensure the Rya instance's details only contain the username of the 
user who installed the instance.
         final ImmutableList<String> expectedUsers = 
ImmutableList.<String>builder()
-                .add("userA")
-                .add("userB")
+                .add(ADMIN_USER)
+                .add(user)
                 .build();
 
-        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails("testInstance_").get();
+        final RyaDetails details = 
userAClient.getGetInstanceDetails().getDetails(getRyaInstanceName()).get();
         assertEquals(expectedUsers, details.getUsers());
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloCreatePCJIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloCreatePCJIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloCreatePCJIT.java
index f900837..cb4b29a 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloCreatePCJIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloCreatePCJIT.java
@@ -52,13 +52,8 @@ public class AccumuloCreatePCJIT extends FluoITBase {
 
     @Test
     public void createPCJ() throws Exception {
+        AccumuloConnectionDetails connectionDetails = 
createConnectionDetails();
         // Initialize the commands that will be used by this test.
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
         final CreatePCJ createPCJ = new AccumuloCreatePCJ(connectionDetails, 
accumuloConn);
 
         // Create a PCJ.
@@ -68,10 +63,10 @@ public class AccumuloCreatePCJIT extends FluoITBase {
                   "?x <http://talksTo> <http://Eve>. " +
                   "?x <http://worksAt> <http://TacoJoint>." +
                 "}";
-        final String pcjId = createPCJ.createPCJ(RYA_INSTANCE_NAME, sparql);
+        final String pcjId = createPCJ.createPCJ(getRyaInstanceName(), sparql);
 
         // Verify the RyaDetails were updated to include the new PCJ.
-        final Optional<RyaDetails> ryaDetails = new 
AccumuloGetInstanceDetails(connectionDetails, 
accumuloConn).getDetails(RYA_INSTANCE_NAME);
+        final Optional<RyaDetails> ryaDetails = new 
AccumuloGetInstanceDetails(connectionDetails, 
accumuloConn).getDetails(getRyaInstanceName());
         final PCJDetails pcjDetails = 
ryaDetails.get().getPCJIndexDetails().getPCJDetails().get(pcjId);
 
         assertEquals(pcjId, pcjDetails.getId());
@@ -79,7 +74,8 @@ public class AccumuloCreatePCJIT extends FluoITBase {
         assertEquals(PCJUpdateStrategy.INCREMENTAL, 
pcjDetails.getUpdateStrategy().get());
 
         // Verify the PCJ's metadata was initialized.
-        try(final PrecomputedJoinStorage pcjStorage = new 
AccumuloPcjStorage(accumuloConn, RYA_INSTANCE_NAME)) {
+
+        try(final PrecomputedJoinStorage pcjStorage = new 
AccumuloPcjStorage(accumuloConn, getRyaInstanceName())) {
             final PcjMetadata pcjMetadata = pcjStorage.getPcjMetadata(pcjId);
             assertEquals(sparql, pcjMetadata.getSparql());
             assertEquals(0L, pcjMetadata.getCardinality());
@@ -120,21 +116,14 @@ public class AccumuloCreatePCJIT extends FluoITBase {
 
     @Test(expected = InstanceDoesNotExistException.class)
     public void createPCJ_instanceDoesNotExist() throws 
InstanceDoesNotExistException, RyaClientException {
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
         // Create a PCJ for a Rya instance that doesn't exist.
-        final CreatePCJ createPCJ = new AccumuloCreatePCJ(connectionDetails, 
accumuloConn);
+        final CreatePCJ createPCJ = new 
AccumuloCreatePCJ(createConnectionDetails(), accumuloConn);
         createPCJ.createPCJ("invalidInstanceName", "SELECT * where { ?a ?b ?c 
}");
     }
 
     @Test(expected = RyaClientException.class)
     public void createPCJ_invalidSparql() throws 
DuplicateInstanceNameException, RyaClientException {
         // Install an instance of Rya.
-        final String instanceName = "testInstance_";
         final InstallConfiguration installConfig = 
InstallConfiguration.builder()
                 .setEnableTableHashPrefix(true)
                 .setEnableEntityCentricIndex(false)
@@ -142,20 +131,14 @@ public class AccumuloCreatePCJIT extends FluoITBase {
                 .setEnableTemporalIndex(false)
                 .setEnablePcjIndex(true)
                 .setEnableGeoIndex(false)
-                .setFluoPcjAppName("fluo_app_name")
+                .setFluoPcjAppName(getRyaInstanceName())
                 .build();
 
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
-        final Install install = new AccumuloInstall(connectionDetails, 
accumuloConn);
-        install.install(instanceName, installConfig);
+        final Install install = new AccumuloInstall(createConnectionDetails(), 
accumuloConn);
+        install.install(getRyaInstanceName(), installConfig);
 
         // Create a PCJ using invalid SPARQL.
-        final CreatePCJ createPCJ = new AccumuloCreatePCJ(connectionDetails, 
accumuloConn);
-        createPCJ.createPCJ(instanceName, "not valid sparql");
+        final CreatePCJ createPCJ = new 
AccumuloCreatePCJ(createConnectionDetails(), accumuloConn);
+        createPCJ.createPCJ(getRyaInstanceName(), "not valid sparql");
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloDeletePCJIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloDeletePCJIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloDeletePCJIT.java
index fd75167..4c6d976 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloDeletePCJIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloDeletePCJIT.java
@@ -48,13 +48,7 @@ public class AccumuloDeletePCJIT extends FluoITBase {
     @Test
     public void deletePCJ() throws InstanceDoesNotExistException, 
RyaClientException, PCJStorageException, RepositoryException {
         // Initialize the commands that will be used by this test.
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
-        final CreatePCJ createPCJ = new AccumuloCreatePCJ(connectionDetails, 
accumuloConn);
+        final CreatePCJ createPCJ = new 
AccumuloCreatePCJ(createConnectionDetails(), accumuloConn);
 
         // Create a PCJ.
         final String sparql =
@@ -63,7 +57,7 @@ public class AccumuloDeletePCJIT extends FluoITBase {
                   "?x <http://talksTo> <http://Eve>. " +
                   "?x <http://worksAt> <http://TacoJoint>." +
                 "}";
-        final String pcjId = createPCJ.createPCJ(RYA_INSTANCE_NAME, sparql);
+        final String pcjId = createPCJ.createPCJ(getRyaInstanceName(), sparql);
 
         // Verify a Query ID was added for the query within the Fluo app.
         List<String> fluoQueryIds = new 
ListQueryIds().listQueryIds(fluoClient);
@@ -85,7 +79,8 @@ public class AccumuloDeletePCJIT extends FluoITBase {
         // Verify the correct results were exported.
         fluo.waitForObservers();
 
-        try(final PrecomputedJoinStorage pcjStorage = new 
AccumuloPcjStorage(accumuloConn, RYA_INSTANCE_NAME)) {
+
+        try(final PrecomputedJoinStorage pcjStorage = new 
AccumuloPcjStorage(accumuloConn, getRyaInstanceName())) {
             final Set<BindingSet> results = Sets.newHashSet( 
pcjStorage.listResults(pcjId) );
 
             final MapBindingSet bob = new MapBindingSet();
@@ -97,9 +92,10 @@ public class AccumuloDeletePCJIT extends FluoITBase {
             final Set<BindingSet> expected = Sets.<BindingSet>newHashSet(bob, 
charlie);
             assertEquals(expected, results);
 
+
             // Delete the PCJ.
-            final DeletePCJ deletePCJ = new 
AccumuloDeletePCJ(connectionDetails, accumuloConn);
-            deletePCJ.deletePCJ(RYA_INSTANCE_NAME, pcjId);
+            final DeletePCJ deletePCJ = new 
AccumuloDeletePCJ(createConnectionDetails(), accumuloConn);
+            deletePCJ.deletePCJ(getRyaInstanceName(), pcjId);
 
             // Ensure the PCJ's metadata has been removed from the storage.
             assertTrue( pcjStorage.listPcjs().isEmpty() );
@@ -115,27 +111,15 @@ public class AccumuloDeletePCJIT extends FluoITBase {
 
     @Test(expected = InstanceDoesNotExistException.class)
     public void deletePCJ_instanceDoesNotExist() throws 
InstanceDoesNotExistException, RyaClientException {
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
         // Delete a PCJ for a Rya instance that doesn't exist.
-        final DeletePCJ deletePCJ = new AccumuloDeletePCJ(connectionDetails, 
accumuloConn);
+        final DeletePCJ deletePCJ = new 
AccumuloDeletePCJ(createConnectionDetails(), accumuloConn);
         deletePCJ.deletePCJ("doesNotExist", "randomID");
     }
 
     @Test(expected = RyaClientException.class)
     public void deletePCJ_pcjDoesNotExist() throws 
InstanceDoesNotExistException, RyaClientException {
-        final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-                ACCUMULO_USER,
-                ACCUMULO_PASSWORD.toCharArray(),
-                super.cluster.getInstanceName(),
-                super.cluster.getZooKeepers());
-
         // Delete the PCJ.
-        final DeletePCJ deletePCJ = new AccumuloDeletePCJ(connectionDetails, 
accumuloConn);
-        deletePCJ.deletePCJ(RYA_INSTANCE_NAME, "randomID");
+        final DeletePCJ deletePCJ = new 
AccumuloDeletePCJ(createConnectionDetails(), accumuloConn);
+        deletePCJ.deletePCJ(getRyaInstanceName(), "randomID");
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloGetInstanceDetailsIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloGetInstanceDetailsIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloGetInstanceDetailsIT.java
index 4f12954..e7ae332 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloGetInstanceDetailsIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloGetInstanceDetailsIT.java
@@ -54,7 +54,7 @@ public class AccumuloGetInstanceDetailsIT extends 
AccumuloITBase {
     @Test
     public void getDetails() throws AccumuloException, 
AccumuloSecurityException, DuplicateInstanceNameException, RyaClientException {
         // Install an instance of Rya.
-        final String instanceName = "instance_name";
+        final String instanceName = getRyaInstanceName();
         final InstallConfiguration installConfig = 
InstallConfiguration.builder()
                 .setEnableTableHashPrefix(true)
                 .setEnableEntityCentricIndex(true)
@@ -106,19 +106,17 @@ public class AccumuloGetInstanceDetailsIT extends 
AccumuloITBase {
                 getZookeepers());
 
         final GetInstanceDetails getInstanceDetails = new 
AccumuloGetInstanceDetails(connectionDetails, getConnector());
-        getInstanceDetails.getDetails("instance_name");
+        getInstanceDetails.getDetails("instance_name_does_not_exist");
     }
 
     @Test
     public void getDetails_instanceDoesNotHaveDetails() throws 
AccumuloException, AccumuloSecurityException, InstanceDoesNotExistException, 
RyaClientException, TableExistsException {
         // Mimic a pre-details rya install.
-        final String instanceName = "instance_name";
-
         final TableOperations tableOps = getConnector().tableOperations();
 
-        final String spoTableName = instanceName + 
RdfCloudTripleStoreConstants.TBL_SPO_SUFFIX;
-        final String ospTableName = instanceName + 
RdfCloudTripleStoreConstants.TBL_OSP_SUFFIX;
-        final String poTableName = instanceName + 
RdfCloudTripleStoreConstants.TBL_PO_SUFFIX;
+        final String spoTableName = getRyaInstanceName() + 
RdfCloudTripleStoreConstants.TBL_SPO_SUFFIX;
+        final String ospTableName = getRyaInstanceName() + 
RdfCloudTripleStoreConstants.TBL_OSP_SUFFIX;
+        final String poTableName = getRyaInstanceName() + 
RdfCloudTripleStoreConstants.TBL_PO_SUFFIX;
         tableOps.create(spoTableName);
         tableOps.create(ospTableName);
         tableOps.create(poTableName);
@@ -131,7 +129,7 @@ public class AccumuloGetInstanceDetailsIT extends 
AccumuloITBase {
                 getZookeepers());
 
         final GetInstanceDetails getInstanceDetails = new 
AccumuloGetInstanceDetails(connectionDetails, getConnector());
-        final Optional<RyaDetails> details = 
getInstanceDetails.getDetails(instanceName);
+        final Optional<RyaDetails> details = 
getInstanceDetails.getDetails(getRyaInstanceName());
         assertFalse( details.isPresent() );
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloInstallIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloInstallIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloInstallIT.java
index 739d216..da717d7 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloInstallIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloInstallIT.java
@@ -40,7 +40,7 @@ public class AccumuloInstallIT extends AccumuloITBase {
     @Test
     public void install() throws AccumuloException, AccumuloSecurityException, 
DuplicateInstanceNameException, RyaClientException, NotInitializedException, 
RyaDetailsRepositoryException {
         // Install an instance of Rya.
-        final String instanceName = "testInstance_";
+        final String instanceName = getRyaInstanceName();
         final InstallConfiguration installConfig = 
InstallConfiguration.builder()
                 .setEnableTableHashPrefix(false)
                 .setEnableEntityCentricIndex(false)
@@ -68,7 +68,7 @@ public class AccumuloInstallIT extends AccumuloITBase {
     @Test(expected = DuplicateInstanceNameException.class)
     public void install_alreadyExists() throws DuplicateInstanceNameException, 
RyaClientException, AccumuloException, AccumuloSecurityException {
         // Install an instance of Rya.
-        final String instanceName = "testInstance_";
+        final String instanceName = getRyaInstanceName();
         final InstallConfiguration installConfig = 
InstallConfiguration.builder().build();
 
         final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloListInstancesIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloListInstancesIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloListInstancesIT.java
index 42467dd..f8aadb8 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloListInstancesIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloListInstancesIT.java
@@ -25,6 +25,10 @@ import java.util.List;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.admin.SecurityOperations;
+import org.apache.accumulo.core.client.admin.TableOperations;
+import org.apache.accumulo.core.security.SystemPermission;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.beust.jcommander.internal.Lists;
@@ -40,6 +44,21 @@ import org.apache.rya.api.client.RyaClientException;
  */
 public class AccumuloListInstancesIT extends AccumuloITBase {
 
+    @Before
+    public void setup() throws Exception {
+        // this is a bit of a hack to clear any existing instances before
+        // adding the instances we want to exist for testing the list command
+        TableOperations tableOps = getConnector().tableOperations();
+        SecurityOperations secOps = getConnector().securityOperations();
+        secOps.grantSystemPermission("root", SystemPermission.DROP_TABLE);
+
+        for (String tableName : getConnector().tableOperations().list()) {
+            if (!tableName.startsWith("accumulo.")) {
+                tableOps.delete(tableName);
+            }
+        }
+    }
+
     @Test
     public void listInstances_hasRyaDetailsTable() throws AccumuloException, 
AccumuloSecurityException, RyaClientException {
         // Install a few instances of Rya using the install command.

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloLoadStatementsFileIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloLoadStatementsFileIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloLoadStatementsFileIT.java
index 656737a..5f73bac 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloLoadStatementsFileIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloLoadStatementsFileIT.java
@@ -60,13 +60,12 @@ public class AccumuloLoadStatementsFileIT extends 
AccumuloITBase {
                 getZookeepers());
 
         final RyaClient ryaClient = 
AccumuloRyaClientFactory.build(connectionDetails, getConnector());
-        ryaClient.getLoadStatementsFile().loadStatements("testInstance_", 
Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE);
+        ryaClient.getLoadStatementsFile().loadStatements(getRyaInstanceName(), 
Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE);
     }
 
     @Test
     public void loadTurtleFile() throws Exception {
         // Install an instance of Rya.
-        final String instanceName = "testInstance_";
         final InstallConfiguration installConfig = 
InstallConfiguration.builder()
                 .setEnableTableHashPrefix(false)
                 .setEnableEntityCentricIndex(false)
@@ -85,10 +84,10 @@ public class AccumuloLoadStatementsFileIT extends 
AccumuloITBase {
 
         final RyaClient ryaClient = 
AccumuloRyaClientFactory.build(connectionDetails, getConnector());
         final Install install = ryaClient.getInstall();
-        install.install(instanceName, installConfig);
+        install.install(getRyaInstanceName(), installConfig);
 
         // Load the test statement file.
-        ryaClient.getLoadStatementsFile().loadStatements("testInstance_", 
Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE);
+        ryaClient.getLoadStatementsFile().loadStatements(getRyaInstanceName(), 
Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE);
 
         // Verify that the statements were loaded.
         final ValueFactory vf = new ValueFactoryImpl();
@@ -101,7 +100,7 @@ public class AccumuloLoadStatementsFileIT extends 
AccumuloITBase {
         final List<Statement> statements = new ArrayList<>();
 
         final WholeRowTripleResolver tripleResolver = new 
WholeRowTripleResolver();
-        final Scanner scanner = 
getConnector().createScanner("testInstance_spo", new Authorizations());
+        final Scanner scanner = 
getConnector().createScanner(getRyaInstanceName() + "spo", new 
Authorizations());
         final Iterator<Entry<Key, Value>> it = scanner.iterator();
         while(it.hasNext()) {
             final Entry<Key, Value> next = it.next();

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java
index 69780bc..f6ec5da 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java
@@ -49,38 +49,41 @@ public class AccumuloRemoveUserIT extends AccumuloITBase {
      */
     @Test
     public void removedUserNotInDetails() throws Exception {
+        String adminUser = testInstance.createUniqueUser();
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
         // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
+        secOps.createLocalUser(adminUser, new PasswordToken(adminUser));
+        secOps.grantSystemPermission(adminUser, SystemPermission.CREATE_TABLE);
+        
 
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(adminUser, 
adminUser.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(adminUser, adminUser));
 
         // Create the user that will be added to the instance of Rya.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
         final RyaClient userBClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userB", "userB".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userB", 
"userB"));
+                new AccumuloConnectionDetails(user, user.toCharArray(), 
getInstanceName(), getZookeepers()),
+                super.getClusterInstance().getCluster().getConnector(user, 
user));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
         // Add userB.
-        userAClient.getAddUser().addUser("testInstance_", "userB");
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
 
         // Remove userA.
-        userBClient.getRemoveUser().removeUser("testInstance_", "userA");
+        userBClient.getRemoveUser().removeUser(getRyaInstanceName(), 
adminUser);
 
         // Ensure the Rya instance's details have been updated to include the 
added user.
         final ImmutableList<String> expectedUsers = 
ImmutableList.<String>builder()
-                .add("userB")
+                .add(user)
                 .build();
 
-        final RyaDetails details = 
userBClient.getGetInstanceDetails().getDetails("testInstance_").get();
+        final RyaDetails details = 
userBClient.getGetInstanceDetails().getDetails(getRyaInstanceName()).get();
         assertEquals(expectedUsers, details.getUsers());
     }
 
@@ -89,31 +92,33 @@ public class AccumuloRemoveUserIT extends AccumuloITBase {
      */
     @Test
     public void removedUserCanNotInsert() throws Exception {
+        String adminUser = testInstance.createUniqueUser();
+        String user = testInstance.createUniqueUser();
         final SecurityOperations secOps = 
super.getConnector().securityOperations();
 
         // Create the user that will install the instance of Rya.
-        secOps.createLocalUser("userA", new PasswordToken("userA"));
-        secOps.grantSystemPermission("userA", SystemPermission.CREATE_TABLE);
+        secOps.createLocalUser(adminUser, new PasswordToken(adminUser));
+        secOps.grantSystemPermission(adminUser, SystemPermission.CREATE_TABLE);
 
         final RyaClient userAClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userA", "userA".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userA", 
"userA"));
+                new AccumuloConnectionDetails(adminUser, 
adminUser.toCharArray(), getInstanceName(), getZookeepers()),
+                
super.getClusterInstance().getCluster().getConnector(adminUser, adminUser));
 
         // Create the user that will be added to the instance of Rya.
-        secOps.createLocalUser("userB", new PasswordToken("userB"));
+        secOps.createLocalUser(user, new PasswordToken(user));
 
-        final RyaClient userBClient = AccumuloRyaClientFactory.build(
-                new AccumuloConnectionDetails("userB", "userB".toCharArray(), 
getInstanceName(), getZookeepers()),
-                super.getClusterInstance().getCluster().getConnector("userB", 
"userB"));
+        final RyaClient userCClient = AccumuloRyaClientFactory.build(
+                new AccumuloConnectionDetails(user, user.toCharArray(), 
getInstanceName(), getZookeepers()),
+                super.getClusterInstance().getCluster().getConnector(user, 
user));
 
         // Install the instance of Rya.
-        userAClient.getInstall().install("testInstance_", 
InstallConfiguration.builder().build());
+        userAClient.getInstall().install(getRyaInstanceName(), 
InstallConfiguration.builder().build());
 
-        // Add userB.
-        userAClient.getAddUser().addUser("testInstance_", "userB");
+        // Add userC.
+        userAClient.getAddUser().addUser(getRyaInstanceName(), user);
 
         // Remove userA.
-        userBClient.getRemoveUser().removeUser("testInstance_", "userA");
+        userCClient.getRemoveUser().removeUser(getRyaInstanceName(), 
adminUser);
 
         // Show that userA can not insert anything.
         boolean securityExceptionThrown = false;
@@ -121,7 +126,7 @@ public class AccumuloRemoveUserIT extends AccumuloITBase {
         Sail sail = null;
         SailConnection sailConn = null;
         try {
-            final AccumuloRdfConfiguration userAConf = 
makeRyaConfig("testInstance_", "userA", "userA", getInstanceName(), 
getZookeepers());
+            final AccumuloRdfConfiguration userAConf = 
makeRyaConfig(getRyaInstanceName(), adminUser, adminUser, getInstanceName(), 
getZookeepers());
             sail = RyaSailFactory.getInstance(userAConf);
             sailConn = sail.getConnection();
 
@@ -135,14 +140,10 @@ public class AccumuloRemoveUserIT extends AccumuloITBase {
             }
         } finally {
             if(sailConn != null) {
-                try {
-                    sailConn.close();
-                } finally { }
+                sailConn.close();
             }
             if(sail != null) {
-                try {
-                    sail.shutDown();
-                } finally { }
+                sail.shutDown();
             }
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloUninstallIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloUninstallIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloUninstallIT.java
index 3966ddf..c4e4d54 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloUninstallIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloUninstallIT.java
@@ -64,7 +64,7 @@ public class AccumuloUninstallIT extends AccumuloITBase {
                 getZookeepers());
 
         final Install install = new AccumuloInstall(connectionDetails, 
getConnector());
-        final String ryaInstanceName = "testInstance_";
+        final String ryaInstanceName = getRyaInstanceName();
         install.install(ryaInstanceName, installConfig);
 
         // Check that the instance exists.

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/FluoITBase.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/FluoITBase.java
 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/FluoITBase.java
index a650bad..2e16412 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/FluoITBase.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/FluoITBase.java
@@ -20,8 +20,6 @@ package org.apache.rya.api.client.accumulo;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import java.io.File;
-import java.io.IOException;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -35,9 +33,11 @@ import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.ZooKeeperInstance;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.minicluster.MiniAccumuloCluster;
-import org.apache.accumulo.minicluster.MiniAccumuloConfig;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.apache.rya.accumulo.MiniAccumuloClusterInstance;
+import org.apache.rya.accumulo.MiniAccumuloSingleton;
+import org.apache.rya.accumulo.RyaTestInstanceRule;
 import org.apache.rya.indexing.pcj.fluo.app.export.rya.RyaExportParameters;
 import org.apache.rya.indexing.pcj.fluo.app.observers.FilterObserver;
 import org.apache.rya.indexing.pcj.fluo.app.observers.JoinObserver;
@@ -48,13 +48,12 @@ import org.apache.zookeeper.ClientCnxn;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.openrdf.repository.RepositoryConnection;
 import org.openrdf.repository.RepositoryException;
 import org.openrdf.sail.Sail;
 import org.openrdf.sail.SailException;
 
-import com.google.common.io.Files;
-
 import org.apache.fluo.api.client.FluoAdmin;
 import org.apache.fluo.api.client.FluoAdmin.AlreadyInitializedException;
 import org.apache.fluo.api.client.FluoAdmin.TableExistsException;
@@ -85,45 +84,49 @@ import org.apache.rya.sail.config.RyaSailFactory;
 public abstract class FluoITBase {
     private static final Logger log = Logger.getLogger(FluoITBase.class);
 
-    protected static final String RYA_INSTANCE_NAME = "test_";
+    // Mini Accumulo Cluster
+    private static MiniAccumuloClusterInstance clusterInstance = 
MiniAccumuloSingleton.getInstance();
+    private static MiniAccumuloCluster cluster;
 
-    protected static final String ACCUMULO_USER = "root";
-    protected static final String ACCUMULO_PASSWORD = "password";
+    private static String instanceName = null;
+    private static String zookeepers = null;
 
-    // Mini Accumulo Cluster
-    protected MiniAccumuloCluster cluster;
     protected static Connector accumuloConn = null;
-    protected String instanceName = null;
-    protected String zookeepers = null;
 
     // Fluo data store and connections.
     protected MiniFluo fluo = null;
     protected FluoClient fluoClient = null;
-    protected final String appName = "IntegrationTests";
 
     // Rya data store and connections.
     protected RyaSailRepository ryaRepo = null;
     protected RepositoryConnection ryaConn = null;
 
+    @Rule
+    public RyaTestInstanceRule testInstance = new RyaTestInstanceRule(false);
+
     @BeforeClass
-    public static void killLoudLogs() {
+    public static void beforeClass() throws Exception {
         Logger.getLogger(ClientCnxn.class).setLevel(Level.ERROR);
+
+        // Setup and start the Mini Accumulo.
+        cluster = clusterInstance.getCluster();
+
+        // Store a connector to the Mini Accumulo.
+        instanceName = cluster.getInstanceName();
+        zookeepers = cluster.getZooKeepers();
+
+        final Instance instance = new ZooKeeperInstance(instanceName, 
zookeepers);
+        accumuloConn = instance.getConnector(clusterInstance.getUsername(), 
new PasswordToken(clusterInstance.getPassword()));
     }
 
     @Before
-    public void setupMiniResources()
-            throws IOException, InterruptedException, AccumuloException, 
AccumuloSecurityException, RepositoryException,
-            RyaDAOException, NumberFormatException, InferenceEngineException, 
AlreadyInitializedException,
-            TableExistsException, AlreadyInitializedException, 
RyaDetailsRepositoryException, DuplicateInstanceNameException, 
RyaClientException, SailException {
-        // Initialize the Mini Accumulo that will be used to host Rya and Fluo.
-        setupMiniAccumulo();
-
+    public void setupMiniResources() throws Exception {
         // Initialize the Mini Fluo that will be used to store created queries.
         fluo = startMiniFluo();
         fluoClient = FluoFactory.newClient(fluo.getClientConfiguration());
 
         // Initialize the Rya that will be used by the tests.
-        ryaRepo = setupRya(ACCUMULO_USER, ACCUMULO_PASSWORD, instanceName, 
zookeepers, appName);
+        ryaRepo = setupRya();
         ryaConn = ryaRepo.getConnection();
     }
 
@@ -169,31 +172,18 @@ public abstract class FluoITBase {
             }
         }
 
-        if(cluster != null) {
-            try {
-                log.info("Shutting down the Mini Accumulo being used as a Rya 
store.");
-                cluster.stop();
-                log.info("Mini Accumulo being used as a Rya store shut down.");
-            } catch(final Exception e) {
-                log.error("Could not shut down the Mini Accumulo.", e);
-            }
-        }
     }
 
-    private void setupMiniAccumulo() throws IOException, InterruptedException, 
AccumuloException, AccumuloSecurityException {
-        final File miniDataDir = Files.createTempDir();
-
-        // Setup and start the Mini Accumulo.
-        final MiniAccumuloConfig cfg = new MiniAccumuloConfig(miniDataDir, 
ACCUMULO_PASSWORD);
-        cluster = new MiniAccumuloCluster(cfg);
-        cluster.start();
-
-        // Store a connector to the Mini Accumulo.
-        instanceName = cluster.getInstanceName();
-        zookeepers = cluster.getZooKeepers();
+    public String getRyaInstanceName() {
+        return testInstance.getRyaInstanceName();
+    }
 
-        final Instance instance = new ZooKeeperInstance(instanceName, 
zookeepers);
-        accumuloConn = instance.getConnector(ACCUMULO_USER, new 
PasswordToken(ACCUMULO_PASSWORD));
+    public AccumuloConnectionDetails createConnectionDetails() {
+        return new AccumuloConnectionDetails(
+                clusterInstance.getUsername(),
+                clusterInstance.getPassword().toCharArray(),
+                clusterInstance.getInstanceName(),
+                clusterInstance.getZookeepers());
     }
 
     /**
@@ -210,9 +200,9 @@ public abstract class FluoITBase {
         ryaParams.setExportToRya(true);
         ryaParams.setAccumuloInstanceName(instanceName);
         ryaParams.setZookeeperServers(zookeepers);
-        ryaParams.setExporterUsername(ACCUMULO_USER);
-        ryaParams.setExporterPassword(ACCUMULO_PASSWORD);
-        ryaParams.setRyaInstanceName(RYA_INSTANCE_NAME);
+        ryaParams.setExporterUsername(clusterInstance.getUsername());
+        ryaParams.setExporterPassword(clusterInstance.getPassword());
+        ryaParams.setRyaInstanceName(getRyaInstanceName());
         return params;
     }
 
@@ -240,13 +230,13 @@ public abstract class FluoITBase {
         final FluoConfiguration config = new FluoConfiguration();
         config.setMiniStartAccumulo(false);
         config.setAccumuloInstance(instanceName);
-        config.setAccumuloUser(ACCUMULO_USER);
-        config.setAccumuloPassword(ACCUMULO_PASSWORD);
+        config.setAccumuloUser(clusterInstance.getUsername());
+        config.setAccumuloPassword(clusterInstance.getPassword());
         config.setInstanceZookeepers(zookeepers + "/fluo");
         config.setAccumuloZookeepers(zookeepers);
 
-        config.setApplicationName(appName);
-        config.setAccumuloTable("fluo" + appName);
+        config.setApplicationName(getRyaInstanceName());
+        config.setAccumuloTable("fluo" + getRyaInstanceName());
 
         config.addObservers(observers);
 
@@ -258,38 +248,30 @@ public abstract class FluoITBase {
     /**
      * Sets up a Rya instance.
      */
-   protected RyaSailRepository setupRya(final String user, final String 
password, final String instanceName, final String zookeepers, final String 
appName)
+   protected RyaSailRepository setupRya()
            throws AccumuloException, AccumuloSecurityException, 
RepositoryException, RyaDAOException,
            NumberFormatException, UnknownHostException, 
InferenceEngineException, AlreadyInitializedException,
            RyaDetailsRepositoryException, DuplicateInstanceNameException, 
RyaClientException, SailException {
-       checkNotNull(user);
-       checkNotNull(password);
        checkNotNull(instanceName);
        checkNotNull(zookeepers);
-       checkNotNull(appName);
 
        // Setup Rya configuration values.
        final AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration();
-       conf.setTablePrefix(RYA_INSTANCE_NAME);
+       conf.setTablePrefix(getRyaInstanceName());
        conf.setDisplayQueryPlan(true);
        conf.setBoolean(ConfigUtils.USE_MOCK_INSTANCE, false);
-       conf.set(ConfigUtils.CLOUDBASE_USER, user);
-       conf.set(ConfigUtils.CLOUDBASE_PASSWORD, password);
-       conf.set(ConfigUtils.CLOUDBASE_INSTANCE, instanceName);
-       conf.set(ConfigUtils.CLOUDBASE_ZOOKEEPERS, zookeepers);
+       conf.set(ConfigUtils.CLOUDBASE_USER, clusterInstance.getUsername());
+       conf.set(ConfigUtils.CLOUDBASE_PASSWORD, clusterInstance.getPassword());
+       conf.set(ConfigUtils.CLOUDBASE_INSTANCE, 
clusterInstance.getInstanceName());
+       conf.set(ConfigUtils.CLOUDBASE_ZOOKEEPERS, 
clusterInstance.getZookeepers());
        conf.set(ConfigUtils.USE_PCJ, "true");
-       conf.set(ConfigUtils.FLUO_APP_NAME, appName);
+       conf.set(ConfigUtils.FLUO_APP_NAME, getRyaInstanceName());
        conf.set(ConfigUtils.PCJ_STORAGE_TYPE, 
PrecomputedJoinIndexerConfig.PrecomputedJoinStorageType.ACCUMULO.toString());
        conf.set(ConfigUtils.PCJ_UPDATER_TYPE, 
PrecomputedJoinIndexerConfig.PrecomputedJoinUpdaterType.FLUO.toString());
        conf.set(ConfigUtils.CLOUDBASE_AUTHS, "");
 
        // Install the test instance of Rya.
-       final AccumuloConnectionDetails connectionDetails = new 
AccumuloConnectionDetails(
-               ACCUMULO_USER,
-               ACCUMULO_PASSWORD.toCharArray(),
-               cluster.getInstanceName(),
-               cluster.getZooKeepers());
-       final Install install = new AccumuloInstall(connectionDetails, 
accumuloConn);
+       final Install install = new AccumuloInstall(createConnectionDetails(), 
accumuloConn);
 
        final InstallConfiguration installConfig = 
InstallConfiguration.builder()
                .setEnableTableHashPrefix(true)
@@ -298,9 +280,9 @@ public abstract class FluoITBase {
                .setEnableTemporalIndex(true)
                .setEnablePcjIndex(true)
                .setEnableGeoIndex(true)
-               .setFluoPcjAppName(appName)
+               .setFluoPcjAppName(getRyaInstanceName())
                .build();
-       install.install(RYA_INSTANCE_NAME, installConfig);
+       install.install(getRyaInstanceName(), installConfig);
 
        // Connect to the instance of Rya that was just installed.
        final Sail sail = RyaSailFactory.getInstance(conf);

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/d3ba442f/extras/rya.console/src/test/java/org/apache/rya/shell/RyaShellITBase.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/test/java/org/apache/rya/shell/RyaShellITBase.java 
b/extras/rya.console/src/test/java/org/apache/rya/shell/RyaShellITBase.java
index 9727852..bcbaa5b 100644
--- a/extras/rya.console/src/test/java/org/apache/rya/shell/RyaShellITBase.java
+++ b/extras/rya.console/src/test/java/org/apache/rya/shell/RyaShellITBase.java
@@ -25,10 +25,13 @@ import 
org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.minicluster.MiniAccumuloCluster;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.apache.rya.accumulo.MiniAccumuloSingleton;
+import org.apache.rya.accumulo.RyaTestInstanceRule;
 import org.apache.zookeeper.ClientCnxn;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.springframework.shell.Bootstrap;
 import org.springframework.shell.core.JLineShellComponent;
 
@@ -42,11 +45,6 @@ import org.apache.rya.accumulo.MiniAccumuloClusterInstance;
 public class RyaShellITBase {
 
     /**
-     * The cluster that will be used.
-     */
-    private MiniAccumuloClusterInstance cluster = null;
-
-    /**
      * The bootstrap that was used to initialize the Shell that will be tested.
      */
     private Bootstrap bootstrap;
@@ -56,6 +54,9 @@ public class RyaShellITBase {
      */
     private JLineShellComponent shell;
 
+    @Rule
+    public RyaTestInstanceRule testInstance = new RyaTestInstanceRule(false);
+
     @BeforeClass
     public static void killLoudLogs() {
         Logger.getLogger(ClientCnxn.class).setLevel(Level.ERROR);
@@ -63,10 +64,6 @@ public class RyaShellITBase {
 
     @Before
     public void startShell() throws IOException, InterruptedException, 
AccumuloException, AccumuloSecurityException {
-        // Start the cluster.
-        cluster = new MiniAccumuloClusterInstance();
-        cluster.startMiniAccumulo();
-
         // Bootstrap the shell with the test bean configuration.
         bootstrap = new Bootstrap(new String[]{}, new 
String[]{"file:src/test/resources/RyaShellTest-context.xml"});
         shell = bootstrap.getJLineShellComponent();
@@ -75,9 +72,6 @@ public class RyaShellITBase {
     @After
     public void stopShell() throws IOException, InterruptedException {
         shell.stop();
-
-        // Stop the cluster.
-        cluster.stopMiniAccumulo();
     }
 
     /**
@@ -98,6 +92,11 @@ public class RyaShellITBase {
      * @return The cluster that is hosting the test.
      */
     public MiniAccumuloCluster getCluster() {
-        return cluster.getCluster();
+        return MiniAccumuloSingleton.getInstance().getCluster();
+    }
+
+    public String getInstanceName() {
+        return testInstance.getRyaInstanceName();
     }
+
 }
\ No newline at end of file

Reply via email to