killbill-aplcache

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
index 083a739..f057832 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/DefaultJaxrsModule.java
@@ -25,6 +25,7 @@ import org.killbill.billing.platform.api.KillbillConfigSource;
 import org.killbill.billing.util.config.definition.JaxrsConfig;
 import org.killbill.billing.util.glue.KillBillModule;
 import org.skife.config.ConfigurationObjectFactory;
+import org.skife.config.TimeSpan;
 
 public class DefaultJaxrsModule extends KillBillModule {
 
@@ -36,9 +37,47 @@ public class DefaultJaxrsModule extends KillBillModule {
     protected void configure() {
         final ConfigurationObjectFactory factory = new ConfigurationObjectFactory(skifeConfigSource);
         final JaxrsConfig jaxrsConfig = factory.build(JaxrsConfig.class);
-        bind(JaxrsConfig.class).toInstance(jaxrsConfig);
+        final JaxrsConfigExtended jaxrsConfigExt = new DefaultJaxrsConfigExtended(jaxrsConfig, Boolean.valueOf(skifeConfigSource.getString("org.killbill.server.test.mode")));
+        bind(JaxrsConfig.class).toInstance(jaxrsConfigExt);
+        bind(JaxrsConfigExtended.class).toInstance(jaxrsConfigExt);
         bind(JaxrsUriBuilder.class).asEagerSingleton();
         bind(JaxrsExecutors.class).asEagerSingleton();
         bind(JaxrsService.class).to(DefaultJaxrsService.class).asEagerSingleton();
     }
+
+    private final static class DefaultJaxrsConfigExtended implements JaxrsConfigExtended {
+
+        private final boolean isTestModeEnabled;
+        private final JaxrsConfig delegate;
+
+        public DefaultJaxrsConfigExtended(final JaxrsConfig delegate, final boolean isTestModeEnabled) {
+            this.delegate = delegate;
+            this.isTestModeEnabled = isTestModeEnabled;
+        }
+        @Override
+        public boolean isTestModeEnabled() {
+            return isTestModeEnabled;
+        }
+        @Override
+        public int getJaxrsThreadNb() {
+            return delegate.getJaxrsThreadNb();
+        }
+        @Override
+        public TimeSpan getJaxrsTimeout() {
+            return delegate.getJaxrsTimeout();
+        }
+        @Override
+        public boolean isJaxrsLocationFullUrl() {
+            return delegate.isJaxrsLocationFullUrl();
+        }
+        @Override
+        public boolean isJaxrsLocationUseForwardHeaders() {
+            return delegate.isJaxrsLocationUseForwardHeaders();
+        }
+        @Override
+        public String getJaxrsLocationHost() {
+            return delegate.getJaxrsLocationHost();
+        }
+    }
+
 }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java
new file mode 100644
index 0000000..828ad3b
--- /dev/null
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/glue/JaxrsConfigExtended.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
+ *
+ * The Billing Project 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.killbill.billing.jaxrs.glue;
+
+import org.killbill.billing.util.config.definition.JaxrsConfig;
+
+public interface JaxrsConfigExtended extends JaxrsConfig {
+    boolean isTestModeEnabled();
+}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
index c537f6b..6824056 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SecurityResource.java
@@ -37,12 +37,14 @@ import javax.ws.rs.core.UriInfo;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
 import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.jaxrs.glue.JaxrsConfigExtended;
 import org.killbill.billing.jaxrs.json.RoleDefinitionJson;
 import org.killbill.billing.jaxrs.json.SubjectJson;
 import org.killbill.billing.jaxrs.json.UserRolesJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
 import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.platform.api.KillbillConfigSource;
 import org.killbill.billing.security.Permission;
 import org.killbill.billing.security.SecurityApiException;
 import org.killbill.billing.security.api.SecurityApi;
@@ -69,6 +71,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 public class SecurityResource extends JaxRsResourceBase {
 
     private final SecurityApi securityApi;
+    private final boolean isKillBillInTestMode;
 
     @Inject
     public SecurityResource(final SecurityApi securityApi,
@@ -79,8 +82,10 @@ public class SecurityResource extends JaxRsResourceBase {
                             final AccountUserApi accountUserApi,
                             final PaymentApi paymentApi,
                             final Clock clock,
+                            final JaxrsConfigExtended jaxrsConfig,
                             final Context context) {
         super(uriBuilder, tagUserApi, customFieldUserApi, auditUserApi, accountUserApi, paymentApi, null, clock, context);
+        this.isKillBillInTestMode = jaxrsConfig.isTestModeEnabled();
         this.securityApi = securityApi;
     }
 
@@ -94,6 +99,9 @@ public class SecurityResource extends JaxRsResourceBase {
         // The getCurrentUserPermissions takes a TenantContext which is not used because permissions are cross tenants (at this point)
         final TenantContext nullTenantContext = null;
         final Set<Permission> permissions = securityApi.getCurrentUserPermissions(nullTenantContext);
+        if (!isKillBillInTestMode) {
+            permissions.remove(Permission.TEST_AVAILABLE);
+        }
         final List<String> json = ImmutableList.<String>copyOf(Iterables.<Permission, String>transform(permissions, Functions.toStringFunction()));
         return Response.status(Status.OK).entity(json).build();
     }