Updating test environment.  Created three suites. One for each example application used to test anubis. Once the test environment is changed so applications don't all try to use 9090, it will be possible to create a single suite.
diff --git a/component-test/src/main/java/TestAnubisInitializeWithSpecialTenantSignatureRepository.java b/component-test/src/main/java/TestAnubisInitializeWithSpecialTenantSignatureRepository.java
deleted file mode 100644
index b9b973a..0000000
--- a/component-test/src/main/java/TestAnubisInitializeWithSpecialTenantSignatureRepository.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2017 The Mifos Initiative.
- *
- * Licensed 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.
- */
-import io.mifos.anubis.example.nokeystorage.Example;
-import io.mifos.anubis.example.nokeystorage.ExampleConfiguration;
-import io.mifos.anubis.test.v1.SystemSecurityEnvironment;
-import io.mifos.core.api.context.AutoSeshat;
-import io.mifos.core.lang.AutoTenantContext;
-import io.mifos.core.lang.TenantContextHolder;
-import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * @author Myrle Krantz
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestAnubisInitializeWithSpecialTenantSignatureRepository {
-  private static final String APP_NAME = "anubis-v1";
-
-  @Configuration
-  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.nokeystorage"})
-  @RibbonClient(name = APP_NAME)
-  @Import({ExampleConfiguration.class})
-  static public class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean()
-    public Logger logger() {
-      return LoggerFactory.getLogger("initialize-with-special-tenant-signature-repository-test-logger");
-    }
-  }
-
-  @ClassRule
-  public final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-
-  @ClassRule
-  public final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-
-  @Rule
-  public final TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiredMembersInspection"})
-  @Autowired
-  protected Example example;
-
-  @Test
-  public void test()
-  {
-    final SystemSecurityEnvironment systemSecurityEnvironment = new SystemSecurityEnvironment(
-            testEnvironment.getSystemKeyTimestamp(),
-            testEnvironment.getSystemPublicKey(),
-            testEnvironment.getSystemPrivateKey());
-
-    final String systemToken = systemSecurityEnvironment.systemToken(APP_NAME);
-
-    try (final AutoTenantContext ignored = new AutoTenantContext(TenantContextHolder.checkedGetIdentifier())) {
-      try (final AutoSeshat ignored2 = new AutoSeshat(systemToken)) {
-        example.initialize();
-      }}
-  }
-}
diff --git a/component-test/src/main/java/TestAnubisInitializeWithoutServiceBacking.java b/component-test/src/main/java/TestAnubisInitializeWithoutServiceBacking.java
deleted file mode 100644
index 734c88e..0000000
--- a/component-test/src/main/java/TestAnubisInitializeWithoutServiceBacking.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2017 The Mifos Initiative.
- *
- * Licensed 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.
- */
-
-import io.mifos.anubis.api.v1.domain.ApplicationSignatureSet;
-import io.mifos.anubis.example.noinitialize.ExampleConfiguration;
-import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
-import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * @author Myrle Krantz
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestAnubisInitializeWithoutServiceBacking {
-  private static final String APP_NAME = "anubis-v1";
-
-  @Configuration
-  @Import({ExampleConfiguration.class})
-  static public class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean()
-    public Logger logger() {
-      return LoggerFactory.getLogger("initialize-without-rest-definition-test-logger");
-    }
-  }
-
-  @ClassRule
-  public final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-
-  @ClassRule
-  public final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-
-  @Rule
-  public final TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @Test
-  public void test()
-  {
-    final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
-            = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
-
-    final ApplicationSignatureSet applicationSignatureSet
-        = tenantApplicationSecurityEnvironment.initializeTenantInApplication();
-    for (int i = 0; i < 50; i++ ) {
-      final ApplicationSignatureSet x = tenantApplicationSecurityEnvironment.initializeTenantInApplication();
-      Assert.assertEquals(applicationSignatureSet, x);
-    }
-  }
-}
diff --git a/component-test/src/main/java/TestPermittableEndpoints.java b/component-test/src/main/java/TestPermittableEndpoints.java
deleted file mode 100644
index b310ca5..0000000
--- a/component-test/src/main/java/TestPermittableEndpoints.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2017 The Mifos Initiative.
- *
- * Licensed 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.
- */
-import io.mifos.anubis.api.v1.client.Anubis;
-import io.mifos.anubis.api.v1.client.AnubisApiFactory;
-import io.mifos.anubis.api.v1.domain.PermittableEndpoint;
-import io.mifos.anubis.example.noinitialize.ExampleConfiguration;
-import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Myrle Krantz
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestPermittableEndpoints {
-  private static final String APP_NAME = "anubis-v1";
-  private static final String LOGGER_QUALIFIER = "test-logger";
-
-  @Configuration
-  @Import({ExampleConfiguration.class})
-  public static class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean(name=LOGGER_QUALIFIER)
-    public Logger logger() {
-      return LoggerFactory.getLogger("permittable-test-logger");
-    }
-  }
-
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  @Qualifier(value = LOGGER_QUALIFIER)
-  private Logger logger;
-
-  private final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-  private final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-  private final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @ClassRule
-  public static TestRule orderClassRules = RuleChain
-          .outerRule(testEnvironment)
-          .around(cassandraInitializer)
-          .around(tenantDataStoreContext);
-
-  @Test
-  public void shouldFindPermittableEndpoints() throws Exception {
-    final Anubis anubis = AnubisApiFactory.create(TestPermittableEndpoints.testEnvironment.serverURI(), logger);
-    final List<PermittableEndpoint> permittableEndpoints = anubis.getPermittableEndpoints();
-    Assert.assertNotNull(permittableEndpoints);
-    Assert.assertEquals(6, permittableEndpoints.size());
-    Assert.assertTrue(permittableEndpoints.containsAll(Arrays.asList(
-        new PermittableEndpoint("anubis-v1/dummy", "GET"),
-        new PermittableEndpoint("anubis-v1/dummy", "DELETE"),
-        new PermittableEndpoint("anubis-v1/dummy", "POST"),
-        new PermittableEndpoint("anubis-v1/parameterized/*/with/*/parameters", "GET", "endpointGroup"),
-        new PermittableEndpoint("anubis-v1/parameterized/{useridentifier}/with/*/parameters", "GET", "endpointGroupWithParameters"))));
-    Assert.assertFalse(permittableEndpoints.contains(new PermittableEndpoint("anubis-v1/systemendpoint", "POST")));
-  }
-}
diff --git a/component-test/src/main/java/TestSystemToken.java b/component-test/src/main/java/TestSystemToken.java
deleted file mode 100644
index 84f2467..0000000
--- a/component-test/src/main/java/TestSystemToken.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2017 The Mifos Initiative.
- *
- * Licensed 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.
- */
-import io.mifos.anubis.example.simple.Example;
-import io.mifos.anubis.example.simple.ExampleConfiguration;
-import io.mifos.anubis.example.simple.Metrics;
-import io.mifos.anubis.example.simple.MetricsFeignClient;
-import io.mifos.anubis.test.v1.SystemSecurityEnvironment;
-import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
-import io.mifos.core.api.context.AutoUserContext;
-import io.mifos.core.api.util.NotFoundException;
-import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * @author Myrle Krantz
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestSystemToken {
-  private static final String APP_NAME = "anubis-v1";
-
-  @Configuration
-  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.simple"})
-  @RibbonClient(name = APP_NAME)
-  @Import({ExampleConfiguration.class})
-  static public class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean()
-    public Logger logger() {
-      return LoggerFactory.getLogger("system-token-logger");
-    }
-  }
-
-  private final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-  private final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-  private final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @ClassRule
-  public static TestRule orderClassRules = RuleChain
-          .outerRule(testEnvironment)
-          .around(cassandraInitializer)
-          .around(tenantDataStoreContext);
-
-  @Rule
-  public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
-          = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
-
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  private MetricsFeignClient metricsFeignClient;
-
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  private Example example;
-
-
-  @Test
-  public void shouldBeAbleToGetContactSpringEndpoint() throws Exception {
-    try (final AutoUserContext ignored = tenantApplicationSecurityEnvironment.createAutoSeshatContext()) {
-      final Metrics metrics = metricsFeignClient.getMetrics();
-      Assert.assertTrue(metrics.getThreads() > 0);
-    }
-  }
-
-  @Test
-  public void shouldBeAbleToGetForForeignApplication() throws Exception {
-    final TenantApplicationSecurityEnvironmentTestRule tenantForeignApplicationSecurityEnvironment
-            = new TenantApplicationSecurityEnvironmentTestRule("foreign-v1", testEnvironment.serverURI(),
-            new SystemSecurityEnvironment(testEnvironment.getSystemKeyTimestamp(), testEnvironment.getSystemPublicKey(), testEnvironment.getSystemPrivateKey()));
-    try (final AutoUserContext ignored = tenantForeignApplicationSecurityEnvironment.createAutoSeshatContext()) {
-      final boolean ret = example.forApplication("foreign-v1");
-      Assert.assertTrue(ret);
-    }
-  }
-
-  @Test(expected = NotFoundException.class)
-  public void shouldNotBeAbleToGetForForeignApplicationWhenForeignApplicationNotEnabled() throws Exception {
-    final TenantApplicationSecurityEnvironmentTestRule tenantForeignApplicationSecurityEnvironment
-            = new TenantApplicationSecurityEnvironmentTestRule("foreign-v1", testEnvironment.serverURI(),
-            new SystemSecurityEnvironment(testEnvironment.getSystemKeyTimestamp(), testEnvironment.getSystemPublicKey(), testEnvironment.getSystemPrivateKey()));
-    try (final AutoUserContext ignored = tenantForeignApplicationSecurityEnvironment.createAutoSeshatContext()) {
-      example.notForApplication("foreign-v1");
-      Assert.fail("Shouldn't be able to access for a foreign token in this case.");
-    }
-  }
-}
\ No newline at end of file
diff --git a/component-test/src/main/java/io/mifos/anubis/AbstractNoInitializeTest.java b/component-test/src/main/java/io/mifos/anubis/AbstractNoInitializeTest.java
new file mode 100644
index 0000000..5d8af99
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/AbstractNoInitializeTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.example.noinitialize.ExampleConfiguration;
+import io.mifos.anubis.example.noinitialize.Example;
+import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringRunner;
+import io.mifos.anubis.suites.SuiteTestEnvironment;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
+    classes = AbstractNoInitializeTest.TestConfiguration.class)
+public class AbstractNoInitializeTest extends SuiteTestEnvironment {
+  private static final String LOGGER_QUALIFIER = "test-logger";
+  @Configuration
+  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.noinitialize"})
+  @RibbonClient(name = APP_NAME)
+  @Import({ExampleConfiguration.class})
+  static public class TestConfiguration {
+    public TestConfiguration() {
+      super();
+    }
+
+    @Bean(name = LOGGER_QUALIFIER)
+    public Logger logger() {
+      return LoggerFactory.getLogger(APP_NAME + "-logger");
+    }
+  }
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  Example example;
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  @Qualifier(value = LOGGER_QUALIFIER)
+  Logger logger;
+
+  @Rule
+  public final TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/AbstractNoKeyStorageTest.java b/component-test/src/main/java/io/mifos/anubis/AbstractNoKeyStorageTest.java
new file mode 100644
index 0000000..2984c03
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/AbstractNoKeyStorageTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.example.nokeystorage.ExampleConfiguration;
+import io.mifos.anubis.example.nokeystorage.Example;
+import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringRunner;
+import io.mifos.anubis.suites.SuiteTestEnvironment;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
+    classes = AbstractNoKeyStorageTest.TestConfiguration.class)
+public class AbstractNoKeyStorageTest extends SuiteTestEnvironment {
+  private static final String LOGGER_QUALIFIER = "test-logger";
+
+  @Configuration
+  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.nokeystorage"})
+  @RibbonClient(name = APP_NAME)
+  @Import({ExampleConfiguration.class})
+  static public class TestConfiguration {
+    public TestConfiguration() {
+      super();
+    }
+
+    @Bean(name = LOGGER_QUALIFIER)
+    public Logger logger() {
+      return LoggerFactory.getLogger(APP_NAME + "-logger");
+    }
+  }
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  Example example;
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  @Qualifier(value = LOGGER_QUALIFIER)
+  Logger logger;
+
+  @Rule
+  public final TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/AbstractSimpleTest.java b/component-test/src/main/java/io/mifos/anubis/AbstractSimpleTest.java
new file mode 100644
index 0000000..c21db40
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/AbstractSimpleTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.example.simple.Example;
+import io.mifos.anubis.example.simple.ExampleConfiguration;
+import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringRunner;
+import io.mifos.anubis.suites.SuiteTestEnvironment;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
+    classes = AbstractSimpleTest.TestConfiguration.class)
+public class AbstractSimpleTest extends SuiteTestEnvironment {
+  private static final String LOGGER_QUALIFIER = "test-logger";
+
+  @Configuration
+  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.simple"})
+  @RibbonClient(name = APP_NAME)
+  @Import({ExampleConfiguration.class})
+  public static class TestConfiguration {
+    public TestConfiguration() {
+      super();
+    }
+
+    @Bean(name = LOGGER_QUALIFIER)
+    public Logger logger() {
+      return LoggerFactory.getLogger(APP_NAME + "-logger");
+    }
+  }
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  Example example;
+
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  @Qualifier(value = LOGGER_QUALIFIER)
+  Logger logger;
+
+  @ClassRule
+  public final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
+
+  @Rule
+  public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
+      = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
+}
diff --git a/component-test/src/main/java/TestAnubisInitialize.java b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitialize.java
similarity index 72%
rename from component-test/src/main/java/TestAnubisInitialize.java
rename to component-test/src/main/java/io/mifos/anubis/TestAnubisInitialize.java
index 018585d..b911e25 100644
--- a/component-test/src/main/java/TestAnubisInitialize.java
+++ b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitialize.java
@@ -13,78 +13,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package io.mifos.anubis;
 
 import io.mifos.anubis.api.v1.client.Anubis;
 import io.mifos.anubis.api.v1.client.AnubisApiFactory;
 import io.mifos.anubis.api.v1.domain.AllowedOperation;
 import io.mifos.anubis.api.v1.domain.Signature;
-import io.mifos.anubis.example.simple.Example;
-import io.mifos.anubis.example.simple.ExampleConfiguration;
 import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
 import io.mifos.core.api.context.AutoSeshat;
 import io.mifos.core.api.context.AutoUserContext;
 import io.mifos.core.api.util.InvalidTokenException;
 import io.mifos.core.api.util.NotFoundException;
 import io.mifos.core.lang.AutoTenantContext;
-import io.mifos.core.test.env.TestEnvironment;
 import io.mifos.core.test.fixture.TenantDataStoreTestContext;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
 import org.junit.Assert;
-import org.junit.ClassRule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
 
 import java.security.interfaces.RSAPublicKey;
 
 /**
  * @author Myrle Krantz
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestAnubisInitialize {
-  private static final String APP_NAME = "anubis-v1";
-  private static final String LOGGER_QUALIFIER = "test-logger";
-
-  @Configuration
-  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.simple"})
-  @RibbonClient(name = APP_NAME)
-  @Import({ExampleConfiguration.class})
-  public static class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean(name = LOGGER_QUALIFIER)
-    public Logger logger() {
-      return LoggerFactory.getLogger(APP_NAME + "-logger");
-    }
-  }
-
-  @ClassRule
-  public static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-
-  @ClassRule
-  public static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  private Example example;
-
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  @Qualifier(value = LOGGER_QUALIFIER)
-  private Logger logger;
+public class TestAnubisInitialize extends AbstractSimpleTest {
 
   @Test
   public void testBrokenToken()
diff --git a/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithSpecialTenantSignatureRepository.java b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithSpecialTenantSignatureRepository.java
new file mode 100644
index 0000000..a273dc4
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithSpecialTenantSignatureRepository.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.test.v1.SystemSecurityEnvironment;
+import io.mifos.core.api.context.AutoSeshat;
+import io.mifos.core.lang.AutoTenantContext;
+import io.mifos.core.lang.TenantContextHolder;
+import org.junit.Test;
+
+/**
+ * @author Myrle Krantz
+ */
+public class TestAnubisInitializeWithSpecialTenantSignatureRepository extends AbstractNoKeyStorageTest {
+  @Test
+  public void test()
+  {
+    final SystemSecurityEnvironment systemSecurityEnvironment = new SystemSecurityEnvironment(
+            testEnvironment.getSystemKeyTimestamp(),
+            testEnvironment.getSystemPublicKey(),
+            testEnvironment.getSystemPrivateKey());
+
+    final String systemToken = systemSecurityEnvironment.systemToken(APP_NAME);
+
+    try (final AutoTenantContext ignored = new AutoTenantContext(TenantContextHolder.checkedGetIdentifier())) {
+      try (final AutoSeshat ignored2 = new AutoSeshat(systemToken)) {
+        example.initialize();
+      }}
+  }
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithoutServiceBacking.java b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithoutServiceBacking.java
new file mode 100644
index 0000000..832c755
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/TestAnubisInitializeWithoutServiceBacking.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.api.v1.domain.ApplicationSignatureSet;
+import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * @author Myrle Krantz
+ */
+public class TestAnubisInitializeWithoutServiceBacking extends AbstractNoInitializeTest {
+
+  @Test
+  public void test()
+  {
+    final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
+            = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
+
+    final ApplicationSignatureSet applicationSignatureSet
+        = tenantApplicationSecurityEnvironment.initializeTenantInApplication();
+    for (int i = 0; i < 50; i++ ) {
+      final ApplicationSignatureSet x = tenantApplicationSecurityEnvironment.initializeTenantInApplication();
+      Assert.assertEquals(applicationSignatureSet, x);
+    }
+  }
+}
diff --git a/component-test/src/main/java/TestAnubisKeyRotation.java b/component-test/src/main/java/io/mifos/anubis/TestAnubisKeyRotation.java
similarity index 65%
rename from component-test/src/main/java/TestAnubisKeyRotation.java
rename to component-test/src/main/java/io/mifos/anubis/TestAnubisKeyRotation.java
index ce61cf9..1525f4a 100644
--- a/component-test/src/main/java/TestAnubisKeyRotation.java
+++ b/component-test/src/main/java/io/mifos/anubis/TestAnubisKeyRotation.java
@@ -13,79 +13,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package io.mifos.anubis;
+
 import io.mifos.anubis.api.v1.client.Anubis;
 import io.mifos.anubis.api.v1.domain.ApplicationSignatureSet;
 import io.mifos.anubis.api.v1.domain.Signature;
-import io.mifos.anubis.example.simple.Example;
-import io.mifos.anubis.example.simple.ExampleConfiguration;
-import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
 import io.mifos.core.api.context.AutoSeshat;
 import io.mifos.core.api.util.NotFoundException;
 import io.mifos.core.lang.security.RsaKeyPairFactory;
-import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
 import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.List;
 
 /**
  * @author Myrle Krantz
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestAnubisKeyRotation {
-  private static final String APP_NAME = "anubis-v1";
-
-  @Configuration
-  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.simple"})
-  @RibbonClient(name = APP_NAME)
-  @Import({ExampleConfiguration.class})
-  static public class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean()
-    public Logger logger() {
-      return LoggerFactory.getLogger("key-rotation-test-logger");
-    }
-  }
-
-  private final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-  private final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-  private final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @ClassRule
-  public static TestRule orderClassRules = RuleChain
-          .outerRule(testEnvironment)
-          .around(cassandraInitializer)
-          .around(tenantDataStoreContext);
-
-  @Rule
-  public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
-          = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
-
-  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection", "SpringJavaAutowiredMembersInspection"})
-  @Autowired
-  protected Example example;
-
+public class TestAnubisKeyRotation extends AbstractSimpleTest {
   @Test
   public void testKeyRotation()
   {
diff --git a/component-test/src/main/java/TestAnubisTenantPermissions.java b/component-test/src/main/java/io/mifos/anubis/TestAnubisTenantPermissions.java
similarity index 76%
rename from component-test/src/main/java/TestAnubisTenantPermissions.java
rename to component-test/src/main/java/io/mifos/anubis/TestAnubisTenantPermissions.java
index 9d80837..d6fa514 100644
--- a/component-test/src/main/java/TestAnubisTenantPermissions.java
+++ b/component-test/src/main/java/io/mifos/anubis/TestAnubisTenantPermissions.java
@@ -13,10 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package io.mifos.anubis;
 
 import io.mifos.anubis.api.v1.domain.AllowedOperation;
-import io.mifos.anubis.example.noinitialize.Example;
-import io.mifos.anubis.example.noinitialize.ExampleConfiguration;
 import io.mifos.anubis.example.noinitialize.UserContext;
 import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
 import io.mifos.core.api.context.AutoSeshat;
@@ -25,69 +24,21 @@
 import io.mifos.core.api.util.NotFoundException;
 import io.mifos.core.lang.AutoTenantContext;
 import io.mifos.core.test.env.TestEnvironment;
-import io.mifos.core.test.fixture.TenantDataStoreContextTestRule;
-import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
 import org.junit.Assert;
-import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * @author Myrle Krantz
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestAnubisTenantPermissions {
-  private static final String APP_NAME = "anubis-v1";
+public class TestAnubisTenantPermissions extends AbstractNoInitializeTest {
   private static final String DUMMY_URI = "/dummy";
   private static final String DESIGNATOR_URI = "/parameterized/{useridentifier}/with/*/parameters";
   private static final String USER_NAME = "Meryre";
 
-  @Configuration
-  @EnableFeignClients(basePackages = {"io.mifos.anubis.example.noinitialize"})
-  @RibbonClient(name = APP_NAME)
-  @Import({ExampleConfiguration.class})
-  static public class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean()
-    public Logger logger() {
-      return LoggerFactory.getLogger(APP_NAME + "-logger");
-    }
-  }
-
-  private final static TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-  private final static CassandraInitializer cassandraInitializer = new CassandraInitializer();
-  private final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer);
-
-  @ClassRule
-  public static TestRule orderClassRules = RuleChain
-          .outerRule(testEnvironment)
-          .around(cassandraInitializer)
-          .around(tenantDataStoreContext);
-
   @Rule
   public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment);
 
-  @SuppressWarnings("SpringAutowiredFieldsWarningInspection")
-  @Autowired
-  private Example example;
-
   @Test
   public void readPermissionShouldWorkToRead()
   {
diff --git a/component-test/src/main/java/io/mifos/anubis/TestPermittableEndpoints.java b/component-test/src/main/java/io/mifos/anubis/TestPermittableEndpoints.java
new file mode 100644
index 0000000..04fe4be
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/TestPermittableEndpoints.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.api.v1.client.Anubis;
+import io.mifos.anubis.api.v1.client.AnubisApiFactory;
+import io.mifos.anubis.api.v1.domain.PermittableEndpoint;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Myrle Krantz
+ */
+public class TestPermittableEndpoints extends AbstractNoInitializeTest {
+  @Test
+  public void shouldFindPermittableEndpoints() throws Exception {
+    final Anubis anubis = AnubisApiFactory.create(TestPermittableEndpoints.testEnvironment.serverURI(), logger);
+    final List<PermittableEndpoint> permittableEndpoints = anubis.getPermittableEndpoints();
+    Assert.assertNotNull(permittableEndpoints);
+    Assert.assertEquals(6, permittableEndpoints.size());
+    Assert.assertTrue(permittableEndpoints.containsAll(Arrays.asList(
+        new PermittableEndpoint("anubis-v1/dummy", "GET"),
+        new PermittableEndpoint("anubis-v1/dummy", "DELETE"),
+        new PermittableEndpoint("anubis-v1/dummy", "POST"),
+        new PermittableEndpoint("anubis-v1/parameterized/*/with/*/parameters", "GET", "endpointGroup"),
+        new PermittableEndpoint("anubis-v1/parameterized/{useridentifier}/with/*/parameters", "GET", "endpointGroupWithParameters"))));
+    Assert.assertFalse(permittableEndpoints.contains(new PermittableEndpoint("anubis-v1/systemendpoint", "POST")));
+  }
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/TestSystemToken.java b/component-test/src/main/java/io/mifos/anubis/TestSystemToken.java
new file mode 100644
index 0000000..27a7316
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/TestSystemToken.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis;
+
+import io.mifos.anubis.example.simple.Metrics;
+import io.mifos.anubis.example.simple.MetricsFeignClient;
+import io.mifos.anubis.test.v1.SystemSecurityEnvironment;
+import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import io.mifos.core.api.context.AutoUserContext;
+import io.mifos.core.api.util.NotFoundException;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author Myrle Krantz
+ */
+public class TestSystemToken extends AbstractSimpleTest {
+  @SuppressWarnings({"SpringAutowiredFieldsWarningInspection", "SpringJavaAutowiringInspection"})
+  @Autowired
+  private MetricsFeignClient metricsFeignClient;
+
+
+  @Test
+  public void shouldBeAbleToGetContactSpringEndpoint() throws Exception {
+    try (final AutoUserContext ignored = tenantApplicationSecurityEnvironment.createAutoSeshatContext()) {
+      final Metrics metrics = metricsFeignClient.getMetrics();
+      Assert.assertTrue(metrics.getThreads() > 0);
+    }
+  }
+
+  @Test
+  public void shouldBeAbleToGetForForeignApplication() throws Exception {
+    final TenantApplicationSecurityEnvironmentTestRule tenantForeignApplicationSecurityEnvironment
+            = new TenantApplicationSecurityEnvironmentTestRule("foreign-v1", testEnvironment.serverURI(),
+            new SystemSecurityEnvironment(testEnvironment.getSystemKeyTimestamp(), testEnvironment.getSystemPublicKey(), testEnvironment.getSystemPrivateKey()));
+    try (final AutoUserContext ignored = tenantForeignApplicationSecurityEnvironment.createAutoSeshatContext()) {
+      final boolean ret = example.forApplication("foreign-v1");
+      Assert.assertTrue(ret);
+    }
+  }
+
+  @Test(expected = NotFoundException.class)
+  public void shouldNotBeAbleToGetForForeignApplicationWhenForeignApplicationNotEnabled() throws Exception {
+    final TenantApplicationSecurityEnvironmentTestRule tenantForeignApplicationSecurityEnvironment
+            = new TenantApplicationSecurityEnvironmentTestRule("foreign-v1", testEnvironment.serverURI(),
+            new SystemSecurityEnvironment(testEnvironment.getSystemKeyTimestamp(), testEnvironment.getSystemPublicKey(), testEnvironment.getSystemPrivateKey()));
+    try (final AutoUserContext ignored = tenantForeignApplicationSecurityEnvironment.createAutoSeshatContext()) {
+      example.notForApplication("foreign-v1");
+      Assert.fail("Shouldn't be able to access for a foreign token in this case.");
+    }
+  }
+}
\ No newline at end of file
diff --git a/component-test/src/main/java/io/mifos/anubis/suites/SuiteTestEnvironment.java b/component-test/src/main/java/io/mifos/anubis/suites/SuiteTestEnvironment.java
new file mode 100644
index 0000000..0285494
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/suites/SuiteTestEnvironment.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis.suites;
+
+import io.mifos.core.test.env.TestEnvironment;
+import io.mifos.core.test.fixture.cassandra.CassandraInitializer;
+import org.junit.ClassRule;
+import org.junit.rules.RuleChain;
+import org.junit.rules.RunExternalResourceOnce;
+import org.junit.rules.TestRule;
+
+/**
+ * @author Myrle Krantz
+ */
+public class SuiteTestEnvironment {
+  public static final String APP_NAME = "anubis-v1";
+
+  static protected TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
+  static protected CassandraInitializer cassandraInitializer = new CassandraInitializer();
+
+  @ClassRule
+  public static TestRule orderClassRules = RuleChain
+      .outerRule(new RunExternalResourceOnce(testEnvironment))
+      .around(new RunExternalResourceOnce(cassandraInitializer));
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoInitialize.java b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoInitialize.java
new file mode 100644
index 0000000..d35bee0
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoInitialize.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis.suites;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import io.mifos.anubis.TestAnubisInitializeWithoutServiceBacking;
+import io.mifos.anubis.TestAnubisTenantPermissions;
+import io.mifos.anubis.TestPermittableEndpoints;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    TestAnubisInitializeWithoutServiceBacking.class,
+    TestPermittableEndpoints.class,
+    TestAnubisTenantPermissions.class,
+})
+public class TestSuiteNoInitialize extends SuiteTestEnvironment {
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoKeyStorage.java b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoKeyStorage.java
new file mode 100644
index 0000000..17517d9
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteNoKeyStorage.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis.suites;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import io.mifos.anubis.TestAnubisInitializeWithSpecialTenantSignatureRepository;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    TestAnubisInitializeWithSpecialTenantSignatureRepository.class,
+})
+public class TestSuiteNoKeyStorage extends SuiteTestEnvironment {
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteSimple.java b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteSimple.java
new file mode 100644
index 0000000..742c47a
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/suites/TestSuiteSimple.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017 The Mifos Initiative.
+ *
+ * Licensed 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 io.mifos.anubis.suites;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import io.mifos.anubis.TestAnubisInitialize;
+import io.mifos.anubis.TestAnubisKeyRotation;
+import io.mifos.anubis.TestSystemToken;
+
+/**
+ * @author Myrle Krantz
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    TestAnubisInitialize.class,
+    TestAnubisKeyRotation.class,
+    TestSystemToken.class,
+})
+public class TestSuiteSimple extends SuiteTestEnvironment {
+}