Merge pull request #7 from myrle-krantz/develop

Added test that I can reach spring monitoring endpoints via system to…
diff --git a/component-test/src/main/java/TestPermittableEndpoints.java b/component-test/src/main/java/TestPermittableEndpoints.java
index 64a4f4e..ed2c16c 100644
--- a/component-test/src/main/java/TestPermittableEndpoints.java
+++ b/component-test/src/main/java/TestPermittableEndpoints.java
@@ -39,6 +39,9 @@
 import java.util.Arrays;
 import java.util.List;
 
+/**
+ * @author Myrle Krantz
+ */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
 public class TestPermittableEndpoints {
diff --git a/component-test/src/main/java/TestSystemTokenOnSpringEndpoints.java b/component-test/src/main/java/TestSystemTokenOnSpringEndpoints.java
new file mode 100644
index 0000000..07cdc5c
--- /dev/null
+++ b/component-test/src/main/java/TestSystemTokenOnSpringEndpoints.java
@@ -0,0 +1,91 @@
+/*
+ * 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.ExampleConfiguration;
+import io.mifos.anubis.example.simple.Metrics;
+import io.mifos.anubis.example.simple.MetricsFeignClient;
+import io.mifos.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import io.mifos.core.api.context.AutoUserContext;
+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 TestSystemTokenOnSpringEndpoints {
+  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", "SpringJavaAutowiringInspection", "SpringJavaAutowiredMembersInspection"})
+  @Autowired
+  protected MetricsFeignClient example;
+
+
+  @Test
+  public void shouldBeAbleToGetMetrics() throws Exception {
+    try (final AutoUserContext ignored = tenantApplicationSecurityEnvironment.createAutoSeshatContext()) {
+      final Metrics metrics = example.getMetrics();
+      Assert.assertTrue(metrics.getThreads() > 0);
+    }
+  }
+}
\ No newline at end of file
diff --git a/component-test/src/main/java/io/mifos/anubis/example/simple/Metrics.java b/component-test/src/main/java/io/mifos/anubis/example/simple/Metrics.java
new file mode 100644
index 0000000..c4538cb
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/example/simple/Metrics.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.example.simple;
+
+/**
+ * @author Myrle Krantz
+ */
+public class Metrics {
+  private Integer threads;
+
+  public Metrics() {
+  }
+
+  public Integer getThreads() {
+    return threads;
+  }
+
+  public void setThreads(Integer threads) {
+    this.threads = threads;
+  }
+
+  @Override
+  public String toString() {
+    return "Metrics{" +
+            "threads=" + threads +
+            '}';
+  }
+}
diff --git a/component-test/src/main/java/io/mifos/anubis/example/simple/MetricsFeignClient.java b/component-test/src/main/java/io/mifos/anubis/example/simple/MetricsFeignClient.java
new file mode 100644
index 0000000..1d9d7ae
--- /dev/null
+++ b/component-test/src/main/java/io/mifos/anubis/example/simple/MetricsFeignClient.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.example.simple;
+
+import io.mifos.core.api.util.CustomFeignClientsConfiguration;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * @author Myrle Krantz
+ */
+@FeignClient(name="anubis-v1", path="/anubis/v1", configuration = CustomFeignClientsConfiguration.class)
+public interface MetricsFeignClient {
+
+  @RequestMapping(value = "metrics", method = RequestMethod.GET,
+          consumes = MediaType.APPLICATION_JSON_VALUE,
+          produces = MediaType.ALL_VALUE)
+  Metrics getMetrics();
+}