You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ha...@apache.org on 2015/08/09 04:55:15 UTC
[08/28] incubator-brooklyn git commit: brooklyn-rest-server: add
org.apache package prefix
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/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
deleted file mode 100644
index 08511b7..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncher.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.EnumSet;
-import java.util.List;
-
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherAbstract;
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.servlet.FilterHolder;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.reflections.util.ClasspathHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.BrooklynServerConfig;
-import brooklyn.config.BrooklynServiceAttributes;
-import brooklyn.management.ManagementContext;
-import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.rest.filter.BrooklynPropertiesSecurityFilter;
-import brooklyn.rest.filter.HaMasterCheckFilter;
-import brooklyn.rest.filter.LoggingFilter;
-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.rest.util.ShutdownHandlerProvider;
-import brooklyn.rest.util.TestShutdownHandler;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.net.Networking;
-import brooklyn.util.text.WildcardGlobs;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Charsets;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.google.common.io.Files;
-import com.sun.jersey.api.core.DefaultResourceConfig;
-import com.sun.jersey.api.core.ResourceConfig;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
-
-/** Convenience and demo for launching programmatically. Also used for automated tests.
- * <p>
- * BrooklynLauncher has a more full-featured CLI way to start,
- * but if you want more control you can:
- * <li> take the WAR this project builds (REST API) -- NB probably want the unshaded one (containing all deps)
- * <li> take the WAR from the jsgui project _and_ this WAR and combine them
- * (this one should run as a filter on the others, _not_ as a ResourceCollection where they fight over who's got root)
- * <li> programmatically install things, following the examples herein;
- * in particular {@link #installAsServletFilter(ServletContextHandler)} is quite handy!
- * <p>
- * You can also just run this class. In most installs it just works, assuming your IDE or maven-fu gives you the classpath.
- * Add more apps and entities on the classpath and they'll show up in the catalog.
- **/
-public class BrooklynRestApiLauncher {
-
- private static final Logger log = LoggerFactory.getLogger(BrooklynRestApiLauncher.class);
- final static int FAVOURITE_PORT = 8081;
- public static final String SCANNING_CATALOG_BOM_URL = "classpath://brooklyn/scanning.catalog.bom";
-
- enum StartMode {
- FILTER, SERVLET, WEB_XML
- }
-
- public static final List<Class<? extends Filter>> DEFAULT_FILTERS = ImmutableList.of(
- RequestTaggingFilter.class,
- BrooklynPropertiesSecurityFilter.class,
- LoggingFilter.class,
- HaMasterCheckFilter.class);
-
- private boolean forceUseOfDefaultCatalogWithJavaClassPath = false;
- private Class<? extends SecurityProvider> securityProvider;
- private List<Class<? extends Filter>> filters = DEFAULT_FILTERS;
- private StartMode mode = StartMode.FILTER;
- private ManagementContext mgmt;
- private ContextHandler customContext;
- private boolean deployJsgui = true;
- private boolean disableHighAvailability = true;
- private final TestShutdownHandler shutdownListener = new TestShutdownHandler();
-
- protected BrooklynRestApiLauncher() {}
-
- public BrooklynRestApiLauncher managementContext(ManagementContext mgmt) {
- this.mgmt = mgmt;
- return this;
- }
-
- public BrooklynRestApiLauncher forceUseOfDefaultCatalogWithJavaClassPath(boolean forceUseOfDefaultCatalogWithJavaClassPath) {
- this.forceUseOfDefaultCatalogWithJavaClassPath = forceUseOfDefaultCatalogWithJavaClassPath;
- return this;
- }
-
- public BrooklynRestApiLauncher securityProvider(Class<? extends SecurityProvider> securityProvider) {
- this.securityProvider = securityProvider;
- return this;
- }
-
- /**
- * Runs the server with the given set of filters.
- * Overrides any previously supplied set (or {@link #DEFAULT_FILTERS} which is used by default).
- */
- public BrooklynRestApiLauncher filters(Class<? extends Filter>... filters) {
- this.filters = Lists.newArrayList(filters);
- return this;
- }
-
- public BrooklynRestApiLauncher mode(StartMode mode) {
- this.mode = checkNotNull(mode, "mode");
- return this;
- }
-
- /** Overrides start mode to use an explicit context */
- public BrooklynRestApiLauncher customContext(ContextHandler customContext) {
- this.customContext = checkNotNull(customContext, "customContext");
- return this;
- }
-
- public BrooklynRestApiLauncher withJsgui() {
- this.deployJsgui = true;
- return this;
- }
-
- public BrooklynRestApiLauncher withoutJsgui() {
- this.deployJsgui = false;
- return this;
- }
-
- public BrooklynRestApiLauncher disableHighAvailability(boolean value) {
- this.disableHighAvailability = value;
- return this;
- }
-
- public Server start() {
- if (this.mgmt == null) {
- mgmt = new LocalManagementContext();
- }
- BrooklynCampPlatformLauncherAbstract platform = new BrooklynCampPlatformLauncherNoServer()
- .useManagementContext(mgmt)
- .launch();
- ((LocalManagementContext)mgmt).noteStartupComplete();
- log.debug("started "+platform);
-
- ContextHandler context;
- String summary;
- if (customContext == null) {
- switch (mode) {
- case SERVLET:
- context = servletContextHandler(mgmt);
- summary = "programmatic Jersey ServletContainer servlet";
- break;
- case WEB_XML:
- context = webXmlContextHandler(mgmt);
- summary = "from WAR at " + ((WebAppContext) context).getWar();
- break;
- case FILTER:
- default:
- context = filterContextHandler(mgmt);
- summary = "programmatic Jersey ServletContainer filter on webapp at " + ((WebAppContext) context).getWar();
- break;
- }
- } else {
- context = customContext;
- summary = (context instanceof WebAppContext)
- ? "from WAR at " + ((WebAppContext) context).getWar()
- : "from custom context";
- }
-
- if (securityProvider != null) {
- ((BrooklynProperties) mgmt.getConfig()).put(
- BrooklynWebConfig.SECURITY_PROVIDER_CLASSNAME, securityProvider.getName());
- }
-
- if (forceUseOfDefaultCatalogWithJavaClassPath) {
- // sets URLs for a surefire
- ((BrooklynProperties) mgmt.getConfig()).put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, SCANNING_CATALOG_BOM_URL);
- ((LocalManagementContext) mgmt).setBaseClassPathForScanning(ClasspathHelper.forJavaClassPath());
- } else {
- // don't use any catalog.xml which is set
- ((BrooklynProperties) mgmt.getConfig()).put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, ManagementContextInternal.EMPTY_CATALOG_URL);
- }
-
- return startServer(mgmt, context, summary, disableHighAvailability);
- }
-
- private ContextHandler filterContextHandler(ManagementContext mgmt) {
- WebAppContext context = new WebAppContext();
- context.setAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT, mgmt);
- context.setContextPath("/");
- // here we run with the JS GUI, for convenience, if we can find it, else set up an empty dir
- // TODO pretty sure there is an option to monitor this dir and load changes to static content
- // NOTE: When running Brooklyn from an IDE (i.e. by launching BrooklynJavascriptGuiLauncher.main())
- // you will need to ensure that the working directory is set to the jsgui folder. For IntelliJ,
- // set the 'Working directory' of the Run/Debug Configuration to $MODULE_DIR/../jsgui.
- // For Eclipse, use the default option of ${workspace_loc:brooklyn-jsgui}.
- // If the working directory is not set correctly, Brooklyn will be unable to find the jsgui .war
- // file and the 'gui not available' message will be shown.
- context.setWar(this.deployJsgui && findJsguiWebapp() != null
- ? findJsguiWebapp()
- : createTempWebDirWithIndexHtml("Brooklyn REST API <p> (gui not available)"));
- installAsServletFilter(context, this.filters);
- return context;
- }
-
- private ContextHandler servletContextHandler(ManagementContext managementContext) {
- ResourceConfig config = new DefaultResourceConfig();
- for (Object r: BrooklynRestApi.getAllResources())
- config.getSingletons().add(r);
- config.getSingletons().add(new ShutdownHandlerProvider(shutdownListener));
-
- ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
- context.setAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT, managementContext);
- ServletHolder servletHolder = new ServletHolder(new ServletContainer(config));
- context.addServlet(servletHolder, "/*");
- context.setContextPath("/");
-
- installBrooklynFilters(context, this.filters);
- return context;
- }
-
- private ContextHandler webXmlContextHandler(ManagementContext mgmt) {
- // TODO add security to web.xml
- WebAppContext context;
- if (findMatchingFile("src/main/webapp")!=null) {
- // running in source mode; need to use special classpath
- context = new WebAppContext("src/main/webapp", "/");
- context.setExtraClasspath("./target/classes");
- } else if (findRestApiWar()!=null) {
- context = new WebAppContext(findRestApiWar(), "/");
- } else {
- throw new IllegalStateException("Cannot find WAR for REST API. Expected in target/*.war, Maven repo, or in source directories.");
- }
- context.setAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT, mgmt);
-
- return context;
- }
-
- /** starts a server, on all NICs if security is configured,
- * otherwise (no security) only on loopback interface */
- public static Server startServer(ManagementContext mgmt, ContextHandler context, String summary, boolean disableHighAvailability) {
- // TODO this repeats code in BrooklynLauncher / WebServer. should merge the two paths.
- boolean secure = mgmt != null && !BrooklynWebConfig.hasNoSecurityOptions(mgmt.getConfig());
- if (secure) {
- log.debug("Detected security configured, launching server on all network interfaces");
- } else {
- log.debug("Detected no security configured, launching server on loopback (localhost) network interface only");
- if (mgmt!=null) {
- log.debug("Detected no security configured, running on loopback; disabling authentication");
- ((BrooklynProperties)mgmt.getConfig()).put(BrooklynWebConfig.SECURITY_PROVIDER_CLASSNAME, AnyoneSecurityProvider.class.getName());
- }
- }
- if (mgmt != null && disableHighAvailability)
- mgmt.getHighAvailabilityManager().disabled();
- InetSocketAddress bindLocation = new InetSocketAddress(
- secure ? Networking.ANY_NIC : Networking.LOOPBACK,
- Networking.nextAvailablePort(FAVOURITE_PORT));
- return startServer(context, summary, bindLocation);
- }
-
- public static Server startServer(ContextHandler context, String summary, InetSocketAddress bindLocation) {
- Server server = new Server(bindLocation);
- server.setHandler(context);
- try {
- server.start();
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
- log.info("Brooklyn REST server started ("+summary+") on");
- log.info(" http://localhost:"+server.getConnectors()[0].getLocalPort()+"/");
-
- return server;
- }
-
- public static BrooklynRestApiLauncher launcher() {
- return new BrooklynRestApiLauncher();
- }
-
- public static void main(String[] args) throws Exception {
- startRestResourcesViaFilter();
- log.info("Press Ctrl-C to quit.");
- }
-
- public static Server startRestResourcesViaFilter() {
- return new BrooklynRestApiLauncher()
- .mode(StartMode.FILTER)
- .start();
- }
-
- public static Server startRestResourcesViaServlet() throws Exception {
- return new BrooklynRestApiLauncher()
- .mode(StartMode.SERVLET)
- .start();
- }
-
- public static Server startRestResourcesViaWebXml() throws Exception {
- return new BrooklynRestApiLauncher()
- .mode(StartMode.WEB_XML)
- .start();
- }
-
- public void installAsServletFilter(ServletContextHandler context) {
- installAsServletFilter(context, DEFAULT_FILTERS);
- }
-
- private void installAsServletFilter(ServletContextHandler context, List<Class<? extends Filter>> filters) {
- installBrooklynFilters(context, filters);
-
- // now set up the REST servlet resources
- ResourceConfig config = new DefaultResourceConfig();
- // load all our REST API modules, JSON, and Swagger
- for (Object r: BrooklynRestApi.getAllResources())
- config.getSingletons().add(r);
-
- // disable caching for dynamic content
- config.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, NoCacheFilter.class.getName());
- // Checks if appropriate request given HA status
- config.getProperties().put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES, brooklyn.rest.filter.HaHotCheckResourceFilter.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_]+)");
- // and anything which is not matched as a servlet also falls through (but more expensive than a regex check?)
- config.getFeatures().put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, true);
- // 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));
- config.getSingletons().add(new ShutdownHandlerProvider(shutdownListener));
- }
-
- private static void installBrooklynFilters(ServletContextHandler context, List<Class<? extends Filter>> filters) {
- for (Class<? extends Filter> filter : filters) {
- context.addFilter(filter, "/*", EnumSet.allOf(DispatcherType.class));
- }
- }
-
- /**
- * Starts the server on all nics (even if security not enabled).
- * @deprecated since 0.6.0; use {@link #launcher()} and set a custom context
- */
- @Deprecated
- public static Server startServer(ContextHandler context, String summary) {
- return BrooklynRestApiLauncher.startServer(context, summary,
- new InetSocketAddress(Networking.ANY_NIC, Networking.nextAvailablePort(FAVOURITE_PORT)));
- }
-
- /** look for the JS GUI webapp in common places, returning path to it if found, or null */
- private static String findJsguiWebapp() {
- // could also look in maven repo ?
- return Optional
- .fromNullable(findMatchingFile("../jsgui/src/main/webapp"))
- .or(findMatchingFile("../jsgui/target/*.war"))
- .orNull();
- }
-
- /** look for the REST WAR file in common places, returning path to it if found, or null */
- private static String findRestApiWar() {
- // don't look at src/main/webapp here -- because classes won't be there!
- // could also look in maven repo ?
- return findMatchingFile("../rest/target/*.war").orNull();
- }
-
- /** returns the supplied filename if it exists (absolute or relative to the current directory);
- * supports globs in the filename portion only, in which case it returns the _newest_ matching file.
- * <p>
- * otherwise returns null */
- @Beta // public because used in dependent test projects
- public static Optional<String> findMatchingFile(String filename) {
- final File f = new File(filename);
- if (f.exists()) return Optional.of(filename);
- File dir = f.getParentFile();
- File result = null;
- if (dir.exists()) {
- File[] matchingFiles = dir.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return WildcardGlobs.isGlobMatched(f.getName(), name);
- }
- });
- for (File mf: matchingFiles) {
- if (result==null || mf.lastModified() > result.lastModified()) result = mf;
- }
- }
- if (result==null) return Optional.absent();
- return Optional.of(result.getAbsolutePath());
- }
-
- /** create a directory with a simple index.html so we have some content being served up */
- private static String createTempWebDirWithIndexHtml(String indexHtmlContent) {
- File dir = Files.createTempDir();
- dir.deleteOnExit();
- try {
- Files.write(indexHtmlContent, new File(dir, "index.html"), Charsets.UTF_8);
- } catch (IOException e) {
- Exceptions.propagate(e);
- }
- return dir.getAbsolutePath();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
deleted file mode 100644
index 0412118..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest;
-
-import static brooklyn.rest.BrooklynRestApiLauncher.StartMode.FILTER;
-import static brooklyn.rest.BrooklynRestApiLauncher.StartMode.SERVLET;
-import static brooklyn.rest.BrooklynRestApiLauncher.StartMode.WEB_XML;
-
-import java.util.concurrent.Callable;
-
-import org.apache.http.HttpStatus;
-import org.eclipse.jetty.server.Server;
-import org.testng.annotations.Test;
-
-import brooklyn.rest.security.provider.AnyoneSecurityProvider;
-import brooklyn.rest.util.BrooklynRestResourceUtilsTest.SampleNoOpApplication;
-import brooklyn.test.Asserts;
-import brooklyn.test.HttpTestUtils;
-
-public class BrooklynRestApiLauncherTest extends BrooklynRestApiLauncherTestFixture {
-
- @Test
- public void testFilterStart() throws Exception {
- checkRestCatalogApplications(useServerForTest(baseLauncher().mode(FILTER).start()));
- }
-
- @Test
- public void testServletStart() throws Exception {
- checkRestCatalogApplications(useServerForTest(baseLauncher().mode(SERVLET).start()));
- }
-
- @Test
- public void testWebAppStart() throws Exception {
- checkRestCatalogApplications(useServerForTest(baseLauncher().mode(WEB_XML).start()));
- }
-
- private BrooklynRestApiLauncher baseLauncher() {
- return BrooklynRestApiLauncher.launcher()
- .securityProvider(AnyoneSecurityProvider.class)
- .forceUseOfDefaultCatalogWithJavaClassPath(true);
- }
-
- private static void checkRestCatalogApplications(Server server) throws Exception {
- final String rootUrl = "http://localhost:"+server.getConnectors()[0].getLocalPort();
- int code = Asserts.succeedsEventually(new Callable<Integer>() {
- @Override
- public Integer call() throws Exception {
- int code = HttpTestUtils.getHttpStatusCode(rootUrl+"/v1/catalog/applications");
- if (code == HttpStatus.SC_FORBIDDEN) {
- throw new RuntimeException("Retry request");
- } else {
- return code;
- }
- }
- });
- HttpTestUtils.assertHealthyStatusCode(code);
- HttpTestUtils.assertContentContainsText(rootUrl+"/v1/catalog/applications", SampleNoOpApplication.class.getSimpleName());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTestFixture.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTestFixture.java b/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTestFixture.java
deleted file mode 100644
index c9aa4f0..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/BrooklynRestApiLauncherTestFixture.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest;
-
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.reflections.util.ClasspathHelper;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.BrooklynServerConfig;
-import brooklyn.config.BrooklynServiceAttributes;
-import brooklyn.entity.basic.Entities;
-import brooklyn.management.ManagementContext;
-import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.rest.security.provider.AnyoneSecurityProvider;
-import brooklyn.util.exceptions.Exceptions;
-
-public abstract class BrooklynRestApiLauncherTestFixture {
-
- Server server = null;
-
- @AfterMethod(alwaysRun=true)
- public void stopServer() throws Exception {
- if (server!=null) {
- ManagementContext mgmt = getManagementContextFromJettyServerAttributes(server);
- server.stop();
- if (mgmt!=null) Entities.destroyAll(mgmt);
- server = null;
- }
- }
-
- protected Server newServer() {
- try {
- Server server = BrooklynRestApiLauncher.launcher()
- .forceUseOfDefaultCatalogWithJavaClassPath(true)
- .securityProvider(AnyoneSecurityProvider.class)
- .start();
- return server;
- } catch (Exception e) {
- throw Exceptions.propagate(e);
- }
- }
-
- protected Server useServerForTest(Server server) {
- if (this.server!=null) {
- Assert.fail("Test only meant for single server; already have "+this.server+" when checking "+server);
- } else {
- this.server = server;
- }
- return server;
- }
-
- protected String getBaseUri() {
- return getBaseUri(server);
- }
- public static String getBaseUri(Server server) {
- return "http://localhost:"+server.getConnectors()[0].getLocalPort();
- }
-
- public static void forceUseOfDefaultCatalogWithJavaClassPath(Server server) {
- ManagementContext mgmt = getManagementContextFromJettyServerAttributes(server);
- forceUseOfDefaultCatalogWithJavaClassPath(mgmt);
- }
-
- public static void forceUseOfDefaultCatalogWithJavaClassPath(ManagementContext manager) {
- // TODO duplication with BrooklynRestApiLauncher ?
-
- // don't use any catalog.xml which is set
- ((BrooklynProperties)manager.getConfig()).put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, BrooklynRestApiLauncher.SCANNING_CATALOG_BOM_URL);
- // sets URLs for a surefire
- ((LocalManagementContext)manager).setBaseClassPathForScanning(ClasspathHelper.forJavaClassPath());
- // this also works
-// ((LocalManagementContext)manager).setBaseClassPathForScanning(ClasspathHelper.forPackage("brooklyn"));
- // but this (near-default behaviour) does not
-// ((LocalManagementContext)manager).setBaseClassLoader(getClass().getClassLoader());
- }
-
- public static void enableAnyoneLogin(Server server) {
- ManagementContext mgmt = getManagementContextFromJettyServerAttributes(server);
- enableAnyoneLogin(mgmt);
- }
-
- public static void enableAnyoneLogin(ManagementContext mgmt) {
- ((BrooklynProperties)mgmt.getConfig()).put(BrooklynWebConfig.SECURITY_PROVIDER_CLASSNAME,
- AnyoneSecurityProvider.class.getName());
- }
-
- public static ManagementContext getManagementContextFromJettyServerAttributes(Server server) {
- return (ManagementContext) ((ContextHandler) server.getHandler()).getAttribute(BrooklynServiceAttributes.BROOKLYN_MANAGEMENT_CONTEXT);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/HaHotCheckTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/HaHotCheckTest.java b/usage/rest-server/src/test/java/brooklyn/rest/HaHotCheckTest.java
deleted file mode 100644
index 7ce6a97..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/HaHotCheckTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest;
-
-import static org.testng.Assert.assertEquals;
-
-import javax.ws.rs.core.MediaType;
-
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import brooklyn.management.ha.HighAvailabilityManager;
-import brooklyn.management.ha.HighAvailabilityMode;
-import brooklyn.management.ha.ManagementNodeState;
-import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.rest.filter.HaHotCheckResourceFilter;
-import brooklyn.rest.filter.HaMasterCheckFilter;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.rest.util.HaHotStateCheckClassResource;
-import brooklyn.rest.util.HaHotStateCheckResource;
-
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource.Builder;
-import com.sun.jersey.api.core.ResourceConfig;
-
-public class HaHotCheckTest extends BrooklynRestResourceTest {
-
- // setup and teardown before/after each method
-
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception { super.setUp(); }
-
- @AfterMethod(alwaysRun = true)
- public void tearDown() throws Exception { super.tearDown(); }
-
- @Override
- protected void addBrooklynResources() {
- config.getProperties().put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES,
- new HaHotCheckResourceFilter(getManagementContext()));
- addResource(new HaHotStateCheckResource());
- addResource(new HaHotStateCheckClassResource());
-
- ((LocalManagementContext)getManagementContext()).noteStartupComplete();
- }
-
- @Test
- public void testHaCheck() {
- HighAvailabilityManager ha = getManagementContext().getHighAvailabilityManager();
- assertEquals(ha.getNodeState(), ManagementNodeState.MASTER);
- testResourceFetch("/ha/method/ok", 200);
- testResourceFetch("/ha/method/fail", 200);
- testResourceFetch("/ha/class/fail", 200);
-
- getManagementContext().getHighAvailabilityManager().changeMode(HighAvailabilityMode.STANDBY);
- assertEquals(ha.getNodeState(), ManagementNodeState.STANDBY);
-
- testResourceFetch("/ha/method/ok", 200);
- testResourceFetch("/ha/method/fail", 403);
- testResourceFetch("/ha/class/fail", 403);
-
- ((ManagementContextInternal)getManagementContext()).terminate();
- assertEquals(ha.getNodeState(), ManagementNodeState.TERMINATED);
-
- testResourceFetch("/ha/method/ok", 200);
- testResourceFetch("/ha/method/fail", 403);
- testResourceFetch("/ha/class/fail", 403);
- }
-
- @Test
- public void testHaCheckForce() {
- HighAvailabilityManager ha = getManagementContext().getHighAvailabilityManager();
- assertEquals(ha.getNodeState(), ManagementNodeState.MASTER);
- testResourceForcedFetch("/ha/method/ok", 200);
- testResourceForcedFetch("/ha/method/fail", 200);
- testResourceForcedFetch("/ha/class/fail", 200);
-
- getManagementContext().getHighAvailabilityManager().changeMode(HighAvailabilityMode.STANDBY);
- assertEquals(ha.getNodeState(), ManagementNodeState.STANDBY);
-
- testResourceForcedFetch("/ha/method/ok", 200);
- testResourceForcedFetch("/ha/method/fail", 200);
- testResourceForcedFetch("/ha/class/fail", 200);
-
- ((ManagementContextInternal)getManagementContext()).terminate();
- assertEquals(ha.getNodeState(), ManagementNodeState.TERMINATED);
-
- testResourceForcedFetch("/ha/method/ok", 200);
- testResourceForcedFetch("/ha/method/fail", 200);
- testResourceForcedFetch("/ha/class/fail", 200);
- }
-
-
- private void testResourceFetch(String resourcePath, int code) {
- testResourceFetch(resourcePath, false, code);
- }
-
- private void testResourceForcedFetch(String resourcePath, int code) {
- testResourceFetch(resourcePath, true, code);
- }
-
- private void testResourceFetch(String resourcePath, boolean force, int code) {
- Builder resource = client().resource(resourcePath)
- .accept(MediaType.APPLICATION_JSON_TYPE);
- if (force) {
- resource.header(HaMasterCheckFilter.SKIP_CHECK_HEADER, "true");
- }
- ClientResponse response = resource
- .get(ClientResponse.class);
- assertEquals(response.getStatus(), code);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/HaMasterCheckFilterTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/HaMasterCheckFilterTest.java b/usage/rest-server/src/test/java/brooklyn/rest/HaMasterCheckFilterTest.java
deleted file mode 100644
index ff16c29..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/HaMasterCheckFilterTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.File;
-import java.net.URI;
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeoutException;
-
-import org.apache.brooklyn.camp.brooklyn.BrooklynCampPlatformLauncherNoServer;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.HttpClient;
-import org.eclipse.jetty.server.Server;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.BasicApplication;
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.entity.rebind.RebindTestUtils;
-import brooklyn.management.EntityManager;
-import brooklyn.management.ManagementContext;
-import brooklyn.management.ha.HighAvailabilityMode;
-import brooklyn.management.ha.ManagementNodeState;
-import brooklyn.rest.security.provider.AnyoneSecurityProvider;
-import brooklyn.test.Asserts;
-import brooklyn.util.http.HttpTool;
-import brooklyn.util.http.HttpToolResponse;
-import brooklyn.util.os.Os;
-import brooklyn.util.time.Duration;
-
-import com.google.common.base.Predicates;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-
-public class HaMasterCheckFilterTest extends BrooklynRestApiLauncherTestFixture {
- private static final Duration TIMEOUT = Duration.THIRTY_SECONDS;
-
- private File mementoDir;
- private ManagementContext writeMgmt;
- private ManagementContext readMgmt;
- private String appId;
- private Server server;
- private HttpClient client;
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
-System.err.println("TEAR DOWN");
- server.stop();
- Entities.destroyAll(writeMgmt);
- Entities.destroyAll(readMgmt);
- Os.deleteRecursively(mementoDir);
- }
-
- @Test(groups = "Integration")
- public void testEntitiesExistOnDisabledHA() throws Exception {
- initHaCluster(HighAvailabilityMode.DISABLED, HighAvailabilityMode.DISABLED);
- assertReadIsMaster();
- assertEntityExists(new ReturnCodeCheck());
- }
-
- @Test(groups = "Integration")
- public void testEntitiesExistOnMasterPromotion() throws Exception {
- initHaCluster(HighAvailabilityMode.AUTO, HighAvailabilityMode.AUTO);
- stopWriteNode();
- assertEntityExists(new ReturnCodeCheck());
- assertReadIsMaster();
- }
-
- @Test(groups = "Integration")
- public void testEntitiesExistOnHotStandbyAndPromotion() throws Exception {
- initHaCluster(HighAvailabilityMode.AUTO, HighAvailabilityMode.HOT_STANDBY);
- assertEntityExists(new ReturnCodeCheck());
- stopWriteNode();
- assertEntityExists(new ReturnCodeAndNodeState());
- assertReadIsMaster();
- }
-
- @Test(groups = "Integration")
- public void testEntitiesExistOnHotBackup() throws Exception {
- initHaCluster(HighAvailabilityMode.AUTO, HighAvailabilityMode.HOT_BACKUP);
- Asserts.continually(
- ImmutableMap.<String,Object>of(
- "timeout", Duration.THIRTY_SECONDS,
- "period", Duration.ZERO),
- new ReturnCodeSupplier(),
- Predicates.or(Predicates.equalTo(200), Predicates.equalTo(403)));
- }
-
- private HttpClient getClient(Server server) {
- HttpClient client = HttpTool.httpClientBuilder()
- .uri(getBaseUri(server))
- .build();
- return client;
- }
-
- private int getAppResponseCode() {
- HttpToolResponse response = HttpTool.httpGet(
- client, URI.create(getBaseUri(server) + "/v1/applications/" + appId),
- ImmutableMap.<String,String>of());
- return response.getResponseCode();
- }
-
- private String createApp(ManagementContext mgmt) {
- EntityManager entityMgr = mgmt.getEntityManager();
- Entity app = entityMgr.createEntity(EntitySpec.create(BasicApplication.class));
- entityMgr.manage(app);
- return app.getId();
- }
-
- private ManagementContext createManagementContext(File mementoDir, HighAvailabilityMode mode) {
- ManagementContext mgmt = RebindTestUtils.managementContextBuilder(mementoDir, getClass().getClassLoader())
- .persistPeriodMillis(1)
- .forLive(false)
- .emptyCatalog(true)
- .buildUnstarted();
-
- if (mode == HighAvailabilityMode.DISABLED) {
- mgmt.getHighAvailabilityManager().disabled();
- } else {
- mgmt.getHighAvailabilityManager().start(mode);
- }
-
- new BrooklynCampPlatformLauncherNoServer()
- .useManagementContext(mgmt)
- .launch();
-
- return mgmt;
- }
-
- private void initHaCluster(HighAvailabilityMode writeMode, HighAvailabilityMode readMode) throws InterruptedException, TimeoutException {
- mementoDir = Os.newTempDir(getClass());
-
- writeMgmt = createManagementContext(mementoDir, writeMode);
- appId = createApp(writeMgmt);
- writeMgmt.getRebindManager().waitForPendingComplete(TIMEOUT, true);
-
- if (readMode == HighAvailabilityMode.DISABLED) {
- //no HA, one node only
- readMgmt = writeMgmt;
- } else {
- readMgmt = createManagementContext(mementoDir, readMode);
- }
-
- server = useServerForTest(BrooklynRestApiLauncher.launcher()
- .managementContext(readMgmt)
- .securityProvider(AnyoneSecurityProvider.class)
- .forceUseOfDefaultCatalogWithJavaClassPath(true)
- .withoutJsgui()
- .disableHighAvailability(false)
- .start());
- client = getClient(server);
- }
-
- private void assertEntityExists(Callable<Integer> c) {
- assertEquals((int)Asserts.succeedsEventually(c), 200);
- }
-
- private void assertReadIsMaster() {
- assertEquals(readMgmt.getHighAvailabilityManager().getNodeState(), ManagementNodeState.MASTER);
- }
-
- private void stopWriteNode() {
- writeMgmt.getHighAvailabilityManager().stop();
- }
-
- private class ReturnCodeCheck implements Callable<Integer> {
- @Override
- public Integer call() {
- int retCode = getAppResponseCode();
- if (retCode == 403) {
- throw new RuntimeException("Not ready, retry. Response - " + retCode);
- } else {
- return retCode;
- }
- }
- }
-
- private class ReturnCodeAndNodeState extends ReturnCodeCheck {
- @Override
- public Integer call() {
- Integer ret = super.call();
- if (ret == HttpStatus.SC_OK) {
- ManagementNodeState state = readMgmt.getHighAvailabilityManager().getNodeState();
- if (state != ManagementNodeState.MASTER) {
- throw new RuntimeException("Not master yet " + state);
- }
- }
- return ret;
- }
- }
-
- private class ReturnCodeSupplier implements Supplier<Integer> {
- @Override
- public Integer get() {
- return getAppResponseCode();
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/domain/ApplicationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/domain/ApplicationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/domain/ApplicationTest.java
deleted file mode 100644
index f905ed9..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/domain/ApplicationTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.domain;
-
-import static brooklyn.rest.util.RestApiTestUtils.asJson;
-import static brooklyn.rest.util.RestApiTestUtils.fromJson;
-import static brooklyn.rest.util.RestApiTestUtils.jsonFixture;
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Map;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.Entities;
-import brooklyn.management.ManagementContext;
-import brooklyn.test.entity.TestApplicationImpl;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
-public class ApplicationTest {
-
- final EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "brooklyn.entity.java.VanillaJavaApp",
- ImmutableMap.<String, String>of(
- "initialSize", "1",
- "creationScriptUrl", "http://my.brooklyn.io/storage/foo.sql"));
-
- final ApplicationSpec applicationSpec = ApplicationSpec.builder().name("myapp")
- .entities(ImmutableSet.of(entitySpec))
- .locations(ImmutableSet.of("/v1/locations/1"))
- .build();
-
- final ApplicationSummary application = new ApplicationSummary(null, applicationSpec, Status.STARTING, null);
-
- @SuppressWarnings("serial")
- @Test
- public void testSerializeToJSON() throws IOException {
- ApplicationSummary application1 = new ApplicationSummary("myapp_id", applicationSpec, Status.STARTING, null) {
- @Override
- public Map<String, URI> getLinks() {
- return ImmutableMap.of(
- "self", URI.create("/v1/applications/" + applicationSpec.getName()),
- "entities", URI.create("fixtures/entity-summary-list.json"));
- }
- };
- assertEquals(asJson(application1), jsonFixture("fixtures/application.json"));
- }
-
- @Test
- public void testDeserializeFromJSON() throws IOException {
- assertEquals(fromJson(jsonFixture("fixtures/application.json"),
- ApplicationSummary.class), application);
- }
-
- @Test
- public void testTransitionToRunning() {
- ApplicationSummary running = application.transitionTo(Status.RUNNING);
- assertEquals(running.getStatus(), Status.RUNNING);
- }
-
- @Test
- public void testAppInAppTest() throws IOException {
- TestApplicationImpl app = new TestApplicationImpl();
- ManagementContext mgmt = Entities.startManagement(app);
- try {
- Entity e2 = app.addChild(new TestApplicationImpl());
- Entities.manage(e2);
- if (mgmt.getApplications().size()!=1)
- Assert.fail("Apps in Apps should not be listed at top level: "+mgmt.getApplications());
- } finally {
- Entities.destroyAll(mgmt);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/domain/LocationSummaryTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/domain/LocationSummaryTest.java b/usage/rest-server/src/test/java/brooklyn/rest/domain/LocationSummaryTest.java
deleted file mode 100644
index ebfd004..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/domain/LocationSummaryTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.domain;
-
-import static brooklyn.rest.util.RestApiTestUtils.asJson;
-import static brooklyn.rest.util.RestApiTestUtils.fromJson;
-import static brooklyn.rest.util.RestApiTestUtils.jsonFixture;
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
-import org.codehaus.jackson.type.TypeReference;
-import org.testng.annotations.Test;
-
-import brooklyn.rest.transform.LocationTransformer;
-
-public class LocationSummaryTest {
-
- @SuppressWarnings("deprecation")
- final LocationSummary summary = LocationTransformer.newInstance("123", LocationSpec.localhost());
-
- @Test
- public void testSerializeToJSON() throws IOException {
- assertEquals(asJson(summary), jsonFixture("fixtures/location-summary.json"));
- }
-
- @Test
- public void testDeserializeFromJSON() throws IOException {
- assertEquals(fromJson(jsonFixture("fixtures/location-summary.json"), LocationSummary.class), summary);
- }
-
- @Test
- public void testDeserializeListFromJSON() throws IOException {
- assertEquals(fromJson(jsonFixture("fixtures/location-list.json"), new TypeReference<List<LocationSummary>>() {}),
- Collections.singletonList(summary));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/domain/SensorSummaryTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/domain/SensorSummaryTest.java b/usage/rest-server/src/test/java/brooklyn/rest/domain/SensorSummaryTest.java
deleted file mode 100644
index f7a0fcf..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/domain/SensorSummaryTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.domain;
-
-import static brooklyn.rest.util.RestApiTestUtils.asJson;
-import static brooklyn.rest.util.RestApiTestUtils.fromJson;
-import static brooklyn.rest.util.RestApiTestUtils.jsonFixture;
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-import java.net.URI;
-
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import brooklyn.config.render.RendererHints;
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.event.AttributeSensor;
-import brooklyn.event.Sensor;
-import brooklyn.event.basic.Sensors;
-import brooklyn.management.ManagementContext;
-import brooklyn.rest.transform.SensorTransformer;
-import brooklyn.test.entity.TestApplication;
-import brooklyn.test.entity.TestEntity;
-
-import com.google.common.collect.ImmutableMap;
-
-public class SensorSummaryTest {
-
- private SensorSummary sensorSummary = new SensorSummary("redis.uptime", "Integer",
- "Description", ImmutableMap.of(
- "self", URI.create("/v1/applications/redis-app/entities/redis-ent/sensors/redis.uptime")));
-
- private TestApplication app;
- private TestEntity entity;
- private ManagementContext mgmt;
-
- @BeforeMethod(alwaysRun = true)
- public void setUp() throws Exception {
- app = TestApplication.Factory.newManagedInstanceForTests();
- mgmt = app.getManagementContext();
- entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- }
-
- @AfterMethod(alwaysRun = true)
- public void tearDown() throws Exception {
- if (mgmt != null) Entities.destroyAll(mgmt);
- }
-
- @Test
- public void testSerializeToJSON() throws IOException {
- assertEquals(asJson(sensorSummary), jsonFixture("fixtures/sensor-summary.json"));
- }
-
- @Test
- public void testDeserializeFromJSON() throws IOException {
- assertEquals(fromJson(jsonFixture("fixtures/sensor-summary.json"), SensorSummary.class), sensorSummary);
- }
-
- @Test
- public void testEscapesUriForSensorName() throws IOException {
- Sensor<String> sensor = Sensors.newStringSensor("name with space");
- SensorSummary summary = SensorTransformer.sensorSummary(entity, sensor);
- URI selfUri = summary.getLinks().get("self");
-
- String expectedUri = "/v1/applications/" + entity.getApplicationId() + "/entities/" + entity.getId() + "/sensors/" + "name%20with%20space";
-
- assertEquals(selfUri, URI.create(expectedUri));
- }
-
- // Previously failed because immutable-map builder threw exception if put same key multiple times,
- // and the NamedActionWithUrl did not have equals/hashCode
- @Test
- public void testSensorWithMultipleOpenUrlActionsRegistered() throws IOException {
- AttributeSensor<String> sensor = Sensors.newStringSensor("sensor1");
- entity.setAttribute(sensor, "http://myval");
- RendererHints.register(sensor, RendererHints.namedActionWithUrl());
- RendererHints.register(sensor, RendererHints.namedActionWithUrl());
-
- SensorSummary summary = SensorTransformer.sensorSummary(entity, sensor);
-
- assertEquals(summary.getLinks().get("action:open"), URI.create("http://myval"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/AccessResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/AccessResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/AccessResourceTest.java
deleted file mode 100644
index fa00402..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/AccessResourceTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.resources;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-import javax.ws.rs.core.Response;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.Test;
-
-import brooklyn.rest.domain.AccessSummary;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-@Test(singleThreaded = true)
-public class AccessResourceTest extends BrooklynRestResourceTest {
-
- @SuppressWarnings("unused")
- private static final Logger log = LoggerFactory.getLogger(AccessResourceTest.class);
-
- @Test
- public void testGetAndSetAccessControl() throws Exception {
- // Default is everything allowed
- AccessSummary summary = client().resource("/v1/access").get(AccessSummary.class);
- assertTrue(summary.isLocationProvisioningAllowed());
-
- // Forbid location provisioning
- ClientResponse response = client().resource(
- "/v1/access/locationProvisioningAllowed")
- .queryParam("allowed", "false")
- .post(ClientResponse.class);
- assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-
- AccessSummary summary2 = client().resource("/v1/access").get(AccessSummary.class);
- assertFalse(summary2.isLocationProvisioningAllowed());
-
- // Allow location provisioning
- ClientResponse response2 = client().resource(
- "/v1/access/locationProvisioningAllowed")
- .queryParam("allowed", "true")
- .post(ClientResponse.class);
- assertEquals(response2.getStatus(), Response.Status.OK.getStatusCode());
-
- AccessSummary summary3 = client().resource("/v1/access").get(AccessSummary.class);
- assertTrue(summary3.isLocationProvisioningAllowed());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ApiDocResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApiDocResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApiDocResourceTest.java
deleted file mode 100644
index 8e2f36d..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApiDocResourceTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.resources;
-
-import static org.testng.Assert.assertEquals;
-
-import java.util.List;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import brooklyn.rest.BrooklynRestApi;
-import brooklyn.rest.apidoc.ApidocRoot;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.wordnik.swagger.core.DocumentationEndPoint;
-import com.wordnik.swagger.core.DocumentationOperation;
-
-/**
- * @author Adam Lowe
- */
-@Test(singleThreaded = true)
-public class ApiDocResourceTest extends BrooklynRestResourceTest {
-
- private static final Logger log = LoggerFactory.getLogger(ApiDocResourceTest.class);
-
- @Override
- protected void addBrooklynResources() {
- for (Object o : BrooklynRestApi.getApidocResources()) {
- addResource(o);
- }
- super.addBrooklynResources();
- }
-
- @Test
- public void testRootSerializesSensibly() throws Exception {
- String data = client().resource("/v1/apidoc/").get(String.class);
- log.info("apidoc gives: "+data);
- // make sure no scala gets in
- Assert.assertFalse(data.contains("$"));
- Assert.assertFalse(data.contains("scala"));
- }
-
- @Test
- public void testCountRestResources() throws Exception {
- ApidocRoot response = client().resource("/v1/apidoc/").get(ApidocRoot.class);
- assertEquals(response.getApis().size(), 1 + Iterables.size(BrooklynRestApi.getBrooklynRestResources()));
- }
-
- @Test
- public void testEndpointSerializesSensibly() throws Exception {
- String data = client().resource("/v1/apidoc/brooklyn.rest.resources.ApidocResource").get(String.class);
- log.info("apidoc endpoint resource gives: "+data);
- // make sure no scala gets in
- Assert.assertFalse(data.contains("$"));
- Assert.assertFalse(data.contains("scala"));
- }
-
- @Test
- public void testApiDocDetails() throws Exception {
- ApidocRoot response = client().resource("/v1/apidoc/brooklyn.rest.resources.ApidocResource").get(ApidocRoot.class);
- assertEquals(countOperations(response), 2);
- }
-
- @Test
- public void testEffectorDetails() throws Exception {
- ApidocRoot response = client().resource("/v1/apidoc/brooklyn.rest.resources.EffectorResource").get(ApidocRoot.class);
- assertEquals(countOperations(response), 2);
- }
-
- @Test
- public void testEntityDetails() throws Exception {
- ApidocRoot response = client().resource("/v1/apidoc/brooklyn.rest.resources.EntityResource").get(ApidocRoot.class);
- assertEquals(countOperations(response), 14);
- }
-
- @Test
- public void testCatalogDetails() throws Exception {
- ApidocRoot response = client().resource("/v1/apidoc/brooklyn.rest.resources.CatalogResource").get(ApidocRoot.class);
- assertEquals(countOperations(response), 22, "ops="+getOperations(response));
- }
-
- @SuppressWarnings("rawtypes")
- @Test
- public void testAllAreLoadable() throws Exception {
- // sometimes -- e.g. if an annotation refers to a class name with the wrong case -- the call returns a 500 and breaks apidoc; ensure we don't trigger that.
- Map response = client().resource("/v1/apidoc/").get(Map.class);
- // "Documenation" object does not include the links :( so traverse via map
- log.debug("root doc response is: "+response);
- List apis = (List)response.get("apis");
- for (Object api: apis) {
- String link = (String) ((Map)api).get("link");
- try {
- Map r2 = client().resource(link).get(Map.class);
- log.debug("doc for "+link+" is: "+r2);
- } catch (Exception e) {
- log.error("Error in swagger/apidoc annotations, unparseable, at "+link+": "+e, e);
- Assert.fail("Error in swagger/apidoc annotations, unparseable, at "+link+": "+e, e);
- }
- }
- }
-
- /* Note in some cases we might have more than one Resource method per 'endpoint'
- */
- private int countOperations(ApidocRoot doc) throws Exception {
- return getOperations(doc).size();
- }
-
- private List<DocumentationOperation> getOperations(ApidocRoot doc) throws Exception {
- List<DocumentationOperation> result = Lists.newArrayList();
- for (DocumentationEndPoint endpoint : doc.getApis()) {
- result.addAll(endpoint.getOperations());
- }
- return result;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceIntegrationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceIntegrationTest.java
deleted file mode 100644
index 2ee4f25..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ApplicationResourceIntegrationTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.rest.resources;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-
-import java.net.URI;
-import java.util.Set;
-
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.basic.Lifecycle;
-import brooklyn.rest.domain.ApplicationSpec;
-import brooklyn.rest.domain.ApplicationSummary;
-import brooklyn.rest.domain.EntitySpec;
-import brooklyn.rest.domain.EntitySummary;
-import brooklyn.rest.domain.SensorSummary;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.test.Asserts;
-import brooklyn.util.collections.MutableMap;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.GenericType;
-
-@Test(singleThreaded = true)
-public class ApplicationResourceIntegrationTest extends BrooklynRestResourceTest {
-
- @SuppressWarnings("unused")
- private static final Logger log = LoggerFactory.getLogger(ApplicationResourceIntegrationTest.class);
-
- private final ApplicationSpec redisSpec = ApplicationSpec.builder().name("redis-app")
- .entities(ImmutableSet.of(new EntitySpec("redis-ent", "org.apache.brooklyn.entity.nosql.redis.RedisStore")))
- .locations(ImmutableSet.of("localhost"))
- .build();
-
- @Test(groups="Integration")
- public void testDeployRedisApplication() throws Exception {
- ClientResponse response = clientDeploy(redisSpec);
-
- assertEquals(response.getStatus(), 201);
- assertEquals(getManagementContext().getApplications().size(), 1);
- assertTrue(response.getLocation().getPath().startsWith("/v1/applications/"), "path="+response.getLocation().getPath()); // path uses id, rather than app name
-
- waitForApplicationToBeRunning(response.getLocation());
- }
-
- @Test(groups="Integration", dependsOnMethods = "testDeployRedisApplication")
- public void testListEntities() {
- Set<EntitySummary> entities = client().resource("/v1/applications/redis-app/entities")
- .get(new GenericType<Set<EntitySummary>>() {});
-
- for (EntitySummary entity : entities) {
- client().resource(entity.getLinks().get("self")).get(ClientResponse.class);
- // TODO assertions on the above call?
-
- Set<EntitySummary> children = client().resource(entity.getLinks().get("children"))
- .get(new GenericType<Set<EntitySummary>>() {});
- assertEquals(children.size(), 0);
- }
- }
-
- @Test(groups="Integration", dependsOnMethods = "testDeployRedisApplication")
- public void testListSensorsRedis() {
- Set<SensorSummary> sensors = client().resource("/v1/applications/redis-app/entities/redis-ent/sensors")
- .get(new GenericType<Set<SensorSummary>>() {});
- assertTrue(sensors.size() > 0);
- SensorSummary uptime = Iterables.find(sensors, new Predicate<SensorSummary>() {
- @Override
- public boolean apply(SensorSummary sensorSummary) {
- return sensorSummary.getName().equals("redis.uptime");
- }
- });
- assertEquals(uptime.getType(), "java.lang.Integer");
- }
-
- @Test(groups="Integration", dependsOnMethods = { "testListSensorsRedis", "testListEntities" })
- public void testTriggerRedisStopEffector() throws Exception {
- ClientResponse response = client().resource("/v1/applications/redis-app/entities/redis-ent/effectors/stop")
- .type(MediaType.APPLICATION_JSON_TYPE)
- .post(ClientResponse.class, ImmutableMap.of());
- assertEquals(response.getStatus(), Response.Status.ACCEPTED.getStatusCode());
-
- final URI stateSensor = URI.create("/v1/applications/redis-app/entities/redis-ent/sensors/service.state");
- final String expectedStatus = Lifecycle.STOPPED.toString();
- Asserts.succeedsEventually(MutableMap.of("timeout", 60 * 1000), new Runnable() {
- public void run() {
- // Accept with and without quotes; if don't specify "Accepts" header, then
- // might get back json or plain text (depending on compiler / java runtime
- // used for SensorApi!)
- String val = client().resource(stateSensor).get(String.class);
- assertTrue(expectedStatus.equalsIgnoreCase(val) || ("\""+expectedStatus+"\"").equalsIgnoreCase(val), "state="+val);
- }
- });
- }
-
- @Test(groups="Integration", dependsOnMethods = "testTriggerRedisStopEffector" )
- public void testDeleteRedisApplication() throws Exception {
- int size = getManagementContext().getApplications().size();
- ClientResponse response = client().resource("/v1/applications/redis-app")
- .delete(ClientResponse.class);
-
- waitForPageNotFoundResponse("/v1/applications/redis-app", ApplicationSummary.class);
-
- assertEquals(response.getStatus(), Response.Status.ACCEPTED.getStatusCode());
- assertEquals(getManagementContext().getApplications().size(), size-1);
- }
-
-}