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:13 UTC

[06/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/resources/LocationResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/LocationResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/LocationResourceTest.java
deleted file mode 100644
index 11a889c..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/LocationResourceTest.java
+++ /dev/null
@@ -1,189 +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.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.google.api.client.repackaged.com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.GenericType;
-
-import brooklyn.location.LocationSpec;
-import brooklyn.location.basic.SimulatedLocation;
-import brooklyn.location.jclouds.JcloudsLocation;
-import brooklyn.rest.domain.CatalogLocationSummary;
-import brooklyn.rest.domain.LocationSummary;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.test.Asserts;
-
-@Test(singleThreaded = true)
-public class LocationResourceTest extends BrooklynRestResourceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(LocationResourceTest.class);
-    private String legacyLocationName = "my-jungle-legacy";
-    private String legacyLocationVersion = "0.0.0.SNAPSHOT";
-    
-    private String locationName = "my-jungle";
-    private String locationVersion = "0.1.2";
-    
-    @Test
-    @Deprecated
-    public void testAddLegacyLocationDefinition() {
-        Map<String, String> expectedConfig = ImmutableMap.of(
-                "identity", "bob",
-                "credential", "CR3dential");
-        ClientResponse response = client().resource("/v1/locations")
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, new brooklyn.rest.domain.LocationSpec(legacyLocationName, "aws-ec2:us-east-1", expectedConfig));
-
-        URI addedLegacyLocationUri = response.getLocation();
-        log.info("added legacy, at: " + addedLegacyLocationUri);
-        LocationSummary location = client().resource(response.getLocation()).get(LocationSummary.class);
-        log.info(" contents: " + location);
-        assertEquals(location.getSpec(), "brooklyn.catalog:"+legacyLocationName+":"+legacyLocationVersion);
-        assertTrue(addedLegacyLocationUri.toString().startsWith("/v1/locations/"));
-
-        JcloudsLocation l = (JcloudsLocation) getManagementContext().getLocationRegistry().resolve(legacyLocationName);
-        Assert.assertEquals(l.getProvider(), "aws-ec2");
-        Assert.assertEquals(l.getRegion(), "us-east-1");
-        Assert.assertEquals(l.getIdentity(), "bob");
-        Assert.assertEquals(l.getCredential(), "CR3dential");
-    }
-
-    @SuppressWarnings("deprecation")
-    @Test
-    public void testAddNewLocationDefinition() {
-        String yaml = Joiner.on("\n").join(ImmutableList.of(
-                "brooklyn.catalog:",
-                "  symbolicName: "+locationName,
-                "  version: " + locationVersion,
-                "",
-                "brooklyn.locations:",
-                "- type: "+"aws-ec2:us-east-1",
-                "  brooklyn.config:",
-                "    identity: bob",
-                "    credential: CR3dential"));
-
-        
-        ClientResponse response = client().resource("/v1/catalog")
-                .post(ClientResponse.class, yaml);
-
-        assertEquals(response.getStatus(), Response.Status.CREATED.getStatusCode());
-        
-
-        URI addedCatalogItemUri = response.getLocation();
-        log.info("added, at: " + addedCatalogItemUri);
-        
-        // Ensure location definition exists
-        CatalogLocationSummary locationItem = client().resource("/v1/catalog/locations/"+locationName + "/" + locationVersion)
-                .get(CatalogLocationSummary.class);
-        log.info(" item: " + locationItem);
-        LocationSummary locationSummary = client().resource(URI.create("/v1/locations/"+locationName+"/")).get(LocationSummary.class);
-        log.info(" summary: " + locationSummary);
-        Assert.assertEquals(locationSummary.getSpec(), "brooklyn.catalog:"+locationName+":"+locationVersion);
-
-        // Ensure location is usable - can instantiate, and has right config
-        JcloudsLocation l = (JcloudsLocation) getManagementContext().getLocationRegistry().resolve(locationName);
-        Assert.assertEquals(l.getProvider(), "aws-ec2");
-        Assert.assertEquals(l.getRegion(), "us-east-1");
-        Assert.assertEquals(l.getIdentity(), "bob");
-        Assert.assertEquals(l.getCredential(), "CR3dential");
-    }
-
-    @SuppressWarnings("deprecation")
-    @Test(dependsOnMethods = { "testAddNewLocationDefinition" })
-    public void testListAllLocationDefinitions() {
-        Set<LocationSummary> locations = client().resource("/v1/locations")
-                .get(new GenericType<Set<LocationSummary>>() {});
-        Iterable<LocationSummary> matching = Iterables.filter(locations, new Predicate<LocationSummary>() {
-            @Override
-            public boolean apply(@Nullable LocationSummary l) {
-                return locationName.equals(l.getName());
-            }
-        });
-        LocationSummary location = Iterables.getOnlyElement(matching);
-        
-        URI expectedLocationUri = URI.create("/v1/locations/"+locationName);
-        Assert.assertEquals(location.getSpec(), "brooklyn.catalog:"+locationName+":"+locationVersion);
-        Assert.assertEquals(location.getLinks().get("self"), expectedLocationUri);
-    }
-
-    @SuppressWarnings("deprecation")
-    @Test(dependsOnMethods = { "testListAllLocationDefinitions" })
-    public void testGetSpecificLocation() {
-        URI expectedLocationUri = URI.create("/v1/locations/"+locationName);
-        LocationSummary location = client().resource(expectedLocationUri).get(LocationSummary.class);
-        assertEquals(location.getSpec(), "brooklyn.catalog:"+locationName+":"+locationVersion);
-    }
-
-    @SuppressWarnings("deprecation")
-    @Test
-    public void testGetLocationConfig() {
-        SimulatedLocation parentLoc = (SimulatedLocation) getManagementContext().getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class)
-                .configure("myParentKey", "myParentVal"));
-        SimulatedLocation loc = (SimulatedLocation) getManagementContext().getLocationManager().createLocation(LocationSpec.create(SimulatedLocation.class)
-                .parent(parentLoc)
-                .configure("mykey", "myval")
-                .configure("password", "mypassword"));
-    
-        // "full" means including-inherited, filtered to exclude secrets
-        URI uriFull = URI.create("/v1/locations/"+loc.getId()+"?full=true");
-        LocationSummary summaryFull = client().resource(uriFull).get(LocationSummary.class);
-        assertEquals(summaryFull.getConfig(), ImmutableMap.of("mykey", "myval", "myParentKey", "myParentVal"), "conf="+summaryFull.getConfig());
-        
-        // Default is local-only, filtered to exclude secrets
-        URI uriDefault = URI.create("/v1/locations/"+loc.getId());
-        LocationSummary summaryDefault = client().resource(uriDefault).get(LocationSummary.class);
-        assertEquals(summaryDefault.getConfig(), ImmutableMap.of("mykey", "myval"), "conf="+summaryDefault.getConfig());
-    }
-
-    @Test(dependsOnMethods = { "testAddLegacyLocationDefinition" })
-    @Deprecated
-    public void testDeleteLocation() {
-        final int size = getLocationRegistry().getDefinedLocations().size();
-        URI expectedLocationUri = URI.create("/v1/locations/"+legacyLocationName);
-
-        ClientResponse response = client().resource(expectedLocationUri).delete(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
-        Asserts.succeedsEventually(new Runnable() {
-            @Override
-            public void run() {
-                assertEquals(getLocationRegistry().getDefinedLocations().size(), size - 1);
-            }
-        });
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/PolicyResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/PolicyResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/PolicyResourceTest.java
deleted file mode 100644
index cce1bee..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/PolicyResourceTest.java
+++ /dev/null
@@ -1,145 +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.assertNotNull;
-import static org.testng.Assert.fail;
-
-import java.util.Map;
-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.BeforeClass;
-import org.testng.annotations.Test;
-
-import brooklyn.rest.domain.ApplicationSpec;
-import brooklyn.rest.domain.EntitySpec;
-import brooklyn.rest.domain.PolicyConfigSummary;
-import brooklyn.rest.domain.PolicySummary;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.rest.testing.mocks.RestMockSimplePolicy;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.GenericType;
-
-@Test(singleThreaded = true)
-public class PolicyResourceTest extends BrooklynRestResourceTest {
-
-    @SuppressWarnings("unused")
-    private static final Logger log = LoggerFactory.getLogger(PolicyResourceTest.class);
-
-    private static final String ENDPOINT = "/v1/applications/simple-app/entities/simple-ent/policies/";
-
-    private final ApplicationSpec simpleSpec = ApplicationSpec.builder().name("simple-app").entities(
-            ImmutableSet.of(new EntitySpec("simple-ent", RestMockSimpleEntity.class.getName()))).locations(
-            ImmutableSet.of("localhost")).build();
-
-    private String policyId;
-
-    @BeforeClass(alwaysRun = true)
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
-        ClientResponse aResponse = clientDeploy(simpleSpec);
-        waitForApplicationToBeRunning(aResponse.getLocation());
-
-        ClientResponse pResponse = client().resource(ENDPOINT)
-                .queryParam("type", RestMockSimplePolicy.class.getCanonicalName())
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, Maps.newHashMap());
-
-        PolicySummary response = pResponse.getEntity(PolicySummary.class);
-        assertNotNull(response.getId());
-        policyId = response.getId();
-
-    }
-
-    @Test
-    public void testListConfig() throws Exception {
-        Set<PolicyConfigSummary> config = client().resource(ENDPOINT + policyId + "/config")
-                .get(new GenericType<Set<PolicyConfigSummary>>() {});
-        
-        Set<String> configNames = Sets.newLinkedHashSet();
-        for (PolicyConfigSummary conf : config) {
-            configNames.add(conf.getName());
-        }
-
-        assertEquals(configNames, ImmutableSet.of(
-                RestMockSimplePolicy.SAMPLE_CONFIG.getName(),
-                RestMockSimplePolicy.INTEGER_CONFIG.getName()));
-    }
-
-    @Test
-    public void testGetNonExistantConfigReturns404() throws Exception {
-        String invalidConfigName = "doesnotexist";
-        try {
-            PolicyConfigSummary summary = client().resource(ENDPOINT + policyId + "/config/" + invalidConfigName)
-                    .get(PolicyConfigSummary.class);
-            fail("Should have thrown 404, but got "+summary);
-        } catch (Exception e) {
-            if (!e.toString().contains("404")) throw e;
-        }
-    }
-
-    @Test
-    public void testGetDefaultValue() throws Exception {
-        String configName = RestMockSimplePolicy.SAMPLE_CONFIG.getName();
-        String expectedVal = RestMockSimplePolicy.SAMPLE_CONFIG.getDefaultValue();
-        
-        String configVal = client().resource(ENDPOINT + policyId + "/config/" + configName)
-                .get(String.class);
-        assertEquals(configVal, expectedVal);
-    }
-    
-    @Test(dependsOnMethods = "testGetDefaultValue")
-    public void testReconfigureConfig() throws Exception {
-        String configName = RestMockSimplePolicy.SAMPLE_CONFIG.getName();
-        
-        ClientResponse response = client().resource(ENDPOINT + policyId + "/config/" + configName + "/set")
-                .queryParam("value", "newval")
-                .post(ClientResponse.class);
-
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-    }
-    
-    @Test(dependsOnMethods = "testReconfigureConfig")
-    public void testGetConfigValue() throws Exception {
-        String configName = RestMockSimplePolicy.SAMPLE_CONFIG.getName();
-        String expectedVal = "newval";
-        
-        Map<String, Object> allState = client().resource(ENDPOINT + policyId + "/config/current-state")
-                .get(new GenericType<Map<String, Object>>() {});
-        assertEquals(allState, ImmutableMap.of(configName, expectedVal));
-        
-        String configVal = client().resource(ENDPOINT + policyId + "/config/" + configName)
-                .get(String.class);
-        assertEquals(configVal, expectedVal);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ScriptResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ScriptResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ScriptResourceTest.java
deleted file mode 100644
index 3c340ac..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ScriptResourceTest.java
+++ /dev/null
@@ -1,53 +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 java.util.Collections;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.basic.Entities;
-import brooklyn.location.Location;
-import brooklyn.management.ManagementContext;
-import brooklyn.rest.domain.ScriptExecutionSummary;
-import brooklyn.rest.testing.mocks.RestMockApp;
-
-public class ScriptResourceTest {
-
-    @Test
-    public void testGroovy() {
-        RestMockApp app = new RestMockApp();
-        Entities.startManagement(app);
-        ManagementContext mgmt = app.getManagementContext();
-        try {
-        
-            Entities.start(app, Collections.<Location>emptyList());
-
-            ScriptResource s = new ScriptResource();
-            s.injectManagementContext(mgmt);
-
-            ScriptExecutionSummary result = s.groovy(null, "def apps = []; mgmt.applications.each { println 'app:'+it; apps << it.id }; apps");
-            Assert.assertEquals(Collections.singletonList(app.getId()).toString(), result.getResult());
-            Assert.assertTrue(result.getStdout().contains("app:RestMockApp"));
-        
-        } finally { Entities.destroyAll(mgmt); }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
deleted file mode 100644
index e412b6b..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceIntegrationTest.java
+++ /dev/null
@@ -1,83 +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 java.net.URI;
-
-import org.apache.http.client.HttpClient;
-import org.eclipse.jetty.server.Server;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.Entity;
-import brooklyn.entity.basic.BasicApplication;
-import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.basic.EntityPredicates;
-import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.management.ManagementContext;
-import brooklyn.rest.BrooklynRestApiLauncher;
-import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
-import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.test.entity.LocalManagementContextForTests;
-import brooklyn.util.collections.MutableList;
-import brooklyn.util.http.HttpTool;
-import brooklyn.util.http.HttpToolResponse;
-import brooklyn.util.net.Urls;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-
-public class SensorResourceIntegrationTest extends BrooklynRestApiLauncherTestFixture {
-
-    private Server server;
-    private ManagementContext mgmt;
-    private BasicApplication app;
-
-    @BeforeClass(alwaysRun = true)
-    protected void setUp() {
-        mgmt = LocalManagementContextForTests.newInstance();
-        server = useServerForTest(BrooklynRestApiLauncher.launcher()
-            .managementContext(mgmt)
-            .withoutJsgui()
-            .start());
-        app = mgmt.getEntityManager().createEntity(EntitySpec.create(BasicApplication.class).displayName("simple-app")
-            .child(EntitySpec.create(Entity.class, RestMockSimpleEntity.class).displayName("simple-ent")));
-        mgmt.getEntityManager().manage(app);
-        app.start(MutableList.of(mgmt.getLocationRegistry().resolve("localhost")));
-    }
-    
-    // marked integration because of time
-    @Test(groups = "Integration")
-    public void testSensorBytes() throws Exception {
-        EntityInternal entity = (EntityInternal) Iterables.find(mgmt.getEntityManager().getEntities(), EntityPredicates.displayNameEqualTo("simple-ent"));
-        SensorResourceTest.addAmphibianSensor(entity);
-        
-        String baseUri = getBaseUri(server);
-        URI url = URI.create(Urls.mergePaths(baseUri, SensorResourceTest.SENSORS_ENDPOINT, SensorResourceTest.SENSOR_NAME));
-        
-        // Uses explicit "application/json" because failed on jenkins as though "text/plain" was the default on Ubuntu jenkins! 
-        HttpClient client = HttpTool.httpClientBuilder().uri(baseUri).build();
-        HttpToolResponse response = HttpTool.httpGet(client, url, ImmutableMap.<String, String>of("Accept", "application/json"));
-        HttpTestUtils.assertHealthyStatusCode(response.getResponseCode());
-        Assert.assertEquals(response.getContentAsString(), "\"12345 frogs\"");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
deleted file mode 100644
index 6d074c0..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
+++ /dev/null
@@ -1,272 +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.Map;
-
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import brooklyn.config.render.RendererHints;
-import brooklyn.config.render.TestRendererHints;
-import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.basic.EntityPredicates;
-import brooklyn.event.AttributeSensor;
-import brooklyn.event.basic.Sensors;
-import brooklyn.rest.api.SensorApi;
-import brooklyn.rest.domain.ApplicationSpec;
-import brooklyn.rest.domain.EntitySpec;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.util.collections.MutableMap;
-import brooklyn.util.stream.Streams;
-import brooklyn.util.text.StringFunctions;
-
-import com.google.common.base.Functions;
-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;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.WebResource.Builder;
-
-/**
- * Test the {@link SensorApi} implementation.
- * <p>
- * Check that {@link SensorResource} correctly renders {@link AttributeSensor}
- * values, including {@link RendererHints.DisplayValue} hints.
- */
-@Test(singleThreaded = true)
-public class SensorResourceTest extends BrooklynRestResourceTest {
-
-    final static ApplicationSpec SIMPLE_SPEC = ApplicationSpec.builder()
-            .name("simple-app")
-            .entities(ImmutableSet.of(new EntitySpec("simple-ent", RestMockSimpleEntity.class.getName())))
-            .locations(ImmutableSet.of("localhost"))
-            .build();
-
-    static final String SENSORS_ENDPOINT = "/v1/applications/simple-app/entities/simple-ent/sensors";
-    static final String SENSOR_NAME = "amphibian.count";
-    static final AttributeSensor<Integer> SENSOR = Sensors.newIntegerSensor(SENSOR_NAME);
-
-    EntityInternal entity;
-
-    /**
-     * Sets up the application and entity.
-     * <p>
-     * Adds a sensor and sets its value to {@code 12345}. Configures a display value
-     * hint that appends {@code frogs} to the value of the sensor.
-     */
-    @BeforeClass(alwaysRun = true)
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
-        // Deploy application
-        ClientResponse deploy = clientDeploy(SIMPLE_SPEC);
-        waitForApplicationToBeRunning(deploy.getLocation());
-
-        entity = (EntityInternal) Iterables.find(getManagementContext().getEntityManager().getEntities(), EntityPredicates.displayNameEqualTo("simple-ent"));
-        addAmphibianSensor(entity);
-    }
-
-    static void addAmphibianSensor(EntityInternal entity) {
-        // Add new sensor
-        entity.getMutableEntityType().addSensor(SENSOR);
-        entity.setAttribute(SENSOR, 12345);
-
-        // Register display value hint
-        RendererHints.register(SENSOR, RendererHints.displayValue(Functions.compose(StringFunctions.append(" frogs"), Functions.toStringFunction())));
-    }
-
-    @AfterClass(alwaysRun = true)
-    @Override
-    public void tearDown() throws Exception {
-        TestRendererHints.clearRegistry();
-        super.tearDown();
-    }
-
-    /** Check default is to use display value hint. */
-    @Test
-    public void testBatchSensorRead() throws Exception {
-        ClientResponse response = client().resource(SENSORS_ENDPOINT + "/current-state")
-                .accept(MediaType.APPLICATION_JSON)
-                .get(ClientResponse.class);
-        Map<String, ?> currentState = response.getEntity(new GenericType<Map<String,?>>(Map.class) {});
-
-        for (String sensor : currentState.keySet()) {
-            if (sensor.equals(SENSOR_NAME)) {
-                assertEquals(currentState.get(sensor), "12345 frogs");
-            }
-        }
-    }
-
-    /** Check setting {@code raw} to {@code true} ignores display value hint. */
-    @Test(dependsOnMethods = "testBatchSensorRead")
-    public void testBatchSensorReadRaw() throws Exception {
-        ClientResponse response = client().resource(SENSORS_ENDPOINT + "/current-state")
-                .queryParam("raw", "true")
-                .accept(MediaType.APPLICATION_JSON)
-                .get(ClientResponse.class);
-        Map<String, ?> currentState = response.getEntity(new GenericType<Map<String,?>>(Map.class) {});
-
-        for (String sensor : currentState.keySet()) {
-            if (sensor.equals(SENSOR_NAME)) {
-                assertEquals(currentState.get(sensor), Integer.valueOf(12345));
-            }
-        }
-    }
-
-    protected ClientResponse doSensorTest(Boolean raw, MediaType acceptsType, Object expectedValue) {
-        return doSensorTestUntyped(
-            raw==null ? null : (""+raw).toLowerCase(), 
-            acceptsType==null ? null : new String[] { acceptsType.getType() }, 
-            expectedValue);
-    }
-    protected ClientResponse doSensorTestUntyped(String raw, String[] acceptsTypes, Object expectedValue) {
-        WebResource req = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME);
-        if (raw!=null) req = req.queryParam("raw", raw);
-        ClientResponse response;
-        if (acceptsTypes!=null) {
-            Builder rb = req.accept(acceptsTypes);
-            response = rb.get(ClientResponse.class);
-        } else {
-            response = req.get(ClientResponse.class);
-        }
-        if (expectedValue!=null) {
-            HttpTestUtils.assertHealthyStatusCode(response.getStatus());
-            Object value = response.getEntity(expectedValue.getClass());
-            assertEquals(value, expectedValue);
-        }
-        return response;
-    }
-    
-    /**
-     * Check we can get a sensor, explicitly requesting json; gives a string picking up the rendering hint.
-     * 
-     * If no "Accepts" header is given, then we don't control whether json or plain text comes back.
-     * It is dependent on the method order, which is compiler-specific.
-     */
-    @Test
-    public void testGetJson() throws Exception {
-        doSensorTest(null, MediaType.APPLICATION_JSON_TYPE, "\"12345 frogs\"");
-    }
-    
-    @Test
-    public void testGetJsonBytes() throws Exception {
-        ClientResponse response = doSensorTest(null, MediaType.APPLICATION_JSON_TYPE, null);
-        byte[] bytes = Streams.readFully(response.getEntityInputStream());
-        // assert we have one set of surrounding quotes
-        assertEquals(bytes.length, 13);
-    }
-
-    /** Check that plain returns a string without quotes, with the rendering hint */
-    @Test
-    public void testGetPlain() throws Exception {
-        doSensorTest(null, MediaType.TEXT_PLAIN_TYPE, "12345 frogs");
-    }
-
-    /** 
-     * Check that when we set {@code raw = true}, the result ignores the display value hint.
-     *
-     * If no "Accepts" header is given, then we don't control whether json or plain text comes back.
-     * It is dependent on the method order, which is compiler-specific.
-     */
-    @Test
-    public void testGetRawJson() throws Exception {
-        doSensorTest(true, MediaType.APPLICATION_JSON_TYPE, 12345);
-    }
-    
-    /** As {@link #testGetRaw()} but with plain set, returns the number */
-    @Test
-    public void testGetPlainRaw() throws Exception {
-        // have to pass a string because that's how PLAIN is deserialized
-        doSensorTest(true, MediaType.TEXT_PLAIN_TYPE, "12345");
-    }
-
-    /** Check explicitly setting {@code raw} to {@code false} is as before */
-    @Test
-    public void testGetPlainRawFalse() throws Exception {
-        doSensorTest(false, MediaType.TEXT_PLAIN_TYPE, "12345 frogs");
-    }
-
-    /** Check empty vaue for {@code raw} will revert to using default. */
-    @Test
-    public void testGetPlainRawEmpty() throws Exception {
-        doSensorTestUntyped("", new String[] { MediaType.TEXT_PLAIN }, "12345 frogs");
-    }
-
-    /** Check unparseable vaue for {@code raw} will revert to using default. */
-    @Test
-    public void testGetPlainRawError() throws Exception {
-        doSensorTestUntyped("biscuits", new String[] { MediaType.TEXT_PLAIN }, "12345 frogs");
-    }
-    
-    /** Check we can set a value */
-    @Test
-    public void testSet() throws Exception {
-        try {
-            ClientResponse response = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, 67890);
-            assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
-
-            assertEquals(entity.getAttribute(SENSOR), (Integer)67890);
-            
-            String value = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME).accept(MediaType.TEXT_PLAIN_TYPE).get(String.class);
-            assertEquals(value, "67890 frogs");
-
-        } finally { addAmphibianSensor(entity); }
-    }
-
-    @Test
-    public void testSetFromMap() throws Exception {
-        try {
-            ClientResponse response = client().resource(SENSORS_ENDPOINT)
-                .type(MediaType.APPLICATION_JSON_TYPE)
-                .post(ClientResponse.class, MutableMap.of(SENSOR_NAME, 67890));
-            assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
-            
-            assertEquals(entity.getAttribute(SENSOR), (Integer)67890);
-
-        } finally { addAmphibianSensor(entity); }
-    }
-    
-    /** Check we can delete a value */
-    @Test
-    public void testDelete() throws Exception {
-        try {
-            ClientResponse response = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME)
-                .delete(ClientResponse.class);
-            assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
-
-            String value = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME).accept(MediaType.TEXT_PLAIN_TYPE).get(String.class);
-            assertEquals(value, "");
-
-        } finally { addAmphibianSensor(entity); }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
deleted file mode 100644
index 311afaf..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceIntegrationTest.java
+++ /dev/null
@@ -1,126 +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 brooklyn.util.http.HttpTool.httpClientBuilder;
-import static org.testng.Assert.assertEquals;
-
-import java.net.URI;
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.http.HttpStatus;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
-import org.eclipse.jetty.server.Server;
-import org.testng.annotations.Test;
-
-import brooklyn.config.BrooklynProperties;
-import brooklyn.management.ManagementContext;
-import brooklyn.management.internal.LocalManagementContext;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.rest.BrooklynRestApiLauncher;
-import brooklyn.rest.BrooklynRestApiLauncherTestFixture;
-import brooklyn.rest.security.provider.TestSecurityProvider;
-import brooklyn.test.HttpTestUtils;
-import brooklyn.util.http.HttpTool;
-import brooklyn.util.http.HttpToolResponse;
-
-import com.google.common.collect.ImmutableMap;
-
-public class ServerResourceIntegrationTest extends BrooklynRestApiLauncherTestFixture {
-
-    /**
-     * [sam] Other tests rely on brooklyn.properties not containing security properties so ..
-     * I think the best way to test this is to set a security provider, then reload properties
-     * and check no authentication is required.
-     * 
-     * [aled] Changing this test so doesn't rely on brooklyn.properties having no security
-     * provider (that can lead to failures locally when running just this test). Asserts 
-     */
-    @Test(groups = "Integration")
-    public void testSecurityProviderUpdatesWhenPropertiesReloaded() {
-        BrooklynProperties brooklynProperties = BrooklynProperties.Factory.newEmpty();
-        brooklynProperties.put("brooklyn.webconsole.security.users", "admin");
-        brooklynProperties.put("brooklyn.webconsole.security.user.admin.password", "mypassword");
-        UsernamePasswordCredentials defaultCredential = new UsernamePasswordCredentials("admin", "mypassword");
-
-        ManagementContext mgmt = new LocalManagementContext(brooklynProperties);
-        
-        try {
-            Server server = useServerForTest(BrooklynRestApiLauncher.launcher()
-                    .managementContext(mgmt)
-                    .withoutJsgui()
-                    .securityProvider(TestSecurityProvider.class)
-                    .start());
-            String baseUri = getBaseUri(server);
-    
-            HttpToolResponse response;
-            final URI uri = URI.create(getBaseUri() + "/v1/server/properties/reload");
-            final Map<String, String> args = Collections.emptyMap();
-    
-            // Unauthorised when no credentials, and when default credentials.
-            response = HttpTool.httpPost(httpClientBuilder().uri(baseUri).build(), uri, args, args);
-            assertEquals(response.getResponseCode(), HttpStatus.SC_UNAUTHORIZED);
-    
-            response = HttpTool.httpPost(httpClientBuilder().uri(baseUri).credentials(defaultCredential).build(), 
-                    uri, args, args);
-            assertEquals(response.getResponseCode(), HttpStatus.SC_UNAUTHORIZED);
-
-            // Accepts TestSecurityProvider credentials, and we reload.
-            response = HttpTool.httpPost(httpClientBuilder().uri(baseUri).credentials(TestSecurityProvider.CREDENTIAL).build(),
-                    uri, args, args);
-            HttpTestUtils.assertHealthyStatusCode(response.getResponseCode());
-    
-            // Has no gone back to credentials from brooklynProperties; TestSecurityProvider credentials no longer work
-            response = HttpTool.httpPost(httpClientBuilder().uri(baseUri).credentials(defaultCredential).build(), 
-                    uri, args, args);
-            HttpTestUtils.assertHealthyStatusCode(response.getResponseCode());
-            
-            response = HttpTool.httpPost(httpClientBuilder().uri(baseUri).credentials(TestSecurityProvider.CREDENTIAL).build(), 
-                    uri, args, args);
-            assertEquals(response.getResponseCode(), HttpStatus.SC_UNAUTHORIZED);
-    
-        } finally {
-            ((ManagementContextInternal)mgmt).terminate();
-        }
-    }
-
-    @Test(groups = "Integration")
-    public void testGetUser() throws Exception {
-        Server server = useServerForTest(BrooklynRestApiLauncher.launcher()
-                .securityProvider(TestSecurityProvider.class)
-                .withoutJsgui()
-                .start());
-        assertEquals(getServerUser(server), TestSecurityProvider.USER);
-    }
-
-    private String getServerUser(Server server) throws Exception {
-        HttpClient client = httpClientBuilder()
-                .uri(getBaseUri(server))
-                .credentials(TestSecurityProvider.CREDENTIAL)
-                .build();
-        
-        HttpToolResponse response = HttpTool.httpGet(client, URI.create(getBaseUri(server) + "/v1/server/user"),
-                ImmutableMap.<String, String>of());
-        HttpTestUtils.assertHealthyStatusCode(response.getResponseCode());
-        return response.getContentAsString();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceTest.java
deleted file mode 100644
index ca5d860..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerResourceTest.java
+++ /dev/null
@@ -1,176 +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.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableSet;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-
-import brooklyn.BrooklynVersion;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.entity.basic.EmptySoftwareProcess;
-import brooklyn.entity.basic.EmptySoftwareProcessDriver;
-import brooklyn.entity.basic.EmptySoftwareProcessImpl;
-import brooklyn.entity.proxying.ImplementedBy;
-import brooklyn.management.ManagementContext;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.rest.domain.HighAvailabilitySummary;
-import brooklyn.rest.domain.VersionSummary;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.test.Asserts;
-import brooklyn.util.exceptions.Exceptions;
-
-@Test(singleThreaded = true)
-public class ServerResourceTest extends BrooklynRestResourceTest {
-
-    private static final Logger log = LoggerFactory.getLogger(ServerResourceTest.class);
-    
-    @Test
-    public void testGetVersion() throws Exception {
-        VersionSummary version = client().resource("/v1/server/version").get(VersionSummary.class);
-        assertEquals(version.getVersion(), BrooklynVersion.get());
-    }
-
-    @Test
-    public void testGetStatus() throws Exception {
-        String status = client().resource("/v1/server/status").get(String.class);
-        assertEquals(status, "MASTER");
-    }
-
-    @Test
-    public void testGetHighAvailability() throws Exception {
-        // Note by default management context from super is started without HA enabled.
-        // Therefore can only assert a minimal amount of stuff.
-        HighAvailabilitySummary summary = client().resource("/v1/server/highAvailability").get(HighAvailabilitySummary.class);
-        log.info("HA summary is: "+summary);
-        
-        String ownNodeId = getManagementContext().getManagementNodeId();
-        assertEquals(summary.getOwnId(), ownNodeId);
-        assertEquals(summary.getMasterId(), ownNodeId);
-        assertEquals(summary.getNodes().keySet(), ImmutableSet.of(ownNodeId));
-        assertEquals(summary.getNodes().get(ownNodeId).getNodeId(), ownNodeId);
-        assertEquals(summary.getNodes().get(ownNodeId).getStatus(), "MASTER");
-        assertNotNull(summary.getNodes().get(ownNodeId).getLocalTimestamp());
-        // remote will also be non-null if there is no remote backend (local is re-used)
-        assertNotNull(summary.getNodes().get(ownNodeId).getRemoteTimestamp());
-        assertEquals(summary.getNodes().get(ownNodeId).getLocalTimestamp(), summary.getNodes().get(ownNodeId).getRemoteTimestamp());
-    }
-
-    @SuppressWarnings("serial")
-    @Test
-    public void testReloadsBrooklynProperties() throws Exception {
-        final AtomicInteger reloadCount = new AtomicInteger();
-        getManagementContext().addPropertiesReloadListener(new ManagementContext.PropertiesReloadListener() {
-            @Override public void reloaded() {
-                reloadCount.incrementAndGet();
-            }});
-        client().resource("/v1/server/properties/reload").post();
-        assertEquals(reloadCount.get(), 1);
-    }
-
-    @Test
-    void testGetConfig() throws Exception {
-        ((ManagementContextInternal)getManagementContext()).getBrooklynProperties().put("foo.bar.baz", "quux");
-        try {
-            assertEquals(client().resource("/v1/server/config/foo.bar.baz").get(String.class), "quux");
-        } finally {
-            ((ManagementContextInternal)getManagementContext()).getBrooklynProperties().remove("foo.bar.baz");
-        }
-    }
-
-    @Test
-    void testGetMissingConfigThrowsException() throws Exception {
-        final String key = "foo.bar.baz";
-        BrooklynProperties properties = ((ManagementContextInternal)getManagementContext()).getBrooklynProperties();
-        Object existingValue = null;
-        boolean keyAlreadyPresent = false;
-        String response = null;
-        if (properties.containsKey(key)) {
-            existingValue = properties.remove(key);
-            keyAlreadyPresent = true;
-        }
-        try {
-            response = client().resource("/v1/server/config/" + key).get(String.class);
-            Asserts.fail("Expected call to /v1/server/config/" + key + " to fail with status 404, instead server returned " + response);
-        } catch (UniformInterfaceException e) {
-            assertEquals(e.getResponse().getStatus(), 204);
-        } finally {
-            if (keyAlreadyPresent) {
-                properties.put(key, existingValue);
-            }
-        }
-    }
-
-    // Alternatively could reuse a blocking location, see brooklyn.entity.basic.SoftwareProcessEntityTest.ReleaseLatchLocation
-    @ImplementedBy(StopLatchEntityImpl.class)
-    public interface StopLatchEntity extends EmptySoftwareProcess {
-        public void unblock();
-        public boolean isBlocked();
-    }
-
-    public static class StopLatchEntityImpl extends EmptySoftwareProcessImpl implements StopLatchEntity {
-        private CountDownLatch lock = new CountDownLatch(1);
-        private volatile boolean isBlocked;
-
-        @Override
-        public void unblock() {
-            lock.countDown();
-        }
-
-        @Override
-        protected void postStop() {
-            super.preStop();
-            try {
-                isBlocked = true;
-                lock.await();
-                isBlocked = false;
-            } catch (InterruptedException e) {
-                throw Exceptions.propagate(e);
-            }
-        }
-
-        @Override
-        public Class<?> getDriverInterface() {
-            return EmptySoftwareProcessDriver.class;
-        }
-
-        @Override
-        public boolean isBlocked() {
-            return isBlocked;
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
deleted file mode 100644
index 061599e..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/ServerShutdownTest.java
+++ /dev/null
@@ -1,187 +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.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-
-import brooklyn.entity.basic.Attributes;
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.basic.Lifecycle;
-import brooklyn.entity.drivers.BasicEntityDriverManager;
-import brooklyn.entity.drivers.ReflectiveEntityDriverFactory;
-import brooklyn.entity.proxying.EntitySpec;
-import brooklyn.entity.trait.Startable;
-import brooklyn.management.EntityManager;
-import brooklyn.management.Task;
-import brooklyn.rest.resources.ServerResourceTest.StopLatchEntity;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.test.Asserts;
-import brooklyn.test.EntityTestUtils;
-import brooklyn.test.entity.TestApplication;
-import brooklyn.util.exceptions.Exceptions;
-
-public class ServerShutdownTest extends BrooklynRestResourceTest {
-    private static final Logger log = LoggerFactory.getLogger(ServerResourceTest.class);
-
-    // Need to initialise the ManagementContext before each test as it is destroyed.
-    @Override
-    @BeforeClass(alwaysRun = true)
-    public void setUp() throws Exception {
-    }
-
-    @Override
-    @AfterClass(alwaysRun = true)
-    public void tearDown() throws Exception {
-    }
-
-    @Override
-    @BeforeMethod(alwaysRun = true)
-    public void setUpMethod() {
-        setUpJersey();
-        super.setUpMethod();
-    }
-
-    @AfterMethod(alwaysRun = true)
-    public void tearDownMethod() {
-        tearDownJersey();
-        destroyManagementContext();
-    }
-
-    @Test
-    public void testShutdown() throws Exception {
-        assertTrue(getManagementContext().isRunning());
-        assertFalse(shutdownListener.isRequested());
-
-        MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
-        formData.add("requestTimeout", "0");
-        formData.add("delayForHttpReturn", "0");
-        client().resource("/v1/server/shutdown").entity(formData).post();
-
-        Asserts.succeedsEventually(new Runnable() {
-            @Override
-            public void run() {
-                assertTrue(shutdownListener.isRequested());
-            }
-        });
-        Asserts.succeedsEventually(new Runnable() {
-            @Override public void run() {
-                assertFalse(getManagementContext().isRunning());
-            }});
-    }
-
-    @Test
-    public void testStopAppThenShutdownAndStopAppsWaitsForFirstStop() throws InterruptedException {
-        ReflectiveEntityDriverFactory f = ((BasicEntityDriverManager)getManagementContext().getEntityDriverManager()).getReflectiveDriverFactory();
-        f.addClassFullNameMapping("brooklyn.entity.basic.EmptySoftwareProcessDriver", "brooklyn.rest.resources.ServerResourceTest$EmptySoftwareProcessTestDriver");
-
-        // Second stop on SoftwareProcess could return early, while the first stop is still in progress
-        // This causes the app to shutdown prematurely, leaking machines.
-        EntityManager emgr = getManagementContext().getEntityManager();
-        EntitySpec<TestApplication> appSpec = EntitySpec.create(TestApplication.class);
-        TestApplication app = emgr.createEntity(appSpec);
-        emgr.manage(app);
-        EntitySpec<StopLatchEntity> latchEntitySpec = EntitySpec.create(StopLatchEntity.class);
-        final StopLatchEntity entity = app.createAndManageChild(latchEntitySpec);
-        app.start(ImmutableSet.of(app.newLocalhostProvisioningLocation()));
-        EntityTestUtils.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING);
-
-        try {
-            final Task<Void> firstStop = app.invoke(Startable.STOP, ImmutableMap.<String, Object>of());
-            Asserts.succeedsEventually(new Runnable() {
-                @Override
-                public void run() {
-                    assertTrue(entity.isBlocked());
-                }
-            });
-
-            final AtomicReference<Exception> shutdownError = new AtomicReference<>();
-            // Can't use ExecutionContext as it will be stopped on shutdown
-            Thread shutdownThread = new Thread() {
-                @Override
-                public void run() {
-                    try {
-                        MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
-                        formData.add("stopAppsFirst", "true");
-                        formData.add("shutdownTimeout", "0");
-                        formData.add("requestTimeout", "0");
-                        formData.add("delayForHttpReturn", "0");
-                        client().resource("/v1/server/shutdown").entity(formData).post();
-                    } catch (Exception e) {
-                        log.error("Shutdown request error", e);
-                        shutdownError.set(e);
-                        throw Exceptions.propagate(e);
-                    }
-                }
-            };
-            shutdownThread.start();
-
-            //shutdown must wait until the first stop completes (or time out)
-            Asserts.succeedsContinually(new Runnable() {
-                @Override
-                public void run() {
-                    assertFalse(firstStop.isDone());
-                    assertEquals(getManagementContext().getApplications().size(), 1);
-                    assertFalse(shutdownListener.isRequested());
-                }
-            });
-
-            // NOTE test is not fully deterministic. Depending on thread scheduling this will
-            // execute before or after ServerResource.shutdown does the app stop loop. This
-            // means that the shutdown code might not see the app at all. In any case though
-            // the test must succeed.
-            entity.unblock();
-
-            Asserts.succeedsEventually(new Runnable() {
-                @Override
-                public void run() {
-                    assertTrue(firstStop.isDone());
-                    assertTrue(shutdownListener.isRequested());
-                    assertFalse(getManagementContext().isRunning());
-                }
-            });
-
-            shutdownThread.join();
-            assertNull(shutdownError.get(), "Shutdown request error, logged above");
-        } finally {
-            // Be sure we always unblock entity stop even in the case of an exception.
-            // In the success path the entity is already unblocked above.
-            entity.unblock();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/UsageResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/UsageResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/UsageResourceTest.java
deleted file mode 100644
index 533b220..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/UsageResourceTest.java
+++ /dev/null
@@ -1,447 +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.util.Arrays;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-
-import javax.ws.rs.core.Response;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import brooklyn.entity.basic.ApplicationBuilder;
-import brooklyn.entity.basic.SoftwareProcessEntityTest;
-import brooklyn.location.Location;
-import brooklyn.location.LocationSpec;
-import brooklyn.location.NoMachinesAvailableException;
-import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
-import brooklyn.location.basic.SshMachineLocation;
-import brooklyn.management.internal.LocalUsageManager;
-import brooklyn.management.internal.ManagementContextInternal;
-import brooklyn.rest.domain.ApplicationSpec;
-import brooklyn.rest.domain.EntitySpec;
-import brooklyn.rest.domain.Status;
-import brooklyn.rest.domain.TaskSummary;
-import brooklyn.rest.domain.UsageStatistic;
-import brooklyn.rest.domain.UsageStatistics;
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
-import brooklyn.test.entity.TestApplication;
-import brooklyn.util.repeat.Repeater;
-import brooklyn.util.time.Time;
-
-import com.google.common.collect.ImmutableList;
-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;
-
-public class UsageResourceTest extends BrooklynRestResourceTest {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(UsageResourceTest.class);
-
-    private static final long TIMEOUT_MS = 10*1000;
-    
-    private Calendar testStartTime;
-    
-    private final ApplicationSpec simpleSpec = ApplicationSpec.builder().name("simple-app").
-            entities(ImmutableSet.of(new EntitySpec("simple-ent", RestMockSimpleEntity.class.getName()))).
-            locations(ImmutableSet.of("localhost")).
-            build();
-
-    @BeforeMethod(alwaysRun=true)
-    public void setUpMethod() {
-        ((ManagementContextInternal)getManagementContext()).getStorage().remove(LocalUsageManager.APPLICATION_USAGE_KEY);
-        ((ManagementContextInternal)getManagementContext()).getStorage().remove(LocalUsageManager.LOCATION_USAGE_KEY);
-        testStartTime = new GregorianCalendar();
-    }
-
-    @Test
-    public void testListApplicationUsages() throws Exception {
-        // Create an app
-        Calendar preStart = new GregorianCalendar();
-        String appId = createApp(simpleSpec);
-        Calendar postStart = new GregorianCalendar();
-        
-        // We will retrieve usage from one millisecond after start; this guarantees to not be  
-        // told about both STARTING+RUNNING, which could otherwise happen if they are in the 
-        // same milliscond.
-        Calendar afterPostStart = Time.newCalendarFromMillisSinceEpochUtc(postStart.getTime().getTime()+1);
-        
-        // Check that app's usage is returned
-        ClientResponse response = client().resource("/v1/usage/applications").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        Iterable<UsageStatistics> usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        UsageStatistics usage = Iterables.getOnlyElement(usages);
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING), roundDown(preStart), postStart);
-
-        // check app ignored if endCalendar before app started
-        response = client().resource("/v1/usage/applications?start="+0+"&end="+(preStart.getTime().getTime()-1)).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        assertTrue(Iterables.isEmpty(usages), "usages="+usages);
-        
-        // Wait, so that definitely asking about things that have happened (not things in the future, 
-        // or events that are happening this exact same millisecond)
-        waitForFuture(afterPostStart.getTime().getTime());
-
-        // Check app start + end date truncated, even if running for longer (i.e. only tell us about this time window).
-        // Note that start==end means we get a snapshot of the apps in use at that exact time.
-        //
-        // The start/end times in UsageStatistic are in String format, and are rounded down to the nearest second.
-        // The comparison does use the milliseconds passed in the REST call though.
-        // The rounding down result should be the same as roundDown(afterPostStart), because that is the time-window
-        // we asked for.
-        response = client().resource("/v1/usage/applications?start="+afterPostStart.getTime().getTime()+"&end="+afterPostStart.getTime().getTime()).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        usage = Iterables.getOnlyElement(usages);
-        assertAppUsage(usage, appId, ImmutableList.of(Status.RUNNING), roundDown(preStart), postStart);
-        assertAppUsageTimesTruncated(usage, roundDown(afterPostStart), roundDown(afterPostStart));
-
-        // Delete the app
-        Calendar preDelete = new GregorianCalendar();
-        deleteApp(appId);
-        Calendar postDelete = new GregorianCalendar();
-
-        // Deleted app still returned, if in time range
-        response = client().resource("/v1/usage/applications").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        usage = Iterables.getOnlyElement(usages);
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING, Status.DESTROYED), roundDown(preStart), postDelete);
-        assertAppUsage(ImmutableList.copyOf(usage.getStatistics()).subList(2, 3), appId, ImmutableList.of(Status.DESTROYED), roundDown(preDelete), postDelete);
-
-        long afterPostDelete = postDelete.getTime().getTime()+1;
-        waitForFuture(afterPostDelete);
-        
-        response = client().resource("/v1/usage/applications?start=" + afterPostDelete).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        assertTrue(Iterables.isEmpty(usages), "usages="+usages);
-    }
-
-    @Test
-    public void testGetApplicationUsagesForNonExistantApp() throws Exception {
-        ClientResponse response = client().resource("/v1/usage/applications/wrongid").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
-    }
-    
-    @Test
-    public void testGetApplicationUsage() throws Exception {
-        // Create an app
-        Calendar preStart = new GregorianCalendar();
-        String appId = createApp(simpleSpec);
-        Calendar postStart = new GregorianCalendar();
-        
-        // Normal request returns all
-        ClientResponse response = client().resource("/v1/usage/applications/" + appId).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        UsageStatistics usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING), roundDown(preStart), postStart);
-
-        // Time-constrained requests
-        response = client().resource("/v1/usage/applications/" + appId + "?start=1970-01-01T00:00:00-0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING), roundDown(preStart), postStart);
-        
-        response = client().resource("/v1/usage/applications/" + appId + "?start=9999-01-01T00:00:00+0100").get(ClientResponse.class);
-        assertTrue(response.getStatus() >= 400, "end defaults to NOW, so future start should fail, instead got code "+response.getStatus());
-        
-        response = client().resource("/v1/usage/applications/" + appId + "?start=9999-01-01T00:00:00%2B0100&end=9999-01-02T00:00:00%2B0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertTrue(usage.getStatistics().isEmpty());
-
-        response = client().resource("/v1/usage/applications/" + appId + "?end=9999-01-01T00:00:00+0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING), roundDown(preStart), postStart);
-
-        response = client().resource("/v1/usage/applications/" + appId + "?start=9999-01-01T00:00:00+0100&end=9999-02-01T00:00:00+0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertTrue(usage.getStatistics().isEmpty());
-
-        response = client().resource("/v1/usage/applications/" + appId + "?start=1970-01-01T00:00:00-0100&end=9999-01-01T00:00:00+0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING), roundDown(preStart), postStart);
-        
-        response = client().resource("/v1/usage/applications/" + appId + "?end=1970-01-01T00:00:00-0100").get(ClientResponse.class);
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertTrue(usage.getStatistics().isEmpty());
-        
-        // Delete the app
-        Calendar preDelete = new GregorianCalendar();
-        deleteApp(appId);
-        Calendar postDelete = new GregorianCalendar();
-
-        // Deleted app still returned, if in time range
-        response = client().resource("/v1/usage/applications/" + appId).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertAppUsage(usage, appId, ImmutableList.of(Status.STARTING, Status.RUNNING, Status.DESTROYED), roundDown(preStart), postDelete);
-        assertAppUsage(ImmutableList.copyOf(usage.getStatistics()).subList(2, 3), appId, ImmutableList.of(Status.DESTROYED), roundDown(preDelete), postDelete);
-
-        // Deleted app not returned if terminated before time range begins
-        long afterPostDelete = postDelete.getTime().getTime()+1;
-        waitForFuture(afterPostDelete);
-        response = client().resource("/v1/usage/applications/" + appId +"?start=" + afterPostDelete).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertTrue(usage.getStatistics().isEmpty(), "usages="+usage);
-    }
-
-    @Test
-    public void testGetMachineUsagesForNonExistantMachine() throws Exception {
-        ClientResponse response = client().resource("/v1/usage/machines/wrongid").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
-    }
-
-    @Test
-    public void testGetMachineUsagesInitiallyEmpty() throws Exception {
-        // All machines: empty
-        ClientResponse response = client().resource("/v1/usage/machines").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        Iterable<UsageStatistics> usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        assertTrue(Iterables.isEmpty(usages));
-        
-        // Specific machine that does not exist: get 404
-        response = client().resource("/v1/usage/machines/machineIdThatDoesNotExist").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
-    }
-
-    @Test
-    public void testListAndGetMachineUsage() throws Exception {
-        Location location = getManagementContext().getLocationManager().createLocation(LocationSpec.create(DynamicLocalhostMachineProvisioningLocation.class));
-        TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class, getManagementContext());
-        SoftwareProcessEntityTest.MyService entity = app.createAndManageChild(brooklyn.entity.proxying.EntitySpec.create(SoftwareProcessEntityTest.MyService.class));
-        
-        Calendar preStart = new GregorianCalendar();
-        app.start(ImmutableList.of(location));
-        Calendar postStart = new GregorianCalendar();
-        Location machine = Iterables.getOnlyElement(entity.getLocations());
-
-        // All machines
-        ClientResponse response = client().resource("/v1/usage/machines").get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        Iterable<UsageStatistics> usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        UsageStatistics usage = Iterables.getOnlyElement(usages);
-        assertMachineUsage(usage, app.getId(), machine.getId(), ImmutableList.of(Status.ACCEPTED), roundDown(preStart), postStart);
-
-        // Specific machine
-        response = client().resource("/v1/usage/machines/"+machine.getId()).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usage = response.getEntity(new GenericType<UsageStatistics>() {});
-        assertMachineUsage(usage, app.getId(), machine.getId(), ImmutableList.of(Status.ACCEPTED), roundDown(preStart), postStart);
-    }
-
-    @Test
-    public void testListMachinesUsageForApp() throws Exception {
-        Location location = getManagementContext().getLocationManager().createLocation(LocationSpec.create(DynamicLocalhostMachineProvisioningLocation.class));
-        TestApplication app = ApplicationBuilder.newManagedApp(TestApplication.class, getManagementContext());
-        SoftwareProcessEntityTest.MyService entity = app.createAndManageChild(brooklyn.entity.proxying.EntitySpec.create(SoftwareProcessEntityTest.MyService.class));
-        String appId = app.getId();
-        
-        Calendar preStart = new GregorianCalendar();
-        app.start(ImmutableList.of(location));
-        Calendar postStart = new GregorianCalendar();
-        Location machine = Iterables.getOnlyElement(entity.getLocations());
-
-        // For running machine
-        ClientResponse response = client().resource("/v1/usage/machines?application="+appId).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        Iterable<UsageStatistics> usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        UsageStatistics usage = Iterables.getOnlyElement(usages);
-        assertMachineUsage(usage, app.getId(), machine.getId(), ImmutableList.of(Status.ACCEPTED), roundDown(preStart), postStart);
-        
-        // Stop the machine
-        Calendar preStop = new GregorianCalendar();
-        app.stop();
-        Calendar postStop = new GregorianCalendar();
-        
-        // Deleted machine still returned, if in time range
-        response = client().resource("/v1/usage/machines?application=" + appId).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        usage = Iterables.getOnlyElement(usages);
-        assertMachineUsage(usage, app.getId(), machine.getId(), ImmutableList.of(Status.ACCEPTED, Status.DESTROYED), roundDown(preStart), postStop);
-        assertMachineUsage(ImmutableList.copyOf(usage.getStatistics()).subList(1,2), appId, machine.getId(), ImmutableList.of(Status.DESTROYED), roundDown(preStop), postStop);
-
-        // Terminated machines ignored if terminated since start-time
-        long futureTime = postStop.getTime().getTime()+1;
-        waitForFuture(futureTime);
-        response = client().resource("/v1/usage/applications?start=" + futureTime).get(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        usages = response.getEntity(new GenericType<List<UsageStatistics>>() {});
-        assertTrue(Iterables.isEmpty(usages), "usages="+usages);
-    }
-
-    private String createApp(ApplicationSpec spec) {
-        ClientResponse response = clientDeploy(spec);
-        assertEquals(response.getStatus(), Response.Status.CREATED.getStatusCode());
-        TaskSummary createTask = response.getEntity(TaskSummary.class);
-        waitForTask(createTask.getId());
-        return createTask.getEntityId();
-    }
-    
-    private void deleteApp(String appId) {
-        ClientResponse response = client().resource("/v1/applications/"+appId)
-                .delete(ClientResponse.class);
-        assertEquals(response.getStatus(), Response.Status.ACCEPTED.getStatusCode());
-        TaskSummary deletionTask = response.getEntity(TaskSummary.class);
-        waitForTask(deletionTask.getId());
-    }
-    
-    private void assertCalendarOrders(Object context, Calendar... Calendars) {
-        if (Calendars.length <= 1) return;
-        
-        long[] times = new long[Calendars.length];
-        for (int i = 0; i < times.length; i++) {
-            times[i] = millisSinceStart(Calendars[i]);
-        }
-        String err = "context="+context+"; Calendars="+Arrays.toString(Calendars) + "; CalendarsSanitized="+Arrays.toString(times);
-        
-        Calendar Calendar = Calendars[0];
-        for (int i = 1; i < Calendars.length; i++) {
-            assertTrue(Calendar.getTime().getTime() <= Calendars[i].getTime().getTime(), err);
-        }
-    }
-    
-    private void waitForTask(final String taskId) {
-        boolean success = Repeater.create()
-                .repeat(new Runnable() { public void run() {}})
-                .until(new Callable<Boolean>() {
-                    @Override public Boolean call() {
-                        ClientResponse response = client().resource("/v1/activities/"+taskId).get(ClientResponse.class);
-                        if (response.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
-                            return true;
-                        }
-                        TaskSummary summary = response.getEntity(TaskSummary.class);
-                        return summary != null && summary.getEndTimeUtc() != null;
-                    }})
-                .every(10L, TimeUnit.MILLISECONDS)
-                .limitTimeTo(TIMEOUT_MS, TimeUnit.MILLISECONDS)
-                .run();
-        assertTrue(success, "task "+taskId+" not finished");
-    }
-
-    private long millisSinceStart(Calendar time) {
-        return time.getTime().getTime() - testStartTime.getTime().getTime();
-    }
-    
-    private Calendar roundDown(Calendar calendar) {
-        long time = calendar.getTime().getTime();
-        long timeDown = ((long)(time / 1000)) * 1000;
-        return Time.newCalendarFromMillisSinceEpochUtc(timeDown);
-    }
-    
-    @SuppressWarnings("unused")
-    private Calendar roundUp(Calendar calendar) {
-        long time = calendar.getTime().getTime();
-        long timeDown = ((long)(time / 1000)) * 1000;
-        long timeUp = (time == timeDown) ? time : timeDown + 1000;
-        return Time.newCalendarFromMillisSinceEpochUtc(timeUp);
-    }
-
-    private void assertMachineUsage(UsageStatistics usage, String appId, String machineId, List<Status> states, Calendar pre, Calendar post) throws Exception {
-        assertUsage(usage.getStatistics(), appId, machineId, states, pre, post, false);
-    }
-    
-    private void assertMachineUsage(Iterable<UsageStatistic> usages, String appId, String machineId, List<Status> states, Calendar pre, Calendar post) throws Exception {
-        assertUsage(usages, appId, machineId, states, pre, post, false);
-    }
-    
-    private void assertAppUsage(UsageStatistics usage, String appId, List<Status> states, Calendar pre, Calendar post) throws Exception {
-        assertUsage(usage.getStatistics(), appId, appId, states, pre, post, false);
-    }
-    
-    private void assertAppUsage(Iterable<UsageStatistic> usages, String appId, List<Status> states, Calendar pre, Calendar post) throws Exception {
-        assertUsage(usages, appId, appId, states, pre, post, false);
-    }
-
-    private void assertUsage(Iterable<UsageStatistic> usages, String appId, String id, List<Status> states, Calendar pre, Calendar post, boolean allowGaps) throws Exception {
-        String errMsg = "usages="+usages;
-        Calendar now = new GregorianCalendar();
-        Calendar lowerBound = pre;
-        Calendar strictStart = null;
-        
-        assertEquals(Iterables.size(usages), states.size(), errMsg);
-        for (int i = 0; i < Iterables.size(usages); i++) {
-            UsageStatistic usage = Iterables.get(usages, i);
-            Calendar usageStart = Time.parseCalendar(usage.getStart());
-            Calendar usageEnd = Time.parseCalendar(usage.getEnd());
-            assertEquals(usage.getId(), id, errMsg);
-            assertEquals(usage.getApplicationId(), appId, errMsg);
-            assertEquals(usage.getStatus(), states.get(i), errMsg);
-            assertCalendarOrders(usages, lowerBound, usageStart, post);
-            assertCalendarOrders(usages, usageEnd, now);
-            if (strictStart != null) {
-                assertEquals(usageStart, strictStart, errMsg);
-            }
-            if (!allowGaps) {
-                strictStart = usageEnd;
-            }
-            lowerBound = usageEnd;
-        }
-    }
-
-    private void assertAppUsageTimesTruncated(UsageStatistics usages, Calendar strictStart, Calendar strictEnd) throws Exception {
-        String errMsg = "strictStart="+Time.makeDateString(strictStart)+"; strictEnd="+Time.makeDateString(strictEnd)+";usages="+usages;
-        Calendar usageStart = Time.parseCalendar(Iterables.getFirst(usages.getStatistics(), null).getStart());
-        Calendar usageEnd = Time.parseCalendar(Iterables.getLast(usages.getStatistics()).getStart());
-        // time zones might be different - so must convert to date
-        assertEquals(usageStart.getTime(), strictStart.getTime(), "usageStart="+Time.makeDateString(usageStart)+";"+errMsg);
-        assertEquals(usageEnd.getTime(), strictEnd.getTime(), errMsg);
-    }
-    
-    public static class DynamicLocalhostMachineProvisioningLocation extends LocalhostMachineProvisioningLocation {
-        private static final long serialVersionUID = 2163357613938738967L;
-
-        @Override
-        public SshMachineLocation obtain(Map<?, ?> flags) throws NoMachinesAvailableException {
-            return super.obtain(flags);
-        }
-        
-        @Override
-        public void release(SshMachineLocation machine) {
-            super.release(machine);
-            super.machines.remove(machine);
-            getManagementContext().getLocationManager().unmanage(machine);
-        }
-    }
-
-    private void waitForFuture(long futureTime) throws InterruptedException {
-        long now;
-        while ((now = System.currentTimeMillis()) < futureTime) {
-            Thread.sleep(futureTime - now);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/resources/VersionResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/VersionResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/VersionResourceTest.java
deleted file mode 100644
index fb8ac95..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/VersionResourceTest.java
+++ /dev/null
@@ -1,50 +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 javax.ws.rs.core.Response;
-
-import org.testng.annotations.Test;
-
-import brooklyn.rest.testing.BrooklynRestResourceTest;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-public class VersionResourceTest extends BrooklynRestResourceTest {
-
-    @Test
-    public void testGetVersion() {
-        ClientResponse response = client().resource("/v1/version")
-                .get(ClientResponse.class);
-
-        assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
-        String version = response.getEntity(String.class);
-
-        assertTrue(version.matches("^\\d+\\.\\d+\\.\\d+.*"));
-    }
-
-    @SuppressWarnings("deprecation")
-    @Override
-    protected void addBrooklynResources() {
-        addResource(new VersionResource());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a9e5ca55/usage/rest-server/src/test/java/brooklyn/rest/security/PasswordHasherTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/security/PasswordHasherTest.java b/usage/rest-server/src/test/java/brooklyn/rest/security/PasswordHasherTest.java
deleted file mode 100644
index 7537a78..0000000
--- a/usage/rest-server/src/test/java/brooklyn/rest/security/PasswordHasherTest.java
+++ /dev/null
@@ -1,37 +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.security;
-
-import static org.testng.Assert.assertEquals;
-
-import org.testng.annotations.Test;
-
-public class PasswordHasherTest {
-
-    @Test
-    public void testHashSha256() throws Exception {
-        // Note: expected hash values generated externally:
-        // echo -n mysaltmypassword | openssl dgst -sha256
-
-        assertEquals(PasswordHasher.sha256("mysalt", "mypassword"), "d02878b06efa88579cd84d9e50b211c0a7caa92cf243bad1622c66081f7e2692");
-        assertEquals(PasswordHasher.sha256("", "mypassword"), "89e01536ac207279409d4de1e5253e01f4a1769e696db0d6062ca9b8f56767c8");
-        assertEquals(PasswordHasher.sha256(null, "mypassword"), "89e01536ac207279409d4de1e5253e01f4a1769e696db0d6062ca9b8f56767c8");
-    }
-
-}