Return-Path: X-Original-To: apmail-brooklyn-commits-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7933117B22 for ; Thu, 19 Mar 2015 14:07:50 +0000 (UTC) Received: (qmail 17784 invoked by uid 500); 19 Mar 2015 14:07:50 -0000 Delivered-To: apmail-brooklyn-commits-archive@brooklyn.apache.org Received: (qmail 17761 invoked by uid 500); 19 Mar 2015 14:07:50 -0000 Mailing-List: contact commits-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list commits@brooklyn.incubator.apache.org Received: (qmail 17747 invoked by uid 99); 19 Mar 2015 14:07:50 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Mar 2015 14:07:50 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 19 Mar 2015 14:07:23 +0000 Received: (qmail 15634 invoked by uid 99); 19 Mar 2015 14:07:19 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 Mar 2015 14:07:19 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6ACCAE192C; Thu, 19 Mar 2015 14:07:19 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aledsage@apache.org To: commits@brooklyn.incubator.apache.org Date: Thu, 19 Mar 2015 14:07:28 -0000 Message-Id: <8bc2cadda0ba412c97209cfd4320c614@git.apache.org> In-Reply-To: <89d0ca2644974406914bdeda4c19c411@git.apache.org> References: <89d0ca2644974406914bdeda4c19c411@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [10/19] incubator-brooklyn git commit: Tests for the HA HOT state check for resource access X-Virus-Checked: Checked by ClamAV on apache.org Tests for the HA HOT state check for resource access Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/cc95fa72 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/cc95fa72 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/cc95fa72 Branch: refs/heads/master Commit: cc95fa72092dd5d1be622bcac4769c9934821239 Parents: f2460a6 Author: Svetoslav Neykov Authored: Thu Mar 5 15:07:53 2015 +0200 Committer: Svetoslav Neykov Committed: Thu Mar 19 16:01:29 2015 +0200 ---------------------------------------------------------------------- .../brooklyn/launcher/BrooklynWebServer.java | 7 +- .../rest/filter/HaStateCheckResourceFilter.java | 3 - .../rest/util/ManagementContextProvider.java | 33 ++++ .../brooklyn/rest/BrooklynRestApiLauncher.java | 4 + .../brooklyn/rest/resources/HaHotCheckTest.java | 82 ++++++++ .../mocks/HighAvailabilityManagerMock.java | 121 ++++++++++++ .../testing/mocks/ManagementContextMock.java | 189 +++++++++++++++++++ .../rest/util/HaHotStateCheckClassResource.java | 38 ++++ .../rest/util/HaHotStateCheckResource.java | 44 +++++ 9 files changed, 517 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java ---------------------------------------------------------------------- diff --git a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java index d469152..aaac004 100644 --- a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java +++ b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java @@ -60,9 +60,11 @@ import brooklyn.rest.BrooklynRestApi; import brooklyn.rest.BrooklynWebConfig; import brooklyn.rest.filter.BrooklynPropertiesSecurityFilter; import brooklyn.rest.filter.HaMasterCheckFilter; +import brooklyn.rest.filter.HaStateCheckResourceFilter; import brooklyn.rest.filter.LoggingFilter; import brooklyn.rest.filter.NoCacheFilter; import brooklyn.rest.filter.RequestTaggingFilter; +import brooklyn.rest.util.ManagementContextProvider; import brooklyn.util.BrooklynNetworkUtils; import brooklyn.util.ResourceUtils; import brooklyn.util.collections.MutableMap; @@ -322,7 +324,7 @@ public class BrooklynWebServer { config.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, GZIPContentEncodingFilter.class.getName()); config.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, ImmutableList.of(GZIPContentEncodingFilter.class, NoCacheFilter.class)); // Checks if appropriate request given HA status - config.getProperties().put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES, brooklyn.rest.filter.HaStateCheckResourceFilter.class.getName()); + config.getProperties().put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES, HaStateCheckResourceFilter.class.getName()); // configure to match empty path, or any thing which looks like a file path with /assets/ and extension html, css, js, or png // and treat that as static content config.getProperties().put(ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX, "(/?|[^?]*/assets/[^?]+\\.[A-Za-z0-9_]+)"); @@ -332,6 +334,9 @@ public class BrooklynWebServer { FilterHolder filterHolder = new FilterHolder(new ServletContainer(config)); context.addFilter(filterHolder, "/*", EnumSet.allOf(DispatcherType.class)); + + ManagementContext mgmt = (ManagementContext) context.getAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT); + config.getSingletons().add(new ManagementContextProvider(mgmt)); } ContextHandlerCollectionHotSwappable handlers = new ContextHandlerCollectionHotSwappable(); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java b/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java index d894252..86a5b9b 100644 --- a/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java +++ b/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java @@ -22,13 +22,11 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import javax.servlet.ServletContext; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import brooklyn.config.BrooklynServiceAttributes; import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker; import brooklyn.management.ManagementContext; import brooklyn.management.ha.ManagementNodeState; @@ -110,7 +108,6 @@ public class HaStateCheckResourceFilter implements ResourceFilterFactory { @Override public List create(AbstractMethod am) { - ManagementContext mgmt = (ManagementContext)servletContext.getAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT); return Collections.singletonList(new MethodFilter(am, mgmt)); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/main/java/brooklyn/rest/util/ManagementContextProvider.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/main/java/brooklyn/rest/util/ManagementContextProvider.java b/usage/rest-server/src/main/java/brooklyn/rest/util/ManagementContextProvider.java new file mode 100644 index 0000000..f964000 --- /dev/null +++ b/usage/rest-server/src/main/java/brooklyn/rest/util/ManagementContextProvider.java @@ -0,0 +1,33 @@ +/* + * 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 brooklyn.rest.util; + +import javax.ws.rs.core.Context; + +import brooklyn.management.ManagementContext; + +import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider; + +public class ManagementContextProvider extends SingletonTypeInjectableProvider { + + public ManagementContextProvider(ManagementContext instance) { + super(ManagementContext.class, instance); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java index 102f7dd..db54b40 100644 --- a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java +++ b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java @@ -54,6 +54,7 @@ import brooklyn.rest.filter.NoCacheFilter; import brooklyn.rest.filter.RequestTaggingFilter; import brooklyn.rest.security.provider.AnyoneSecurityProvider; import brooklyn.rest.security.provider.SecurityProvider; +import brooklyn.rest.util.ManagementContextProvider; import brooklyn.util.exceptions.Exceptions; import brooklyn.util.net.Networking; import brooklyn.util.text.WildcardGlobs; @@ -339,6 +340,9 @@ public class BrooklynRestApiLauncher { // finally create this as a _filter_ which falls through to a web app or something (optionally) FilterHolder filterHolder = new FilterHolder(new ServletContainer(config)); context.addFilter(filterHolder, "/*", EnumSet.allOf(DispatcherType.class)); + + ManagementContext mgmt = (ManagementContext) context.getAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT); + config.getSingletons().add(new ManagementContextProvider(mgmt)); } private static void installBrooklynFilters(ServletContextHandler context, List> filters) { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/resources/HaHotCheckTest.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/HaHotCheckTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/HaHotCheckTest.java new file mode 100644 index 0000000..b8e54ef --- /dev/null +++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/HaHotCheckTest.java @@ -0,0 +1,82 @@ +/* + * 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 brooklyn.rest.resources; + +import static org.testng.Assert.assertEquals; + +import javax.ws.rs.core.MediaType; + +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import brooklyn.management.ha.HighAvailabilityManager; +import brooklyn.management.ha.ManagementNodeState; +import brooklyn.rest.filter.HaHotCheckResourceFilter; +import brooklyn.rest.testing.BrooklynRestResourceTest; +import brooklyn.rest.testing.mocks.ManagementContextMock; +import brooklyn.rest.util.HaHotStateCheckClassResource; +import brooklyn.rest.util.HaHotStateCheckResource; +import brooklyn.rest.util.ManagementContextProvider; + +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.core.ResourceConfig; + +public class HaHotCheckTest extends BrooklynRestResourceTest { + + private ManagementContextMock mgmtMock; + + @Override + @BeforeMethod(alwaysRun = true) + public void setUp() throws Exception { + mgmtMock = new ManagementContextMock(); + super.setUp(); + } + + @Override + protected void addBrooklynResources() { + config.getSingletons().add(new ManagementContextProvider(mgmtMock)); + config.getProperties().put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES, HaHotCheckResourceFilter.class.getName()); + addResource(new HaHotStateCheckResource()); + addResource(new HaHotStateCheckClassResource()); + } + + @Test + public void testHaCheck() throws Exception { + HighAvailabilityManager ha = mgmtMock.getHighAvailabilityManager(); + assertEquals(ha.getNodeState(), ManagementNodeState.MASTER); + testResourceFetch("/ha/method/ok", 200); + testResourceFetch("/ha/method/fail", 200); + testResourceFetch("/ha/class/fail", 200); + + mgmtMock.setState(ManagementNodeState.STANDBY); + assertEquals(ha.getNodeState(), ManagementNodeState.STANDBY); + + testResourceFetch("/ha/method/ok", 200); + testResourceFetch("/ha/method/fail", 403); + testResourceFetch("/ha/class/fail", 403); + } + + private void testResourceFetch(String resource, int code) { + ClientResponse response = client().resource(resource) + .accept(MediaType.APPLICATION_JSON_TYPE) + .get(ClientResponse.class); + assertEquals(response.getStatus(), code); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/HighAvailabilityManagerMock.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/HighAvailabilityManagerMock.java b/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/HighAvailabilityManagerMock.java new file mode 100644 index 0000000..abc8e00 --- /dev/null +++ b/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/HighAvailabilityManagerMock.java @@ -0,0 +1,121 @@ +/* + * 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 brooklyn.rest.testing.mocks; + +import java.util.Map; + +import brooklyn.management.ha.HighAvailabilityManager; +import brooklyn.management.ha.HighAvailabilityMode; +import brooklyn.management.ha.ManagementNodeState; +import brooklyn.management.ha.ManagementPlaneSyncRecord; +import brooklyn.management.ha.ManagementPlaneSyncRecordPersister; + +public class HighAvailabilityManagerMock implements HighAvailabilityManager { + + private ManagementNodeState state = ManagementNodeState.MASTER; + + public void setState(ManagementNodeState state) { + this.state = state; + } + + private static RuntimeException fail() { + throw new UnsupportedOperationException("Mocked method not implemented"); + } + + @Override + public ManagementNodeState getNodeState() { + return state; + } + + @Override + public long getLastStateChange() { + return 0; + } + + @Override + public HighAvailabilityManager setPersister(ManagementPlaneSyncRecordPersister persister) { + throw fail(); + } + + @Override + public void disabled() { + throw fail(); + } + + @Override + public boolean isRunning() { + throw fail(); + } + + @Override + public void start(HighAvailabilityMode startMode) { + throw fail(); + } + + @Override + public void stop() { + throw fail(); + } + + @Override + public void changeMode(HighAvailabilityMode mode) { + throw fail(); + } + + @Override + public void setPriority(long priority) { + throw fail(); + } + + @Override + public long getPriority() { + throw fail(); + } + + @Override + public void publishClearNonMaster() { + throw fail(); + } + + @Override + public ManagementPlaneSyncRecord getLastManagementPlaneSyncRecord() { + throw fail(); + } + + @Override + public ManagementPlaneSyncRecord getManagementPlaneSyncState() { + throw fail(); + } + + @Override + public ManagementPlaneSyncRecord loadManagementPlaneSyncRecord(boolean useLocalKnowledgeForThisNode) { + throw fail(); + } + + @Override + public ManagementPlaneSyncRecordPersister getPersister() { + throw fail(); + } + + @Override + public Map getMetrics() { + throw fail(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/ManagementContextMock.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/ManagementContextMock.java b/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/ManagementContextMock.java new file mode 100644 index 0000000..6a29fed --- /dev/null +++ b/usage/rest-server/src/test/java/brooklyn/rest/testing/mocks/ManagementContextMock.java @@ -0,0 +1,189 @@ +/* + * 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 brooklyn.rest.testing.mocks; + +import java.net.URI; +import java.util.Collection; + +import brooklyn.basic.BrooklynObject; +import brooklyn.catalog.BrooklynCatalog; +import brooklyn.config.StringConfigMap; +import brooklyn.entity.Application; +import brooklyn.entity.Entity; +import brooklyn.entity.drivers.EntityDriverManager; +import brooklyn.entity.drivers.downloads.DownloadResolverManager; +import brooklyn.entity.rebind.RebindManager; +import brooklyn.location.LocationRegistry; +import brooklyn.management.AccessController; +import brooklyn.management.EntityManager; +import brooklyn.management.ExecutionContext; +import brooklyn.management.ExecutionManager; +import brooklyn.management.LocationManager; +import brooklyn.management.ManagementContext; +import brooklyn.management.SubscriptionContext; +import brooklyn.management.SubscriptionManager; +import brooklyn.management.entitlement.EntitlementManager; +import brooklyn.management.ha.HighAvailabilityManager; +import brooklyn.management.ha.ManagementNodeState; +import brooklyn.util.guava.Maybe; + +public class ManagementContextMock implements ManagementContext { + private HighAvailabilityManagerMock haMock = new HighAvailabilityManagerMock(); + + public void setState(ManagementNodeState state) { + haMock.setState(state); + } + + private static RuntimeException fail() { + throw new UnsupportedOperationException("Mocked method not implemented"); + } + + @Override + public HighAvailabilityManager getHighAvailabilityManager() { + return haMock; + } + + @Override + public String getManagementPlaneId() { + throw fail(); + } + + @Override + public String getManagementNodeId() { + throw fail(); + } + + @Override + public Maybe getManagementNodeUri() { + throw fail(); + } + + @Override + public Collection getApplications() { + throw fail(); + } + + @Override + public EntityManager getEntityManager() { + throw fail(); + } + + @Override + public ExecutionManager getExecutionManager() { + throw fail(); + } + + @Override + public ExecutionContext getServerExecutionContext() { + throw fail(); + } + + @Override + public EntityDriverManager getEntityDriverManager() { + throw fail(); + } + + @Override + public DownloadResolverManager getEntityDownloadsManager() { + throw fail(); + } + + @Override + public SubscriptionManager getSubscriptionManager() { + throw fail(); + } + + @Override + public ExecutionContext getExecutionContext(Entity entity) { + throw fail(); + } + + @Override + public SubscriptionContext getSubscriptionContext(Entity entity) { + throw fail(); + } + + @Override + public RebindManager getRebindManager() { + throw fail(); + } + + @Override + public StringConfigMap getConfig() { + throw fail(); + } + + @Override + public boolean isRunning() { + throw fail(); + } + + @Override + public LocationRegistry getLocationRegistry() { + throw fail(); + } + + @Override + public BrooklynCatalog getCatalog() { + throw fail(); + } + + @Override + public LocationManager getLocationManager() { + throw fail(); + } + + @Override + public AccessController getAccessController() { + throw fail(); + } + + @Override + public void reloadBrooklynProperties() { + throw fail(); + + } + + @Override + public void addPropertiesReloadListener(PropertiesReloadListener listener) { + throw fail(); + + } + + @Override + public void removePropertiesReloadListener(PropertiesReloadListener listener) { + throw fail(); + } + + @Override + public EntitlementManager getEntitlementManager() { + throw fail(); + } + + @Override + public BrooklynObject lookup(String id) { + throw fail(); + } + + @Override + public T lookup(String id, Class type) { + throw fail(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckClassResource.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckClassResource.java b/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckClassResource.java new file mode 100644 index 0000000..0a288a5 --- /dev/null +++ b/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckClassResource.java @@ -0,0 +1,38 @@ +/* + * 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 brooklyn.rest.util; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import brooklyn.rest.filter.HaHotStateRequired; + +@Path("/ha/class") +@Produces(MediaType.APPLICATION_JSON) +@HaHotStateRequired +public class HaHotStateCheckClassResource { + + @GET + @Path("fail") + public String fail() { + return "FAIL"; + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/cc95fa72/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckResource.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckResource.java b/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckResource.java new file mode 100644 index 0000000..86a8ee3 --- /dev/null +++ b/usage/rest-server/src/test/java/brooklyn/rest/util/HaHotStateCheckResource.java @@ -0,0 +1,44 @@ +/* + * 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 brooklyn.rest.util; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import brooklyn.rest.filter.HaHotStateRequired; + +@Path("/ha/method") +@Produces(MediaType.APPLICATION_JSON) +public class HaHotStateCheckResource { + + @GET + @Path("ok") + public String ok() { + return "OK"; + } + + @GET + @Path("fail") + @HaHotStateRequired + public String fail() { + return "FAIL"; + } +}