You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ec...@apache.org on 2015/06/04 19:18:39 UTC
[4/4] accumulo git commit: ACCUMULO-3871 rename base class for ITs so
they do not end with "IT"
ACCUMULO-3871 rename base class for ITs so they do not end with "IT"
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/ab5a867f
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/ab5a867f
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/ab5a867f
Branch: refs/heads/master
Commit: ab5a867f12f48a2f64f4caedec59d3c0f83a1766
Parents: 0788cb5
Author: Eric Newton <er...@gmail.com>
Authored: Thu Jun 4 13:18:27 2015 -0400
Committer: Eric Newton <er...@gmail.com>
Committed: Thu Jun 4 13:18:27 2015 -0400
----------------------------------------------------------------------
.../harness/AccumuloClusterHarness.java | 338 +++++++++++++++++++
.../accumulo/harness/AccumuloClusterIT.java | 338 -------------------
.../org/apache/accumulo/harness/AccumuloIT.java | 104 ------
.../apache/accumulo/harness/AccumuloITBase.java | 104 ++++++
.../accumulo/harness/MiniClusterHarness.java | 14 +-
.../accumulo/harness/SharedMiniClusterBase.java | 185 ++++++++++
.../accumulo/harness/SharedMiniClusterIT.java | 185 ----------
.../conf/AccumuloClusterConfiguration.java | 2 +-
.../AccumuloClusterPropertyConfiguration.java | 2 +-
.../conf/AccumuloMiniClusterConfiguration.java | 8 +-
.../StandaloneAccumuloClusterConfiguration.java | 2 +-
.../test/ArbitraryTablePropertiesIT.java | 4 +-
.../accumulo/test/AssignmentThreadsIT.java | 4 +-
.../apache/accumulo/test/AuditMessageIT.java | 4 +-
.../test/BadDeleteMarkersCreatedIT.java | 4 +-
.../apache/accumulo/test/BalanceFasterIT.java | 4 +-
.../org/apache/accumulo/test/BalanceIT.java | 4 +-
.../test/BalanceWithOfflineTableIT.java | 4 +-
.../org/apache/accumulo/test/BatchWriterIT.java | 4 +-
.../accumulo/test/BulkImportVolumeIT.java | 4 +-
.../org/apache/accumulo/test/CleanWalIT.java | 4 +-
.../accumulo/test/ConditionalWriterIT.java | 4 +-
.../test/ConfigurableMajorCompactionIT.java | 4 +-
.../test/CreateTableWithNewTableConfigIT.java | 4 +-
.../org/apache/accumulo/test/DumpConfigIT.java | 4 +-
.../org/apache/accumulo/test/ExistingMacIT.java | 4 +-
.../org/apache/accumulo/test/FileArchiveIT.java | 4 +-
.../accumulo/test/GarbageCollectWALIT.java | 4 +-
.../apache/accumulo/test/ImportExportIT.java | 4 +-
.../accumulo/test/InterruptibleScannersIT.java | 4 +-
.../accumulo/test/KeyValueEqualityIT.java | 4 +-
.../apache/accumulo/test/LargeSplitRowIT.java | 4 +-
.../test/MasterRepairsDualAssignmentIT.java | 4 +-
.../accumulo/test/MetaConstraintRetryIT.java | 4 +-
.../apache/accumulo/test/MetaGetsReadersIT.java | 4 +-
.../org/apache/accumulo/test/MetaSplitIT.java | 4 +-
.../MissingWalHeaderCompletesRecoveryIT.java | 4 +-
.../accumulo/test/MultiTableBatchWriterIT.java | 4 +-
.../accumulo/test/MultiTableRecoveryIT.java | 4 +-
.../org/apache/accumulo/test/NamespacesIT.java | 4 +-
.../test/RecoveryCompactionsAreFlushesIT.java | 4 +-
.../test/RewriteTabletDirectoriesIT.java | 4 +-
.../apache/accumulo/test/ScanIteratorIT.java | 4 +-
.../org/apache/accumulo/test/ShellConfigIT.java | 4 +-
.../org/apache/accumulo/test/ShellServerIT.java | 4 +-
.../accumulo/test/SplitCancelsMajCIT.java | 4 +-
.../apache/accumulo/test/SplitRecoveryIT.java | 4 +-
.../test/TableConfigurationUpdateIT.java | 4 +-
.../apache/accumulo/test/TableOperationsIT.java | 4 +-
.../accumulo/test/TabletServerGivesUpIT.java | 4 +-
.../org/apache/accumulo/test/TotalQueuedIT.java | 4 +-
.../test/TracerRecoversAfterOfflineTableIT.java | 4 +-
.../accumulo/test/TransportCachingIT.java | 4 +-
.../org/apache/accumulo/test/UnusedWALIT.java | 4 +-
.../accumulo/test/UserCompactionStrategyIT.java | 4 +-
.../java/org/apache/accumulo/test/UsersIT.java | 4 +-
.../accumulo/test/VerifySerialRecoveryIT.java | 4 +-
.../apache/accumulo/test/VolumeChooserIT.java | 4 +-
.../java/org/apache/accumulo/test/VolumeIT.java | 4 +-
.../apache/accumulo/test/WaitForBalanceIT.java | 4 +-
.../test/functional/AccumuloInputFormatIT.java | 4 +-
.../accumulo/test/functional/AddSplitIT.java | 4 +-
.../test/functional/BackupMasterIT.java | 2 +-
.../test/functional/BadIteratorMincIT.java | 4 +-
.../functional/BalanceAfterCommsFailureIT.java | 2 +-
.../BalanceInPresenceOfOfflineTableIT.java | 4 +-
.../test/functional/BatchScanSplitIT.java | 4 +-
.../test/functional/BatchWriterFlushIT.java | 4 +-
.../test/functional/BigRootTabletIT.java | 4 +-
.../accumulo/test/functional/BinaryIT.java | 4 +-
.../test/functional/BinaryStressIT.java | 4 +-
.../accumulo/test/functional/BloomFilterIT.java | 4 +-
.../accumulo/test/functional/BulkFileIT.java | 4 +-
.../apache/accumulo/test/functional/BulkIT.java | 4 +-
.../functional/BulkSplitOptimizationIT.java | 4 +-
.../test/functional/ChaoticBalancerIT.java | 4 +-
.../accumulo/test/functional/ClassLoaderIT.java | 4 +-
.../accumulo/test/functional/CleanTmpIT.java | 2 +-
.../accumulo/test/functional/CleanUpIT.java | 6 +-
.../accumulo/test/functional/CloneTestIT.java | 4 +-
.../accumulo/test/functional/CombinerIT.java | 4 +-
.../accumulo/test/functional/CompactionIT.java | 4 +-
.../accumulo/test/functional/ConcurrencyIT.java | 4 +-
.../functional/ConfigurableCompactionIT.java | 2 +-
.../test/functional/ConfigurableMacBase.java | 182 ++++++++++
.../test/functional/ConfigurableMacIT.java | 182 ----------
.../accumulo/test/functional/ConstraintIT.java | 4 +-
.../test/functional/CreateAndUseIT.java | 4 +-
.../test/functional/CreateManyScannersIT.java | 4 +-
.../accumulo/test/functional/CredentialsIT.java | 4 +-
.../test/functional/DeleteEverythingIT.java | 4 +-
.../accumulo/test/functional/DeleteIT.java | 4 +-
.../accumulo/test/functional/DeleteRowsIT.java | 4 +-
.../test/functional/DeleteRowsSplitIT.java | 4 +-
.../functional/DeleteTableDuringSplitIT.java | 4 +-
.../functional/DeletedTablesDontFlushIT.java | 4 +-
.../accumulo/test/functional/DurabilityIT.java | 2 +-
.../test/functional/DynamicThreadPoolsIT.java | 4 +-
.../accumulo/test/functional/ExamplesIT.java | 4 +-
.../test/functional/FateStarvationIT.java | 4 +-
.../test/functional/GarbageCollectorIT.java | 2 +-
.../test/functional/HalfDeadTServerIT.java | 2 +-
.../accumulo/test/functional/KerberosIT.java | 4 +-
.../test/functional/KerberosProxyIT.java | 4 +-
.../accumulo/test/functional/LargeRowIT.java | 4 +-
.../test/functional/LateLastContactIT.java | 2 +-
.../accumulo/test/functional/LogicalTimeIT.java | 4 +-
.../accumulo/test/functional/MapReduceIT.java | 2 +-
.../test/functional/MasterAssignmentIT.java | 4 +-
.../test/functional/MasterFailoverIT.java | 4 +-
.../accumulo/test/functional/MaxOpenIT.java | 4 +-
.../accumulo/test/functional/MergeIT.java | 4 +-
.../accumulo/test/functional/MetadataIT.java | 4 +-
.../test/functional/MetadataMaxFilesIT.java | 2 +-
.../test/functional/MetadataSplitIT.java | 2 +-
.../test/functional/MonitorLoggingIT.java | 2 +-
.../accumulo/test/functional/MonitorSslIT.java | 2 +-
.../accumulo/test/functional/PermissionsIT.java | 4 +-
.../accumulo/test/functional/ReadWriteIT.java | 4 +-
.../functional/RecoveryWithEmptyRFileIT.java | 2 +-
.../test/functional/RegexGroupBalanceIT.java | 2 +-
.../accumulo/test/functional/RenameIT.java | 4 +-
.../accumulo/test/functional/RestartIT.java | 4 +-
.../test/functional/RestartStressIT.java | 4 +-
.../accumulo/test/functional/RowDeleteIT.java | 4 +-
.../accumulo/test/functional/ScanIdIT.java | 4 +-
.../test/functional/ScanIteratorIT.java | 4 +-
.../accumulo/test/functional/ScanRangeIT.java | 4 +-
.../test/functional/ScanSessionTimeOutIT.java | 4 +-
.../accumulo/test/functional/ScannerIT.java | 4 +-
.../test/functional/ServerSideErrorIT.java | 4 +-
.../test/functional/SessionDurabilityIT.java | 2 +-
.../accumulo/test/functional/ShutdownIT.java | 2 +-
.../functional/SimpleBalancerFairnessIT.java | 2 +-
.../accumulo/test/functional/SimpleMacIT.java | 25 --
.../test/functional/SparseColumnFamilyIT.java | 4 +-
.../accumulo/test/functional/SplitIT.java | 4 +-
.../test/functional/SplitRecoveryIT.java | 2 +-
.../apache/accumulo/test/functional/SslIT.java | 2 +-
.../accumulo/test/functional/StartIT.java | 4 +-
.../accumulo/test/functional/TableIT.java | 4 +-
.../accumulo/test/functional/TabletIT.java | 4 +-
.../functional/TabletStateChangeIteratorIT.java | 4 +-
.../accumulo/test/functional/TimeoutIT.java | 4 +-
.../accumulo/test/functional/VisibilityIT.java | 4 +-
.../accumulo/test/functional/WALSunnyDayIT.java | 2 +-
.../test/functional/WatchTheWatchCountIT.java | 2 +-
.../test/functional/WriteAheadLogIT.java | 4 +-
.../accumulo/test/functional/WriteLotsIT.java | 4 +-
.../accumulo/test/functional/ZooCacheIT.java | 2 +-
.../test/functional/ZookeeperRestartIT.java | 2 +-
.../test/performance/RollWALPerformanceIT.java | 4 +-
.../performance/metadata/FastBulkImportIT.java | 4 +-
.../accumulo/test/proxy/ProxyDurabilityIT.java | 4 +-
.../accumulo/test/proxy/SimpleProxyBase.java | 30 +-
.../test/replication/CyclicReplicationIT.java | 4 +-
...bageCollectorCommunicatesWithTServersIT.java | 6 +-
.../test/replication/KerberosReplicationIT.java | 4 +-
.../replication/MultiInstanceReplicationIT.java | 4 +-
.../replication/MultiTserverReplicationIT.java | 4 +-
.../test/replication/ReplicationIT.java | 4 +-
.../replication/ReplicationRandomWalkIT.java | 4 +-
.../test/replication/StatusCombinerMacIT.java | 4 +-
.../UnorderedWorkAssignerReplicationIT.java | 4 +-
...UnusedWalDoesntCloseReplicationStatusIT.java | 4 +-
.../server/security/SystemCredentialsIT.java | 4 +-
166 files changed, 1118 insertions(+), 1143 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterHarness.java b/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
new file mode 100644
index 0000000..30058db
--- /dev/null
+++ b/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
@@ -0,0 +1,338 @@
+/*
+ * 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.accumulo.harness;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.apache.accumulo.cluster.AccumuloCluster;
+import org.apache.accumulo.cluster.ClusterControl;
+import org.apache.accumulo.cluster.ClusterUser;
+import org.apache.accumulo.cluster.ClusterUsers;
+import org.apache.accumulo.cluster.standalone.StandaloneAccumuloCluster;
+import org.apache.accumulo.core.client.ClientConfiguration;
+import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
+import org.apache.accumulo.core.client.Connector;
+import org.apache.accumulo.core.client.admin.SecurityOperations;
+import org.apache.accumulo.core.client.admin.TableOperations;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.KerberosToken;
+import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.security.TablePermission;
+import org.apache.accumulo.harness.conf.AccumuloClusterConfiguration;
+import org.apache.accumulo.harness.conf.AccumuloClusterPropertyConfiguration;
+import org.apache.accumulo.harness.conf.AccumuloMiniClusterConfiguration;
+import org.apache.accumulo.harness.conf.StandaloneAccumuloClusterConfiguration;
+import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
+import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.security.UserGroupInformation;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * General Integration-Test base class that provides access to an Accumulo instance for testing. This instance could be MAC or a standalone instance.
+ */
+public abstract class AccumuloClusterHarness extends AccumuloITBase implements MiniClusterConfigurationCallback, ClusterUsers {
+ private static final Logger log = LoggerFactory.getLogger(AccumuloClusterHarness.class);
+ private static final String TRUE = Boolean.toString(true);
+
+ public static enum ClusterType {
+ MINI, STANDALONE;
+
+ public boolean isDynamic() {
+ return this == MINI;
+ }
+ }
+
+ private static boolean initialized = false;
+
+ protected static AccumuloCluster cluster;
+ protected static ClusterType type;
+ protected static AccumuloClusterPropertyConfiguration clusterConf;
+ protected static TestingKdc krb;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ clusterConf = AccumuloClusterPropertyConfiguration.get();
+ type = clusterConf.getClusterType();
+
+ if (ClusterType.MINI == type && TRUE.equals(System.getProperty(MiniClusterHarness.USE_KERBEROS_FOR_IT_OPTION))) {
+ krb = new TestingKdc();
+ krb.start();
+ log.info("MiniKdc started");
+ }
+
+ initialized = true;
+ }
+
+ @AfterClass
+ public static void tearDownKdc() throws Exception {
+ if (null != krb) {
+ krb.stop();
+ }
+ }
+
+ /**
+ * The {@link TestingKdc} used for this {@link AccumuloCluster}. Might be null.
+ */
+ public static TestingKdc getKdc() {
+ return krb;
+ }
+
+ @Before
+ public void setupCluster() throws Exception {
+ // Before we try to instantiate the cluster, check to see if the test even wants to run against this type of cluster
+ Assume.assumeTrue(canRunTest(type));
+
+ switch (type) {
+ case MINI:
+ MiniClusterHarness miniClusterHarness = new MiniClusterHarness();
+ // Intrinsically performs the callback to let tests alter MiniAccumuloConfig and core-site.xml
+ MiniAccumuloClusterImpl impl = miniClusterHarness.create(this, getAdminToken(), krb);
+ cluster = impl;
+ // MAC makes a ClientConf for us, just set it
+ ((AccumuloMiniClusterConfiguration) clusterConf).setClientConf(impl.getClientConfig());
+ // Login as the "root" user
+ if (null != krb) {
+ ClusterUser rootUser = krb.getRootUser();
+ // Log in the 'client' user
+ UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
+ }
+ break;
+ case STANDALONE:
+ StandaloneAccumuloClusterConfiguration conf = (StandaloneAccumuloClusterConfiguration) clusterConf;
+ ClientConfiguration clientConf = conf.getClientConf();
+ StandaloneAccumuloCluster standaloneCluster = new StandaloneAccumuloCluster(conf.getInstance(), clientConf, conf.getTmpDirectory(), conf.getUsers(),
+ conf.getAccumuloServerUser());
+ // If these are provided in the configuration, pass them into the cluster
+ standaloneCluster.setAccumuloHome(conf.getAccumuloHome());
+ standaloneCluster.setClientAccumuloConfDir(conf.getClientAccumuloConfDir());
+ standaloneCluster.setServerAccumuloConfDir(conf.getServerAccumuloConfDir());
+ standaloneCluster.setHadoopConfDir(conf.getHadoopConfDir());
+
+ // For SASL, we need to get the Hadoop configuration files as well otherwise UGI will log in as SIMPLE instead of KERBEROS
+ Configuration hadoopConfiguration = standaloneCluster.getHadoopConfiguration();
+ if (clientConf.getBoolean(ClientProperty.INSTANCE_RPC_SASL_ENABLED.getKey(), false)) {
+ UserGroupInformation.setConfiguration(hadoopConfiguration);
+ // Login as the admin user to start the tests
+ UserGroupInformation.loginUserFromKeytab(conf.getAdminPrincipal(), conf.getAdminKeytab().getAbsolutePath());
+ }
+
+ // Set the implementation
+ cluster = standaloneCluster;
+ break;
+ default:
+ throw new RuntimeException("Unhandled type");
+ }
+
+ if (type.isDynamic()) {
+ cluster.start();
+ } else {
+ log.info("Removing tables which appear to be from a previous test run");
+ cleanupTables();
+ log.info("Removing users which appear to be from a previous test run");
+ cleanupUsers();
+ }
+
+ switch (type) {
+ case MINI:
+ if (null != krb) {
+ final String traceTable = Property.TRACE_TABLE.getDefaultValue();
+ final ClusterUser systemUser = krb.getAccumuloServerUser(), rootUser = krb.getRootUser();
+
+ // Login as the trace user
+ UserGroupInformation.loginUserFromKeytab(systemUser.getPrincipal(), systemUser.getKeytab().getAbsolutePath());
+
+ // Open a connector as the system user (ensures the user will exist for us to assign permissions to)
+ Connector conn = cluster.getConnector(systemUser.getPrincipal(), new KerberosToken(systemUser.getPrincipal(), systemUser.getKeytab(), true));
+
+ // Then, log back in as the "root" user and do the grant
+ UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
+ conn = getConnector();
+
+ // Create the trace table
+ conn.tableOperations().create(traceTable);
+
+ // Trace user (which is the same kerberos principal as the system user, but using a normal KerberosToken) needs
+ // to have the ability to read, write and alter the trace table
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.READ);
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.WRITE);
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.ALTER_TABLE);
+ }
+ break;
+ default:
+ // do nothing
+ }
+ }
+
+ public void cleanupTables() throws Exception {
+ final String tablePrefix = this.getClass().getSimpleName() + "_";
+ final TableOperations tops = getConnector().tableOperations();
+ for (String table : tops.list()) {
+ if (table.startsWith(tablePrefix)) {
+ log.debug("Removing table {}", table);
+ tops.delete(table);
+ }
+ }
+ }
+
+ public void cleanupUsers() throws Exception {
+ final String userPrefix = this.getClass().getSimpleName();
+ final SecurityOperations secOps = getConnector().securityOperations();
+ for (String user : secOps.listLocalUsers()) {
+ if (user.startsWith(userPrefix)) {
+ log.info("Dropping local user {}", user);
+ secOps.dropLocalUser(user);
+ }
+ }
+ }
+
+ @After
+ public void teardownCluster() throws Exception {
+ if (null != cluster) {
+ if (type.isDynamic()) {
+ cluster.stop();
+ } else {
+ log.info("Removing tables which appear to be from the current test");
+ cleanupTables();
+ log.info("Removing users which appear to be from the current test");
+ cleanupUsers();
+ }
+ }
+ }
+
+ public static AccumuloCluster getCluster() {
+ Preconditions.checkState(initialized);
+ return cluster;
+ }
+
+ public static ClusterControl getClusterControl() {
+ Preconditions.checkState(initialized);
+ return cluster.getClusterControl();
+ }
+
+ public static ClusterType getClusterType() {
+ Preconditions.checkState(initialized);
+ return type;
+ }
+
+ public static String getAdminPrincipal() {
+ Preconditions.checkState(initialized);
+ return clusterConf.getAdminPrincipal();
+ }
+
+ public static AuthenticationToken getAdminToken() {
+ Preconditions.checkState(initialized);
+ return clusterConf.getAdminToken();
+ }
+
+ @Override
+ public ClusterUser getAdminUser() {
+ switch (type) {
+ case MINI:
+ if (null == krb) {
+ PasswordToken passwordToken = (PasswordToken) getAdminToken();
+ return new ClusterUser(getAdminPrincipal(), new String(passwordToken.getPassword(), UTF_8));
+ }
+ return krb.getRootUser();
+ case STANDALONE:
+ return new ClusterUser(getAdminPrincipal(), ((StandaloneAccumuloClusterConfiguration) clusterConf).getAdminKeytab());
+ default:
+ throw new RuntimeException("Unknown cluster type");
+ }
+ }
+
+ @Override
+ public ClusterUser getUser(int offset) {
+ switch (type) {
+ case MINI:
+ if (null != krb) {
+ // Defer to the TestingKdc when kerberos is on so we can get the keytab instead of a password
+ return krb.getClientPrincipal(offset);
+ } else {
+ // Come up with a mostly unique name
+ String principal = getClass().getSimpleName() + "_" + testName.getMethodName() + "_" + offset;
+ // Username and password are the same
+ return new ClusterUser(principal, principal);
+ }
+ case STANDALONE:
+ return ((StandaloneAccumuloCluster) cluster).getUser(offset);
+ default:
+ throw new RuntimeException("Unknown cluster type");
+ }
+ }
+
+ public static FileSystem getFileSystem() throws IOException {
+ Preconditions.checkState(initialized);
+ return cluster.getFileSystem();
+ }
+
+ public static AccumuloClusterConfiguration getClusterConfiguration() {
+ Preconditions.checkState(initialized);
+ return clusterConf;
+ }
+
+ public Connector getConnector() {
+ try {
+ String princ = getAdminPrincipal();
+ AuthenticationToken token = getAdminToken();
+ log.debug("Creating connector as {} with {}", princ, token);
+ return cluster.getConnector(princ, token);
+ } catch (Exception e) {
+ log.error("Could not connect to Accumulo", e);
+ fail("Could not connect to Accumulo: " + e.getMessage());
+
+ throw new RuntimeException("Could not connect to Accumulo", e);
+ }
+ }
+
+ // TODO Really don't want this here. Will ultimately need to abstract configuration method away from MAConfig
+ // and change over to something more generic
+ @Override
+ public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {}
+
+ /**
+ * A test may not be capable of running against a given AccumuloCluster. Implementations can override this method to advertise that they cannot (or perhaps do
+ * not) want to run the test.
+ */
+ public boolean canRunTest(ClusterType type) {
+ return true;
+ }
+
+ /**
+ * Tries to give a reasonable directory which can be used to create temporary files for the test. Makes a basic attempt to create the directory if it does not
+ * already exist.
+ *
+ * @return A directory which can be expected to exist on the Cluster's FileSystem
+ */
+ public Path getUsableDir() throws IllegalArgumentException, IOException {
+ return cluster.getTemporaryPath();
+ }
+}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterIT.java b/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterIT.java
deleted file mode 100644
index 16460ed..0000000
--- a/test/src/test/java/org/apache/accumulo/harness/AccumuloClusterIT.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * 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.accumulo.harness;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-
-import org.apache.accumulo.cluster.AccumuloCluster;
-import org.apache.accumulo.cluster.ClusterControl;
-import org.apache.accumulo.cluster.ClusterUser;
-import org.apache.accumulo.cluster.ClusterUsers;
-import org.apache.accumulo.cluster.standalone.StandaloneAccumuloCluster;
-import org.apache.accumulo.core.client.ClientConfiguration;
-import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
-import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.admin.SecurityOperations;
-import org.apache.accumulo.core.client.admin.TableOperations;
-import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
-import org.apache.accumulo.core.client.security.tokens.KerberosToken;
-import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.security.TablePermission;
-import org.apache.accumulo.harness.conf.AccumuloClusterConfiguration;
-import org.apache.accumulo.harness.conf.AccumuloClusterPropertyConfiguration;
-import org.apache.accumulo.harness.conf.AccumuloMiniClusterConfiguration;
-import org.apache.accumulo.harness.conf.StandaloneAccumuloClusterConfiguration;
-import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
-import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-
-/**
- * General Integration-Test base class that provides access to an Accumulo instance for testing. This instance could be MAC or a standalone instance.
- */
-public abstract class AccumuloClusterIT extends AccumuloIT implements MiniClusterConfigurationCallback, ClusterUsers {
- private static final Logger log = LoggerFactory.getLogger(AccumuloClusterIT.class);
- private static final String TRUE = Boolean.toString(true);
-
- public static enum ClusterType {
- MINI, STANDALONE;
-
- public boolean isDynamic() {
- return this == MINI;
- }
- }
-
- private static boolean initialized = false;
-
- protected static AccumuloCluster cluster;
- protected static ClusterType type;
- protected static AccumuloClusterPropertyConfiguration clusterConf;
- protected static TestingKdc krb;
-
- @BeforeClass
- public static void setUp() throws Exception {
- clusterConf = AccumuloClusterPropertyConfiguration.get();
- type = clusterConf.getClusterType();
-
- if (ClusterType.MINI == type && TRUE.equals(System.getProperty(MiniClusterHarness.USE_KERBEROS_FOR_IT_OPTION))) {
- krb = new TestingKdc();
- krb.start();
- log.info("MiniKdc started");
- }
-
- initialized = true;
- }
-
- @AfterClass
- public static void tearDownKdc() throws Exception {
- if (null != krb) {
- krb.stop();
- }
- }
-
- /**
- * The {@link TestingKdc} used for this {@link AccumuloCluster}. Might be null.
- */
- public static TestingKdc getKdc() {
- return krb;
- }
-
- @Before
- public void setupCluster() throws Exception {
- // Before we try to instantiate the cluster, check to see if the test even wants to run against this type of cluster
- Assume.assumeTrue(canRunTest(type));
-
- switch (type) {
- case MINI:
- MiniClusterHarness miniClusterHarness = new MiniClusterHarness();
- // Intrinsically performs the callback to let tests alter MiniAccumuloConfig and core-site.xml
- MiniAccumuloClusterImpl impl = miniClusterHarness.create(this, getAdminToken(), krb);
- cluster = impl;
- // MAC makes a ClientConf for us, just set it
- ((AccumuloMiniClusterConfiguration) clusterConf).setClientConf(impl.getClientConfig());
- // Login as the "root" user
- if (null != krb) {
- ClusterUser rootUser = krb.getRootUser();
- // Log in the 'client' user
- UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
- }
- break;
- case STANDALONE:
- StandaloneAccumuloClusterConfiguration conf = (StandaloneAccumuloClusterConfiguration) clusterConf;
- ClientConfiguration clientConf = conf.getClientConf();
- StandaloneAccumuloCluster standaloneCluster = new StandaloneAccumuloCluster(conf.getInstance(), clientConf, conf.getTmpDirectory(), conf.getUsers(),
- conf.getAccumuloServerUser());
- // If these are provided in the configuration, pass them into the cluster
- standaloneCluster.setAccumuloHome(conf.getAccumuloHome());
- standaloneCluster.setClientAccumuloConfDir(conf.getClientAccumuloConfDir());
- standaloneCluster.setServerAccumuloConfDir(conf.getServerAccumuloConfDir());
- standaloneCluster.setHadoopConfDir(conf.getHadoopConfDir());
-
- // For SASL, we need to get the Hadoop configuration files as well otherwise UGI will log in as SIMPLE instead of KERBEROS
- Configuration hadoopConfiguration = standaloneCluster.getHadoopConfiguration();
- if (clientConf.getBoolean(ClientProperty.INSTANCE_RPC_SASL_ENABLED.getKey(), false)) {
- UserGroupInformation.setConfiguration(hadoopConfiguration);
- // Login as the admin user to start the tests
- UserGroupInformation.loginUserFromKeytab(conf.getAdminPrincipal(), conf.getAdminKeytab().getAbsolutePath());
- }
-
- // Set the implementation
- cluster = standaloneCluster;
- break;
- default:
- throw new RuntimeException("Unhandled type");
- }
-
- if (type.isDynamic()) {
- cluster.start();
- } else {
- log.info("Removing tables which appear to be from a previous test run");
- cleanupTables();
- log.info("Removing users which appear to be from a previous test run");
- cleanupUsers();
- }
-
- switch (type) {
- case MINI:
- if (null != krb) {
- final String traceTable = Property.TRACE_TABLE.getDefaultValue();
- final ClusterUser systemUser = krb.getAccumuloServerUser(), rootUser = krb.getRootUser();
-
- // Login as the trace user
- UserGroupInformation.loginUserFromKeytab(systemUser.getPrincipal(), systemUser.getKeytab().getAbsolutePath());
-
- // Open a connector as the system user (ensures the user will exist for us to assign permissions to)
- Connector conn = cluster.getConnector(systemUser.getPrincipal(), new KerberosToken(systemUser.getPrincipal(), systemUser.getKeytab(), true));
-
- // Then, log back in as the "root" user and do the grant
- UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
- conn = getConnector();
-
- // Create the trace table
- conn.tableOperations().create(traceTable);
-
- // Trace user (which is the same kerberos principal as the system user, but using a normal KerberosToken) needs
- // to have the ability to read, write and alter the trace table
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.READ);
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.WRITE);
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.ALTER_TABLE);
- }
- break;
- default:
- // do nothing
- }
- }
-
- public void cleanupTables() throws Exception {
- final String tablePrefix = this.getClass().getSimpleName() + "_";
- final TableOperations tops = getConnector().tableOperations();
- for (String table : tops.list()) {
- if (table.startsWith(tablePrefix)) {
- log.debug("Removing table {}", table);
- tops.delete(table);
- }
- }
- }
-
- public void cleanupUsers() throws Exception {
- final String userPrefix = this.getClass().getSimpleName();
- final SecurityOperations secOps = getConnector().securityOperations();
- for (String user : secOps.listLocalUsers()) {
- if (user.startsWith(userPrefix)) {
- log.info("Dropping local user {}", user);
- secOps.dropLocalUser(user);
- }
- }
- }
-
- @After
- public void teardownCluster() throws Exception {
- if (null != cluster) {
- if (type.isDynamic()) {
- cluster.stop();
- } else {
- log.info("Removing tables which appear to be from the current test");
- cleanupTables();
- log.info("Removing users which appear to be from the current test");
- cleanupUsers();
- }
- }
- }
-
- public static AccumuloCluster getCluster() {
- Preconditions.checkState(initialized);
- return cluster;
- }
-
- public static ClusterControl getClusterControl() {
- Preconditions.checkState(initialized);
- return cluster.getClusterControl();
- }
-
- public static ClusterType getClusterType() {
- Preconditions.checkState(initialized);
- return type;
- }
-
- public static String getAdminPrincipal() {
- Preconditions.checkState(initialized);
- return clusterConf.getAdminPrincipal();
- }
-
- public static AuthenticationToken getAdminToken() {
- Preconditions.checkState(initialized);
- return clusterConf.getAdminToken();
- }
-
- @Override
- public ClusterUser getAdminUser() {
- switch (type) {
- case MINI:
- if (null == krb) {
- PasswordToken passwordToken = (PasswordToken) getAdminToken();
- return new ClusterUser(getAdminPrincipal(), new String(passwordToken.getPassword(), UTF_8));
- }
- return krb.getRootUser();
- case STANDALONE:
- return new ClusterUser(getAdminPrincipal(), ((StandaloneAccumuloClusterConfiguration) clusterConf).getAdminKeytab());
- default:
- throw new RuntimeException("Unknown cluster type");
- }
- }
-
- @Override
- public ClusterUser getUser(int offset) {
- switch (type) {
- case MINI:
- if (null != krb) {
- // Defer to the TestingKdc when kerberos is on so we can get the keytab instead of a password
- return krb.getClientPrincipal(offset);
- } else {
- // Come up with a mostly unique name
- String principal = getClass().getSimpleName() + "_" + testName.getMethodName() + "_" + offset;
- // Username and password are the same
- return new ClusterUser(principal, principal);
- }
- case STANDALONE:
- return ((StandaloneAccumuloCluster) cluster).getUser(offset);
- default:
- throw new RuntimeException("Unknown cluster type");
- }
- }
-
- public static FileSystem getFileSystem() throws IOException {
- Preconditions.checkState(initialized);
- return cluster.getFileSystem();
- }
-
- public static AccumuloClusterConfiguration getClusterConfiguration() {
- Preconditions.checkState(initialized);
- return clusterConf;
- }
-
- public Connector getConnector() {
- try {
- String princ = getAdminPrincipal();
- AuthenticationToken token = getAdminToken();
- log.debug("Creating connector as {} with {}", princ, token);
- return cluster.getConnector(princ, token);
- } catch (Exception e) {
- log.error("Could not connect to Accumulo", e);
- fail("Could not connect to Accumulo: " + e.getMessage());
-
- throw new RuntimeException("Could not connect to Accumulo", e);
- }
- }
-
- // TODO Really don't want this here. Will ultimately need to abstract configuration method away from MAConfig
- // and change over to something more generic
- @Override
- public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {}
-
- /**
- * A test may not be capable of running against a given AccumuloCluster. Implementations can override this method to advertise that they cannot (or perhaps do
- * not) want to run the test.
- */
- public boolean canRunTest(ClusterType type) {
- return true;
- }
-
- /**
- * Tries to give a reasonable directory which can be used to create temporary files for the test. Makes a basic attempt to create the directory if it does not
- * already exist.
- *
- * @return A directory which can be expected to exist on the Cluster's FileSystem
- */
- public Path getUsableDir() throws IllegalArgumentException, IOException {
- return cluster.getTemporaryPath();
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/AccumuloIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/AccumuloIT.java b/test/src/test/java/org/apache/accumulo/harness/AccumuloIT.java
deleted file mode 100644
index 03ee44c..0000000
--- a/test/src/test/java/org/apache/accumulo/harness/AccumuloIT.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.accumulo.harness;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.Rule;
-import org.junit.rules.TestName;
-import org.junit.rules.Timeout;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Methods, setup and/or infrastructure which are common to any Accumulo integration test.
- */
-public class AccumuloIT {
- private static final Logger log = LoggerFactory.getLogger(AccumuloIT.class);
-
- @Rule
- public TestName testName = new TestName();
-
- public String[] getUniqueNames(int num) {
- String[] names = new String[num];
- for (int i = 0; i < num; i++)
- names[i] = this.getClass().getSimpleName() + "_" + testName.getMethodName() + i;
- return names;
- }
-
- /**
- * Determines an appropriate directory name for holding generated ssl files for a test. The directory returned will have the same name as the provided
- * directory, but with the suffix "-ssl" appended. This new directory is not created here, but is expected to be created as needed.
- *
- * @param baseDir
- * the original directory, which the new directory will be created next to; it should exist
- * @return the new directory (is not created)
- */
- public static File getSslDir(File baseDir) {
- assertTrue(baseDir.exists() && baseDir.isDirectory());
- return new File(baseDir.getParentFile(), baseDir.getName() + "-ssl");
- }
-
- public static File createTestDir(String name) {
- File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
- assertTrue(baseDir.mkdirs() || baseDir.isDirectory());
- if (name == null)
- return baseDir;
- File testDir = new File(baseDir, name);
- FileUtils.deleteQuietly(testDir);
- assertTrue(testDir.mkdir());
- return testDir;
- }
-
- /**
- * If a given IT test has a method that takes longer than a class-set default timeout, declare it failed.
- *
- * Note that this provides a upper bound on test times, even in the presence of Test annotations with a timeout. That is, the Test annotatation can make the
- * timing tighter but will not be able to allow a timeout that takes longer.
- *
- * Defaults to no timeout and can be changed via two mechanisms
- *
- * 1) A given IT class can override the defaultTimeoutSeconds method if test methods in that class should have a timeout. 2) The system property
- * "timeout.factor" is used as a multiplier for the class provided default
- *
- * Note that if either of these values is '0' tests will run with no timeout. The default class level timeout is set to 0.
- *
- */
- @Rule
- public Timeout testsShouldTimeout() {
- int waitLonger = 0;
- try {
- String timeoutString = System.getProperty("timeout.factor");
- if (timeoutString != null && !timeoutString.isEmpty()) {
- waitLonger = Integer.parseInt(timeoutString);
- }
- } catch (NumberFormatException exception) {
- log.warn("Could not parse timeout.factor, defaulting to no timeout.");
- }
- return new Timeout(waitLonger * defaultTimeoutSeconds() * 1000);
- }
-
- /**
- * time to wait per-method before declaring a timeout, in seconds.
- */
- protected int defaultTimeoutSeconds() {
- return 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/AccumuloITBase.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/AccumuloITBase.java b/test/src/test/java/org/apache/accumulo/harness/AccumuloITBase.java
new file mode 100644
index 0000000..8e2f6e0
--- /dev/null
+++ b/test/src/test/java/org/apache/accumulo/harness/AccumuloITBase.java
@@ -0,0 +1,104 @@
+/*
+ * 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.accumulo.harness;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Rule;
+import org.junit.rules.TestName;
+import org.junit.rules.Timeout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Methods, setup and/or infrastructure which are common to any Accumulo integration test.
+ */
+public class AccumuloITBase {
+ private static final Logger log = LoggerFactory.getLogger(AccumuloITBase.class);
+
+ @Rule
+ public TestName testName = new TestName();
+
+ public String[] getUniqueNames(int num) {
+ String[] names = new String[num];
+ for (int i = 0; i < num; i++)
+ names[i] = this.getClass().getSimpleName() + "_" + testName.getMethodName() + i;
+ return names;
+ }
+
+ /**
+ * Determines an appropriate directory name for holding generated ssl files for a test. The directory returned will have the same name as the provided
+ * directory, but with the suffix "-ssl" appended. This new directory is not created here, but is expected to be created as needed.
+ *
+ * @param baseDir
+ * the original directory, which the new directory will be created next to; it should exist
+ * @return the new directory (is not created)
+ */
+ public static File getSslDir(File baseDir) {
+ assertTrue(baseDir.exists() && baseDir.isDirectory());
+ return new File(baseDir.getParentFile(), baseDir.getName() + "-ssl");
+ }
+
+ public static File createTestDir(String name) {
+ File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
+ assertTrue(baseDir.mkdirs() || baseDir.isDirectory());
+ if (name == null)
+ return baseDir;
+ File testDir = new File(baseDir, name);
+ FileUtils.deleteQuietly(testDir);
+ assertTrue(testDir.mkdir());
+ return testDir;
+ }
+
+ /**
+ * If a given IT test has a method that takes longer than a class-set default timeout, declare it failed.
+ *
+ * Note that this provides a upper bound on test times, even in the presence of Test annotations with a timeout. That is, the Test annotatation can make the
+ * timing tighter but will not be able to allow a timeout that takes longer.
+ *
+ * Defaults to no timeout and can be changed via two mechanisms
+ *
+ * 1) A given IT class can override the defaultTimeoutSeconds method if test methods in that class should have a timeout. 2) The system property
+ * "timeout.factor" is used as a multiplier for the class provided default
+ *
+ * Note that if either of these values is '0' tests will run with no timeout. The default class level timeout is set to 0.
+ *
+ */
+ @Rule
+ public Timeout testsShouldTimeout() {
+ int waitLonger = 0;
+ try {
+ String timeoutString = System.getProperty("timeout.factor");
+ if (timeoutString != null && !timeoutString.isEmpty()) {
+ waitLonger = Integer.parseInt(timeoutString);
+ }
+ } catch (NumberFormatException exception) {
+ log.warn("Could not parse timeout.factor, defaulting to no timeout.");
+ }
+ return new Timeout(waitLonger * defaultTimeoutSeconds() * 1000);
+ }
+
+ /**
+ * time to wait per-method before declaring a timeout, in seconds.
+ */
+ protected int defaultTimeoutSeconds() {
+ return 0;
+ }
+}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java b/test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java
index 5d32cb1..d923593 100644
--- a/test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java
+++ b/test/src/test/java/org/apache/accumulo/harness/MiniClusterHarness.java
@@ -72,24 +72,24 @@ public class MiniClusterHarness {
return create(MiniClusterHarness.class.getName(), Long.toString(COUNTER.incrementAndGet()), token, kdc);
}
- public MiniAccumuloClusterImpl create(AccumuloIT testBase, AuthenticationToken token) throws Exception {
+ public MiniAccumuloClusterImpl create(AccumuloITBase testBase, AuthenticationToken token) throws Exception {
return create(testBase.getClass().getName(), testBase.testName.getMethodName(), token);
}
- public MiniAccumuloClusterImpl create(AccumuloIT testBase, AuthenticationToken token, TestingKdc kdc) throws Exception {
+ public MiniAccumuloClusterImpl create(AccumuloITBase testBase, AuthenticationToken token, TestingKdc kdc) throws Exception {
return create(testBase, token, kdc, MiniClusterConfigurationCallback.NO_CALLBACK);
}
- public MiniAccumuloClusterImpl create(AccumuloIT testBase, AuthenticationToken token, TestingKdc kdc, MiniClusterConfigurationCallback configCallback)
+ public MiniAccumuloClusterImpl create(AccumuloITBase testBase, AuthenticationToken token, TestingKdc kdc, MiniClusterConfigurationCallback configCallback)
throws Exception {
return create(testBase.getClass().getName(), testBase.testName.getMethodName(), token, configCallback, kdc);
}
- public MiniAccumuloClusterImpl create(AccumuloClusterIT testBase, AuthenticationToken token, TestingKdc kdc) throws Exception {
+ public MiniAccumuloClusterImpl create(AccumuloClusterHarness testBase, AuthenticationToken token, TestingKdc kdc) throws Exception {
return create(testBase.getClass().getName(), testBase.testName.getMethodName(), token, testBase, kdc);
}
- public MiniAccumuloClusterImpl create(AccumuloClusterIT testBase, AuthenticationToken token, MiniClusterConfigurationCallback callback) throws Exception {
+ public MiniAccumuloClusterImpl create(AccumuloClusterHarness testBase, AuthenticationToken token, MiniClusterConfigurationCallback callback) throws Exception {
return create(testBase.getClass().getName(), testBase.testName.getMethodName(), token, callback);
}
@@ -118,7 +118,7 @@ public class MiniClusterHarness {
rootPasswd = UUID.randomUUID().toString();
}
- File baseDir = AccumuloClusterIT.createTestDir(testClassName + "_" + testMethodName);
+ File baseDir = AccumuloClusterHarness.createTestDir(testClassName + "_" + testMethodName);
MiniAccumuloConfigImpl cfg = new MiniAccumuloConfigImpl(baseDir, rootPasswd);
// Enable native maps by default
@@ -128,7 +128,7 @@ public class MiniClusterHarness {
Configuration coreSite = new Configuration(false);
// Setup SSL and credential providers if the properties request such
- configureForEnvironment(cfg, getClass(), AccumuloClusterIT.getSslDir(baseDir), coreSite, kdc);
+ configureForEnvironment(cfg, getClass(), AccumuloClusterHarness.getSslDir(baseDir), coreSite, kdc);
// Invoke the callback for tests to configure MAC before it starts
configCallback.configureMiniCluster(cfg, coreSite);
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterBase.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterBase.java b/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterBase.java
new file mode 100644
index 0000000..433e035
--- /dev/null
+++ b/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterBase.java
@@ -0,0 +1,185 @@
+/*
+ * 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.accumulo.harness;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Random;
+
+import org.apache.accumulo.cluster.ClusterUser;
+import org.apache.accumulo.cluster.ClusterUsers;
+import org.apache.accumulo.core.client.Connector;
+import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.client.security.tokens.KerberosToken;
+import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.security.TablePermission;
+import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
+import org.apache.hadoop.security.UserGroupInformation;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Convenience class which starts a single MAC instance for a test to leverage.
+ *
+ * There isn't a good way to build this off of the {@link AccumuloClusterHarness} (as would be the logical place) because we need to start the MiniAccumuloCluster in
+ * a static BeforeClass-annotated method. Because it is static and invoked before any other BeforeClass methods in the implementation, the actual test classes
+ * can't expose any information to tell the base class that it is to perform the one-MAC-per-class semantics.
+ */
+public abstract class SharedMiniClusterBase extends AccumuloITBase implements ClusterUsers {
+ private static final Logger log = LoggerFactory.getLogger(SharedMiniClusterBase.class);
+ public static final String TRUE = Boolean.toString(true);
+
+ private static String principal = "root";
+ private static String rootPassword;
+ private static AuthenticationToken token;
+ private static MiniAccumuloClusterImpl cluster;
+ private static TestingKdc krb;
+
+ @BeforeClass
+ public static void startMiniCluster() throws Exception {
+ File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
+ assertTrue(baseDir.mkdirs() || baseDir.isDirectory());
+
+ // Make a shared MAC instance instead of spinning up one per test method
+ MiniClusterHarness harness = new MiniClusterHarness();
+
+ if (TRUE.equals(System.getProperty(MiniClusterHarness.USE_KERBEROS_FOR_IT_OPTION))) {
+ krb = new TestingKdc();
+ krb.start();
+ // Enabled krb auth
+ Configuration conf = new Configuration(false);
+ conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, "kerberos");
+ UserGroupInformation.setConfiguration(conf);
+ // Login as the client
+ ClusterUser rootUser = krb.getRootUser();
+ // Get the krb token
+ principal = rootUser.getPrincipal();
+ token = new KerberosToken(principal, rootUser.getKeytab(), true);
+ } else {
+ rootPassword = "rootPasswordShared1";
+ token = new PasswordToken(rootPassword);
+ }
+
+ cluster = harness.create(SharedMiniClusterBase.class.getName(), System.currentTimeMillis() + "_" + new Random().nextInt(Short.MAX_VALUE), token, krb);
+ cluster.start();
+
+ if (null != krb) {
+ final String traceTable = Property.TRACE_TABLE.getDefaultValue();
+ final ClusterUser systemUser = krb.getAccumuloServerUser(), rootUser = krb.getRootUser();
+ // Login as the trace user
+ // Open a connector as the system user (ensures the user will exist for us to assign permissions to)
+ Connector conn = cluster.getConnector(systemUser.getPrincipal(), new KerberosToken(systemUser.getPrincipal(), systemUser.getKeytab(), true));
+
+ // Then, log back in as the "root" user and do the grant
+ UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
+ conn = cluster.getConnector(principal, token);
+
+ // Create the trace table
+ conn.tableOperations().create(traceTable);
+
+ // Trace user (which is the same kerberos principal as the system user, but using a normal KerberosToken) needs
+ // to have the ability to read, write and alter the trace table
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.READ);
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.WRITE);
+ conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.ALTER_TABLE);
+ }
+ }
+
+ @AfterClass
+ public static void stopMiniCluster() throws Exception {
+ if (null != cluster) {
+ try {
+ cluster.stop();
+ } catch (Exception e) {
+ log.error("Failed to stop minicluster", e);
+ }
+ }
+ if (null != krb) {
+ try {
+ krb.stop();
+ } catch (Exception e) {
+ log.error("Failed to stop KDC", e);
+ }
+ }
+ }
+
+ public static String getRootPassword() {
+ return rootPassword;
+ }
+
+ public static AuthenticationToken getToken() {
+ if (token instanceof KerberosToken) {
+ try {
+ UserGroupInformation.loginUserFromKeytab(getPrincipal(), krb.getRootUser().getKeytab().getAbsolutePath());
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to login", e);
+ }
+ }
+ return token;
+ }
+
+ public static String getPrincipal() {
+ return principal;
+ }
+
+ public static MiniAccumuloClusterImpl getCluster() {
+ return cluster;
+ }
+
+ public static File getMiniClusterDir() {
+ return cluster.getConfig().getDir();
+ }
+
+ public static Connector getConnector() {
+ try {
+ return getCluster().getConnector(principal, getToken());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static TestingKdc getKdc() {
+ return krb;
+ }
+
+ @Override
+ public ClusterUser getAdminUser() {
+ if (null == krb) {
+ return new ClusterUser(getPrincipal(), getRootPassword());
+ } else {
+ return krb.getRootUser();
+ }
+ }
+
+ @Override
+ public ClusterUser getUser(int offset) {
+ if (null == krb) {
+ String user = SharedMiniClusterBase.class.getName() + "_" + testName.getMethodName() + "_" + offset;
+ // Password is the username
+ return new ClusterUser(user, user);
+ } else {
+ return krb.getClientPrincipal(offset);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterIT.java b/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterIT.java
deleted file mode 100644
index 4a2501f..0000000
--- a/test/src/test/java/org/apache/accumulo/harness/SharedMiniClusterIT.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * 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.accumulo.harness;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Random;
-
-import org.apache.accumulo.cluster.ClusterUser;
-import org.apache.accumulo.cluster.ClusterUsers;
-import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
-import org.apache.accumulo.core.client.security.tokens.KerberosToken;
-import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.security.TablePermission;
-import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Convenience class which starts a single MAC instance for a test to leverage.
- *
- * There isn't a good way to build this off of the {@link AccumuloClusterIT} (as would be the logical place) because we need to start the MiniAccumuloCluster in
- * a static BeforeClass-annotated method. Because it is static and invoked before any other BeforeClass methods in the implementation, the actual test classes
- * can't expose any information to tell the base class that it is to perform the one-MAC-per-class semantics.
- */
-public abstract class SharedMiniClusterIT extends AccumuloIT implements ClusterUsers {
- private static final Logger log = LoggerFactory.getLogger(SharedMiniClusterIT.class);
- public static final String TRUE = Boolean.toString(true);
-
- private static String principal = "root";
- private static String rootPassword;
- private static AuthenticationToken token;
- private static MiniAccumuloClusterImpl cluster;
- private static TestingKdc krb;
-
- @BeforeClass
- public static void startMiniCluster() throws Exception {
- File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
- assertTrue(baseDir.mkdirs() || baseDir.isDirectory());
-
- // Make a shared MAC instance instead of spinning up one per test method
- MiniClusterHarness harness = new MiniClusterHarness();
-
- if (TRUE.equals(System.getProperty(MiniClusterHarness.USE_KERBEROS_FOR_IT_OPTION))) {
- krb = new TestingKdc();
- krb.start();
- // Enabled krb auth
- Configuration conf = new Configuration(false);
- conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, "kerberos");
- UserGroupInformation.setConfiguration(conf);
- // Login as the client
- ClusterUser rootUser = krb.getRootUser();
- // Get the krb token
- principal = rootUser.getPrincipal();
- token = new KerberosToken(principal, rootUser.getKeytab(), true);
- } else {
- rootPassword = "rootPasswordShared1";
- token = new PasswordToken(rootPassword);
- }
-
- cluster = harness.create(SharedMiniClusterIT.class.getName(), System.currentTimeMillis() + "_" + new Random().nextInt(Short.MAX_VALUE), token, krb);
- cluster.start();
-
- if (null != krb) {
- final String traceTable = Property.TRACE_TABLE.getDefaultValue();
- final ClusterUser systemUser = krb.getAccumuloServerUser(), rootUser = krb.getRootUser();
- // Login as the trace user
- // Open a connector as the system user (ensures the user will exist for us to assign permissions to)
- Connector conn = cluster.getConnector(systemUser.getPrincipal(), new KerberosToken(systemUser.getPrincipal(), systemUser.getKeytab(), true));
-
- // Then, log back in as the "root" user and do the grant
- UserGroupInformation.loginUserFromKeytab(rootUser.getPrincipal(), rootUser.getKeytab().getAbsolutePath());
- conn = cluster.getConnector(principal, token);
-
- // Create the trace table
- conn.tableOperations().create(traceTable);
-
- // Trace user (which is the same kerberos principal as the system user, but using a normal KerberosToken) needs
- // to have the ability to read, write and alter the trace table
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.READ);
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.WRITE);
- conn.securityOperations().grantTablePermission(systemUser.getPrincipal(), traceTable, TablePermission.ALTER_TABLE);
- }
- }
-
- @AfterClass
- public static void stopMiniCluster() throws Exception {
- if (null != cluster) {
- try {
- cluster.stop();
- } catch (Exception e) {
- log.error("Failed to stop minicluster", e);
- }
- }
- if (null != krb) {
- try {
- krb.stop();
- } catch (Exception e) {
- log.error("Failed to stop KDC", e);
- }
- }
- }
-
- public static String getRootPassword() {
- return rootPassword;
- }
-
- public static AuthenticationToken getToken() {
- if (token instanceof KerberosToken) {
- try {
- UserGroupInformation.loginUserFromKeytab(getPrincipal(), krb.getRootUser().getKeytab().getAbsolutePath());
- } catch (IOException e) {
- throw new RuntimeException("Failed to login", e);
- }
- }
- return token;
- }
-
- public static String getPrincipal() {
- return principal;
- }
-
- public static MiniAccumuloClusterImpl getCluster() {
- return cluster;
- }
-
- public static File getMiniClusterDir() {
- return cluster.getConfig().getDir();
- }
-
- public static Connector getConnector() {
- try {
- return getCluster().getConnector(principal, getToken());
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- public static TestingKdc getKdc() {
- return krb;
- }
-
- @Override
- public ClusterUser getAdminUser() {
- if (null == krb) {
- return new ClusterUser(getPrincipal(), getRootPassword());
- } else {
- return krb.getRootUser();
- }
- }
-
- @Override
- public ClusterUser getUser(int offset) {
- if (null == krb) {
- String user = SharedMiniClusterIT.class.getName() + "_" + testName.getMethodName() + "_" + offset;
- // Password is the username
- return new ClusterUser(user, user);
- } else {
- return krb.getClientPrincipal(offset);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterConfiguration.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterConfiguration.java b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterConfiguration.java
index 3ce83b8..31ed94a 100644
--- a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterConfiguration.java
+++ b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterConfiguration.java
@@ -18,7 +18,7 @@ package org.apache.accumulo.harness.conf;
import org.apache.accumulo.core.client.ClientConfiguration;
import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
-import org.apache.accumulo.harness.AccumuloClusterIT.ClusterType;
+import org.apache.accumulo.harness.AccumuloClusterHarness.ClusterType;
/**
* Base functionality that must be provided as configuration to the test
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterPropertyConfiguration.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterPropertyConfiguration.java b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterPropertyConfiguration.java
index 8661d39..2300da3 100644
--- a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterPropertyConfiguration.java
+++ b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloClusterPropertyConfiguration.java
@@ -25,7 +25,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
-import org.apache.accumulo.harness.AccumuloClusterIT.ClusterType;
+import org.apache.accumulo.harness.AccumuloClusterHarness.ClusterType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java
index cb43556..4d233a5 100644
--- a/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java
+++ b/test/src/test/java/org/apache/accumulo/harness/conf/AccumuloMiniClusterConfiguration.java
@@ -24,8 +24,8 @@ import org.apache.accumulo.core.client.ClientConfiguration;
import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
import org.apache.accumulo.core.client.security.tokens.KerberosToken;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.harness.AccumuloClusterIT;
-import org.apache.accumulo.harness.AccumuloClusterIT.ClusterType;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
+import org.apache.accumulo.harness.AccumuloClusterHarness.ClusterType;
import org.apache.accumulo.harness.MiniClusterHarness;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
@@ -65,7 +65,7 @@ public class AccumuloMiniClusterConfiguration extends AccumuloClusterPropertyCon
@Override
public String getAdminPrincipal() {
if (saslEnabled) {
- return AccumuloClusterIT.getKdc().getRootUser().getPrincipal();
+ return AccumuloClusterHarness.getKdc().getRootUser().getPrincipal();
} else {
String principal = conf.get(ACCUMULO_MINI_PRINCIPAL_KEY);
if (null == principal) {
@@ -84,7 +84,7 @@ public class AccumuloMiniClusterConfiguration extends AccumuloClusterPropertyCon
conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION, "kerberos");
UserGroupInformation.setConfiguration(conf);
- ClusterUser rootUser = AccumuloClusterIT.getKdc().getRootUser();
+ ClusterUser rootUser = AccumuloClusterHarness.getKdc().getRootUser();
try {
return new KerberosToken(rootUser.getPrincipal(), rootUser.getKeytab(), true);
} catch (IOException e) {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/harness/conf/StandaloneAccumuloClusterConfiguration.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/harness/conf/StandaloneAccumuloClusterConfiguration.java b/test/src/test/java/org/apache/accumulo/harness/conf/StandaloneAccumuloClusterConfiguration.java
index 4cf145b..ba9dcef 100644
--- a/test/src/test/java/org/apache/accumulo/harness/conf/StandaloneAccumuloClusterConfiguration.java
+++ b/test/src/test/java/org/apache/accumulo/harness/conf/StandaloneAccumuloClusterConfiguration.java
@@ -34,7 +34,7 @@ import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
import org.apache.accumulo.core.client.security.tokens.KerberosToken;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.harness.AccumuloClusterIT.ClusterType;
+import org.apache.accumulo.harness.AccumuloClusterHarness.ClusterType;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.hadoop.fs.Path;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java b/test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java
index 8ed0e2a..213ab59 100644
--- a/test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/ArbitraryTablePropertiesIT.java
@@ -25,13 +25,13 @@ import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
import org.apache.accumulo.core.client.security.tokens.PasswordToken;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.security.TablePermission;
-import org.apache.accumulo.harness.SharedMiniClusterIT;
+import org.apache.accumulo.harness.SharedMiniClusterBase;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class ArbitraryTablePropertiesIT extends SharedMiniClusterIT {
+public class ArbitraryTablePropertiesIT extends SharedMiniClusterBase {
private static final Logger log = LoggerFactory.getLogger(ArbitraryTablePropertiesIT.class);
@Override
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/AssignmentThreadsIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/AssignmentThreadsIT.java b/test/src/test/java/org/apache/accumulo/test/AssignmentThreadsIT.java
index fd7ea6c..c9a83a6 100644
--- a/test/src/test/java/org/apache/accumulo/test/AssignmentThreadsIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/AssignmentThreadsIT.java
@@ -26,13 +26,13 @@ import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.accumulo.test.functional.ConfigurableMacIT;
+import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.junit.Test;
// ACCUMULO-1177
-public class AssignmentThreadsIT extends ConfigurableMacIT {
+public class AssignmentThreadsIT extends ConfigurableMacBase {
@Override
public void configure(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java b/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java
index 14361a6..1eb2373 100644
--- a/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java
@@ -50,7 +50,7 @@ import org.apache.accumulo.core.security.TablePermission;
import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
import org.apache.accumulo.server.security.AuditedSecurityOperation;
-import org.apache.accumulo.test.functional.ConfigurableMacIT;
+import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.apache.hadoop.io.Text;
@@ -64,7 +64,7 @@ import org.junit.Test;
* MiniAccumuloClusterTest sets up the log4j stuff differently to an installed instance, instead piping everything through stdout and writing to a set location
* so we have to find the logs and grep the bits we need out.
*/
-public class AuditMessageIT extends ConfigurableMacIT {
+public class AuditMessageIT extends ConfigurableMacBase {
private static final String AUDIT_USER_1 = "AuditUser1";
private static final String AUDIT_USER_2 = "AuditUser2";
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java b/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
index 0dcdf42..5b0b84d 100644
--- a/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
@@ -36,7 +36,7 @@ import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.core.zookeeper.ZooUtil;
import org.apache.accumulo.fate.zookeeper.ZooCache;
import org.apache.accumulo.fate.zookeeper.ZooLock;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.apache.accumulo.minicluster.ServerType;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
import org.apache.hadoop.conf.Configuration;
@@ -49,7 +49,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// Accumulo3047
-public class BadDeleteMarkersCreatedIT extends AccumuloClusterIT {
+public class BadDeleteMarkersCreatedIT extends AccumuloClusterHarness {
private static final Logger log = LoggerFactory.getLogger(BadDeleteMarkersCreatedIT.class);
@Override
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BalanceFasterIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BalanceFasterIT.java b/test/src/test/java/org/apache/accumulo/test/BalanceFasterIT.java
index 2cc5d34..bf9f5f0 100644
--- a/test/src/test/java/org/apache/accumulo/test/BalanceFasterIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BalanceFasterIT.java
@@ -34,13 +34,13 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.accumulo.test.functional.ConfigurableMacIT;
+import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.junit.Test;
// ACCUMULO-2952
-public class BalanceFasterIT extends ConfigurableMacIT {
+public class BalanceFasterIT extends ConfigurableMacBase {
@Override
public void configure(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BalanceIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BalanceIT.java b/test/src/test/java/org/apache/accumulo/test/BalanceIT.java
index 8703f18..605ac94 100644
--- a/test/src/test/java/org/apache/accumulo/test/BalanceIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BalanceIT.java
@@ -20,13 +20,13 @@ import java.util.SortedSet;
import java.util.TreeSet;
import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.apache.hadoop.io.Text;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class BalanceIT extends AccumuloClusterIT {
+public class BalanceIT extends AccumuloClusterHarness {
private static final Logger log = LoggerFactory.getLogger(BalanceIT.class);
@Override
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BalanceWithOfflineTableIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BalanceWithOfflineTableIT.java b/test/src/test/java/org/apache/accumulo/test/BalanceWithOfflineTableIT.java
index 2d79dd8..9acefc4 100644
--- a/test/src/test/java/org/apache/accumulo/test/BalanceWithOfflineTableIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BalanceWithOfflineTableIT.java
@@ -25,13 +25,13 @@ import java.util.concurrent.TimeUnit;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.util.SimpleThreadPool;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.accumulo.test.functional.ConfigurableMacIT;
+import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.junit.Test;
// ACCUMULO-3692
-public class BalanceWithOfflineTableIT extends ConfigurableMacIT {
+public class BalanceWithOfflineTableIT extends ConfigurableMacBase {
@Override
protected int defaultTimeoutSeconds() {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BatchWriterIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BatchWriterIT.java b/test/src/test/java/org/apache/accumulo/test/BatchWriterIT.java
index b1fe900..11fc595 100644
--- a/test/src/test/java/org/apache/accumulo/test/BatchWriterIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BatchWriterIT.java
@@ -21,10 +21,10 @@ import org.apache.accumulo.core.client.BatchWriterConfig;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.core.data.Value;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.junit.Test;
-public class BatchWriterIT extends AccumuloClusterIT {
+public class BatchWriterIT extends AccumuloClusterHarness {
@Override
public int defaultTimeoutSeconds() {
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/BulkImportVolumeIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/BulkImportVolumeIT.java b/test/src/test/java/org/apache/accumulo/test/BulkImportVolumeIT.java
index cc8fcc9..ce60893 100644
--- a/test/src/test/java/org/apache/accumulo/test/BulkImportVolumeIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BulkImportVolumeIT.java
@@ -23,7 +23,7 @@ import java.io.File;
import org.apache.accumulo.core.client.admin.TableOperations;
import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
@@ -35,7 +35,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// ACCUMULO-118/ACCUMULO-2504
-public class BulkImportVolumeIT extends AccumuloClusterIT {
+public class BulkImportVolumeIT extends AccumuloClusterHarness {
private static final Logger log = LoggerFactory.getLogger(BulkImportVolumeIT.class);
File volDirBase = null;
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/CleanWalIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/CleanWalIT.java b/test/src/test/java/org/apache/accumulo/test/CleanWalIT.java
index 3f9e1cc..2474b3e 100644
--- a/test/src/test/java/org/apache/accumulo/test/CleanWalIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/CleanWalIT.java
@@ -34,7 +34,7 @@ import org.apache.accumulo.core.metadata.RootTable;
import org.apache.accumulo.core.metadata.schema.MetadataSchema;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.core.util.UtilWaitThread;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.apache.accumulo.minicluster.ServerType;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
import org.apache.hadoop.conf.Configuration;
@@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory;
import com.google.common.collect.Iterators;
-public class CleanWalIT extends AccumuloClusterIT {
+public class CleanWalIT extends AccumuloClusterHarness {
private static final Logger log = LoggerFactory.getLogger(CleanWalIT.class);
@Override
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java b/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
index 65be396..74d3593 100644
--- a/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
@@ -81,7 +81,7 @@ import org.apache.accumulo.core.trace.Trace;
import org.apache.accumulo.core.util.FastFormat;
import org.apache.accumulo.core.util.UtilWaitThread;
import org.apache.accumulo.examples.simple.constraints.AlphaNumKeyConstraint;
-import org.apache.accumulo.harness.AccumuloClusterIT;
+import org.apache.accumulo.harness.AccumuloClusterHarness;
import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
import org.apache.accumulo.test.functional.BadIterator;
import org.apache.accumulo.test.functional.SlowIterator;
@@ -101,7 +101,7 @@ import com.google.common.collect.Iterables;
/**
*
*/
-public class ConditionalWriterIT extends AccumuloClusterIT {
+public class ConditionalWriterIT extends AccumuloClusterHarness {
private static final Logger log = LoggerFactory.getLogger(ConditionalWriterIT.class);
@Override
http://git-wip-us.apache.org/repos/asf/accumulo/blob/ab5a867f/test/src/test/java/org/apache/accumulo/test/ConfigurableMajorCompactionIT.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/ConfigurableMajorCompactionIT.java b/test/src/test/java/org/apache/accumulo/test/ConfigurableMajorCompactionIT.java
index 2a13aed..bc45dda 100644
--- a/test/src/test/java/org/apache/accumulo/test/ConfigurableMajorCompactionIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/ConfigurableMajorCompactionIT.java
@@ -34,7 +34,7 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.fate.util.UtilWaitThread;
import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
-import org.apache.accumulo.test.functional.ConfigurableMacIT;
+import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.accumulo.tserver.compaction.CompactionPlan;
import org.apache.accumulo.tserver.compaction.CompactionStrategy;
import org.apache.accumulo.tserver.compaction.MajorCompactionRequest;
@@ -44,7 +44,7 @@ import org.junit.Test;
import com.google.common.collect.Iterators;
-public class ConfigurableMajorCompactionIT extends ConfigurableMacIT {
+public class ConfigurableMajorCompactionIT extends ConfigurableMacBase {
@Override
public int defaultTimeoutSeconds() {