You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/10/25 23:48:24 UTC
[2/7] incubator-brooklyn git commit: Convert groovy tests to java
Convert groovy tests to java
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f69ade37
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f69ade37
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f69ade37
Branch: refs/heads/master
Commit: f69ade37a641e1b1997b71986e8a5731b1dccc59
Parents: 24b0f3e
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Thu Oct 22 15:48:07 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Oct 22 16:33:08 2015 +0300
----------------------------------------------------------------------
...stomAggregatingEnricherDeprecatedTest.groovy | 368 -----------------
...CustomAggregatingEnricherDeprecatedTest.java | 405 +++++++++++++++++++
.../TransformingEnricherDeprecatedTest.groovy | 83 ----
.../TransformingEnricherDeprecatedTest.java | 92 +++++
.../util/core/internal/RepeaterTest.groovy | 256 ------------
.../util/core/internal/RepeaterTest.java | 251 ++++++++++++
.../demo/WebClusterDatabaseExampleGroovy.groovy | 92 -----
locations/jclouds/pom.xml | 21 -
.../AwsEc2LocationWindowsLiveTest.groovy | 94 -----
.../provider/AwsEc2LocationWindowsLiveTest.java | 95 +++++
.../provider/CarrenzaLocationLiveTest.groovy | 132 ------
.../provider/CarrenzaLocationLiveTest.java | 135 +++++++
.../provider/GoGridLocationLiveTest.groovy | 52 ---
.../provider/GoGridLocationLiveTest.java | 52 +++
policy/pom.xml | 25 +-
.../policy/enricher/DeltaEnrichersTests.groovy | 123 ------
.../policy/enricher/DeltaEnrichersTests.java | 144 +++++++
.../enricher/RollingMeanEnricherTest.groovy | 105 -----
.../enricher/RollingMeanEnricherTest.java | 106 +++++
.../RollingTimeWindowMeanEnricherTest.groovy | 155 -------
.../RollingTimeWindowMeanEnricherTest.java | 156 +++++++
.../brooklyn/entity/database/Database.groovy | 53 ---
.../brooklyn/entity/database/Database.java | 42 ++
.../apache/brooklyn/entity/database/Schema.java | 37 ++
.../Infinispan5ServerIntegrationTest.groovy | 103 -----
.../Infinispan5ServerIntegrationTest.java | 107 +++++
software/webapp/pom.xml | 18 -
.../webapp/WebAppLiveIntegrationTest.groovy | 101 -----
.../webapp/WebAppLiveIntegrationTest.java | 91 +++++
usage/cli/pom.xml | 12 -
30 files changed, 1715 insertions(+), 1791 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
deleted file mode 100644
index 72acb74..0000000
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.groovy
+++ /dev/null
@@ -1,368 +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 org.apache.brooklyn.enricher.stock
-
-import static org.testng.Assert.assertEquals
-
-import org.apache.brooklyn.api.entity.EntitySpec
-import org.apache.brooklyn.api.sensor.AttributeSensor
-import org.apache.brooklyn.core.test.entity.TestApplication
-import org.apache.brooklyn.core.test.entity.TestEntity
-import org.apache.brooklyn.enricher.stock.CustomAggregatingEnricher;
-import org.apache.brooklyn.core.entity.Entities
-import org.apache.brooklyn.entity.group.BasicGroup
-import org.apache.brooklyn.test.Asserts;
-import org.apache.brooklyn.core.location.SimulatedLocation
-import org.apache.brooklyn.core.sensor.BasicAttributeSensor
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import com.google.common.base.Function
-
-class CustomAggregatingEnricherDeprecatedTest {
-
- public static final Logger log = LoggerFactory.getLogger(CustomAggregatingEnricherDeprecatedTest.class);
-
- private static final long TIMEOUT_MS = 10*1000
- private static final long SHORT_WAIT_MS = 250
-
- TestApplication app
- TestEntity producer
-
- AttributeSensor<Integer> intSensor
- AttributeSensor<Integer> target
-
- @BeforeMethod(alwaysRun=true)
- public void setUp() {
- app = TestApplication.Factory.newManagedInstanceForTests();
- producer = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- intSensor = new BasicAttributeSensor<Integer>(Integer.class, "int sensor")
- target = new BasicAttributeSensor<Integer>(Long.class, "target sensor")
-
- app.start([new SimulatedLocation()])
- }
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() {
- if (app!=null) Entities.destroyAll(app.getManagementContext());
- }
-
- @Test
- public void testEnrichersWithNoProducers() {
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher([:], intSensor, target, 11, 40)
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), 40
- }
-
- @Test
- public void testSummingEnricherWhenNoSensorValuesYet() {
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, producers:[producer], 11, 40)
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), 11
- }
-
- @Test
- public void testSingleProducerSum() {
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, null, null, producers:[producer])
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), null
- cae.onEvent(intSensor.newEvent(producer, 1))
- assertEquals cae.getAggregate(), 1
- }
-
- @Test
- public void testSummingEnricherWhenNoAndNullSensorValue() {
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, null, null, producers:[producer])
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), null
- cae.onEvent(intSensor.newEvent(producer, null))
- assertEquals cae.getAggregate(), null
- }
-
- @Test
- public void testSummingEnricherWhenNoAndNullSensorValueExplicitValue() {
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, 3 /** if null */, 5 /** if none */, producers:[producer])
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), 3
- cae.onEvent(intSensor.newEvent(producer, null))
- assertEquals cae.getAggregate(), 3
- cae.onEvent(intSensor.newEvent(producer, 1))
- assertEquals cae.getAggregate(), 1
- cae.onEvent(intSensor.newEvent(producer, 7))
- assertEquals cae.getAggregate(), 7
- }
-
- @Test
- public void testMultipleProducersSum() {
- List<TestEntity> producers = [
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class))
- ]
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, null, null, producers:producers)
-
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), null
- cae.onEvent(intSensor.newEvent(producers[2], 1))
- assertEquals cae.getAggregate(), 1
- cae.onEvent(intSensor.newEvent(producers[0], 3))
- assertEquals cae.getAggregate(), 4
- cae.onEvent(intSensor.newEvent(producers[1], 3))
- assertEquals cae.getAggregate(), 7
-
- }
-
- @Test
- public void testAveragingEnricherWhenNoAndNullSensorValues() {
- List<TestEntity> producers = [
- app.createAndManageChild(EntitySpec.create(TestEntity.class))
- ]
- CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
- intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null, producers:producers)
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), null
- cae.onEvent(intSensor.newEvent(producers[0], null))
- assertEquals cae.getAggregate(), null
- }
-
- @Test
- public void testAveragingEnricherWhenNoAndNullSensorValuesExplicit() {
- List<TestEntity> producers = [
- app.createAndManageChild(EntitySpec.create(TestEntity.class))
- ]
- CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
- intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5 /** if none */,
- producers:producers)
- producer.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 3d
- cae.onEvent(intSensor.newEvent(producers[0], null))
- assertEquals cae.getAggregate(), 3d
- cae.onEvent(intSensor.newEvent(producers[0], 4))
- assertEquals cae.getAggregate(), 4d
- }
-
- @Test
- public void testAveragingEnricherWhenNoSensors() {
- List<TestEntity> producers = [
- ]
- CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
- intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5 /** if none */,
- producers:producers)
- producer.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 5d
- }
-
- @Test
- public void testMultipleProducersAverage() {
- List<TestEntity> producers = [
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class))
- ]
- CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
- intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null, producers:producers)
-
- producer.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), null
- cae.onEvent(intSensor.newEvent(producers[0], 3))
- assertEquals cae.getAggregate(), 3d
-
- cae.onEvent(intSensor.newEvent(producers[1], 3))
- assertEquals cae.getAggregate(), 3d
-
- cae.onEvent(intSensor.newEvent(producers[2], 6))
- assertEquals cae.getAggregate(), 4d
-
- // change p2's value to 7.5, average increase of 0.5.
- cae.onEvent(intSensor.newEvent(producers[2], 7.5))
- assertEquals cae.getAggregate(), 4.5d
- }
-
- @Test
- public void testMultipleProducersAverageDefaultingZero() {
- List<TestEntity> producers = [
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class)),
- app.createAndManageChild(EntitySpec.create(TestEntity.class))
- ]
- CustomAggregatingEnricher<Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
- intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 0, 0, producers:producers)
-
- producer.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 0d
- cae.onEvent(intSensor.newEvent(producers[0], 3))
- assertEquals cae.getAggregate(), 1d
-
- cae.onEvent(intSensor.newEvent(producers[1], 3))
- assertEquals cae.getAggregate(), 2d
-
- cae.onEvent(intSensor.newEvent(producers[2], 6))
- assertEquals cae.getAggregate(), 4d
-
- // change p2's value to 7.5, average increase of 0.5.
- cae.onEvent(intSensor.newEvent(producers[2], 7.5))
- assertEquals cae.getAggregate(), 4.5d
- }
-
- @Test
- public void testAddingAndRemovingProducers() {
- TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
-
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(
- intSensor, target, null, null, producers:[p1])
-
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), null
-
- // Event by initial producer
- cae.onEvent(intSensor.newEvent(p1, 1))
- assertEquals cae.getAggregate(), 1
-
- // Add producer and fire event
- cae.addProducer(p2)
- cae.onEvent(intSensor.newEvent(p2, 4))
- assertEquals cae.getAggregate(), 5
-
- cae.removeProducer(p2)
- assertEquals cae.getAggregate(), 1
- }
-
- @Test
- public void testAggregatesNewMembersOfGroup() {
- try {
- BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
- TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class))
- TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class))
- log.debug("created $group and the entities it will contain $p1 $p2")
-
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, 0, 0, allMembers:true)
- group.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 0
-
- group.addMember(p1)
- p1.sensors().set(intSensor, 1)
- Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
- assertEquals cae.getAggregate(), 1
- }
-
- group.addMember(p2)
- p2.sensors().set(intSensor, 2)
- Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
- assertEquals cae.getAggregate(), 3
- }
-
- group.removeMember(p2)
- Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
- assertEquals cae.getAggregate(), 1
- }
- } catch (Exception e) {
- log.error("testAggregatesNewMembersOfGroup failed (now cleaning up): "+e)
- throw e;
- }
- }
-
- @Test(groups = "Integration")
- public void testAggregatesGroupMembersFiftyTimes() {
- for (int i=0; i<50; i++) {
- log.debug "testAggregatesNewMembersOfGroup $i"
- testAggregatesNewMembersOfGroup();
- }
- }
-
- @Test
- public void testAggregatesExistingMembersOfGroup() {
- BasicGroup group = app.addChild(EntitySpec.create(BasicGroup.class));
- TestEntity p1 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group));
- TestEntity p2 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group));
- group.addMember(p1)
- group.addMember(p2)
- p1.sensors().set(intSensor, 1)
- Entities.manage(group);
-
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, null, null, allMembers:true)
- group.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 1
-
- p2.sensors().set(intSensor, 2)
- Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
- assertEquals cae.getAggregate(), 3
- }
-
- group.removeMember(p2)
- Asserts.succeedsEventually(timeout:TIMEOUT_MS) {
- assertEquals cae.getAggregate(), 1
- }
- }
-
- @Test
- public void testAppliesFilterWhenAggregatingMembersOfGroup() {
- BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
- TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- TestEntity p3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- group.addMember(p1)
- group.addMember(p2)
- p1.sensors().set(intSensor, 1)
- p2.sensors().set(intSensor, 2)
- p3.sensors().set(intSensor, 4)
-
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newSummingEnricher(intSensor, target, null, null, allMembers:true, filter:{it == p1})
- group.enrichers().add(cae)
-
- assertEquals cae.getAggregate(), 1
-
- group.addMember(p3)
- Asserts.succeedsContinually(timeout:SHORT_WAIT_MS) {
- assertEquals cae.getAggregate(), 1
- }
- }
-
- @Test
- public void testCustomAggregatingFunction() {
- TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- Function<Collection<Integer>,Integer> aggregator = { Collection c ->
- int result = 0; c.each { result += it*it }; return result;
- } as Function
-
- CustomAggregatingEnricher<Integer> cae = CustomAggregatingEnricher.<Integer>newEnricher(
- intSensor, target, aggregator, 0, producers:[p1])
-
- producer.enrichers().add(cae)
- assertEquals cae.getAggregate(), 0
-
- // Event by producer
- cae.onEvent(intSensor.newEvent(p1, 2))
- assertEquals cae.getAggregate(), 4
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.java
new file mode 100644
index 0000000..5f3e8b5
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/CustomAggregatingEnricherDeprecatedTest.java
@@ -0,0 +1,405 @@
+/*
+ * 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 org.apache.brooklyn.enricher.stock;
+
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.location.SimulatedLocation;
+import org.apache.brooklyn.core.sensor.BasicAttributeSensor;
+import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.entity.group.BasicGroup;
+import org.apache.brooklyn.test.Asserts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+@SuppressWarnings("deprecation")
+public class CustomAggregatingEnricherDeprecatedTest {
+
+ public static final Logger log = LoggerFactory.getLogger(CustomAggregatingEnricherDeprecatedTest.class);
+
+ private static final long TIMEOUT_MS = 10*1000;
+ private static final long SHORT_WAIT_MS = 250;
+
+ TestApplication app;
+ TestEntity producer;
+ Map<String, ?> producersFlags;
+
+ AttributeSensor<Integer> intSensor = Sensors.newIntegerSensor("int sensor");
+ AttributeSensor<Double> doubleSensor = Sensors.newDoubleSensor("double sensor");
+ AttributeSensor<Integer> target = Sensors.newIntegerSensor("target sensor");
+
+ @BeforeMethod(alwaysRun=true)
+ public void setUp() {
+ app = TestApplication.Factory.newManagedInstanceForTests();
+ producer = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ producersFlags = ImmutableMap.of("producers", ImmutableList.of(producer));
+
+ app.start(ImmutableList.of(new SimulatedLocation()));
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void tearDown() {
+ if (app!=null) Entities.destroyAll(app.getManagementContext());
+ }
+
+ @Test
+ public void testEnrichersWithNoProducers() {
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(ImmutableMap.<String,Object>of(), intSensor, target, 11, 40);
+ producer.enrichers().add(cae);
+ assertEquals(cae.getAggregate(), 40);
+ }
+
+ @Test
+ public void testSummingEnricherWhenNoSensorValuesYet() {
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ producersFlags, intSensor, target, 11, 40);
+ producer.enrichers().add(cae);
+ assertEquals(cae.getAggregate(), 11);
+ }
+
+ @Test
+ public void testSingleProducerSum() {
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ producersFlags, intSensor, target, null, null);
+ producer.enrichers().add(cae);
+ Assert.assertEquals(cae.getAggregate(), null);
+ cae.onEvent(intSensor.newEvent(producer, 1));
+ assertEquals(cae.getAggregate(), 1);
+ }
+
+ @Test
+ public void testSummingEnricherWhenNoAndNullSensorValue() {
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ producersFlags, intSensor, target, null, null);
+ producer.enrichers().add(cae);
+ Assert.assertEquals(cae.getAggregate(), null);
+ cae.onEvent(intSensor.newEvent(producer, null));
+ Assert.assertEquals(cae.getAggregate(), null);
+ }
+
+ @Test
+ public void testSummingEnricherWhenNoAndNullSensorValueExplicitValue() {
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ producersFlags, intSensor, target, 3 /** if null */, 5 /** if none */);
+ producer.enrichers().add(cae);
+ assertEquals(cae.getAggregate(), 3);
+ cae.onEvent(intSensor.newEvent(producer, null));
+ assertEquals(cae.getAggregate(), 3);
+ cae.onEvent(intSensor.newEvent(producer, 1));
+ assertEquals(cae.getAggregate(), 1);
+ cae.onEvent(intSensor.newEvent(producer, 7));
+ assertEquals(cae.getAggregate(), 7);
+ }
+
+ @Test
+ public void testMultipleProducersSum() {
+ List<TestEntity> producers = ImmutableList.of(
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class))
+ );
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ ImmutableMap.of("producers", producers), intSensor, target, null, null);
+
+ producer.enrichers().add(cae);
+ Assert.assertEquals(cae.getAggregate(), null);
+ cae.onEvent(intSensor.newEvent(producers.get(2), 1));
+ assertEquals(cae.getAggregate(), 1);
+ cae.onEvent(intSensor.newEvent(producers.get(0), 3));
+ assertEquals(cae.getAggregate(), 4);
+ cae.onEvent(intSensor.newEvent(producers.get(1), 3));
+ assertEquals(cae.getAggregate(), 7);
+
+ }
+
+ @Test
+ public void testAveragingEnricherWhenNoAndNullSensorValues() {
+ List<TestEntity> producers = ImmutableList.of(
+ app.createAndManageChild(EntitySpec.create(TestEntity.class))
+ );
+ CustomAggregatingEnricher<Integer, Double> cae = CustomAggregatingEnricher.<Integer>newAveragingEnricher(
+ ImmutableMap.of("producers", producers), intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null);
+ producer.enrichers().add(cae);
+ Assert.assertEquals(cae.getAggregate(), null);
+ cae.onEvent(intSensor.newEvent(producers.get(0), null));
+ Assert.assertEquals(cae.getAggregate(), null);
+ }
+
+ @Test
+ public void testAveragingEnricherWhenNoAndNullSensorValuesExplicit() {
+ List<TestEntity> producers = ImmutableList.of(
+ app.createAndManageChild(EntitySpec.create(TestEntity.class))
+ );
+ CustomAggregatingEnricher<Integer, Double> cae = CustomAggregatingEnricher.<Integer>newAveragingEnricher(
+ ImmutableMap.of("producers", producers), intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5d /** if none */);
+ producer.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 3d);
+ cae.onEvent(intSensor.newEvent(producers.get(0), null));
+ assertEquals(cae.getAggregate(), 3d);
+ cae.onEvent(intSensor.newEvent(producers.get(0), 4));
+ assertEquals(cae.getAggregate(), 4d);
+ }
+
+ @Test
+ public void testAveragingEnricherWhenNoSensors() {
+ List<TestEntity> producers = ImmutableList.of(
+ );
+ CustomAggregatingEnricher<Integer, Double> cae = CustomAggregatingEnricher.<Integer>newAveragingEnricher(
+ ImmutableMap.of("producers", producers), intSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 3 /** if null */, 5d /** if none */);
+ producer.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 5d);
+ }
+
+ @Test
+ public void testMultipleProducersAverage() {
+ List<TestEntity> producers = ImmutableList.of(
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class))
+ );
+ CustomAggregatingEnricher<Double, Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
+ ImmutableMap.of("producers", producers),
+ doubleSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), null, null);
+
+ producer.enrichers().add(cae);
+
+ Assert.assertEquals(cae.getAggregate(), null);
+ cae.onEvent(doubleSensor.newEvent(producers.get(0), 3d));
+ assertEquals(cae.getAggregate(), 3d);
+
+ cae.onEvent(doubleSensor.newEvent(producers.get(1), 3d));
+ assertEquals(cae.getAggregate(), 3d);
+
+ cae.onEvent(doubleSensor.newEvent(producers.get(2), 6d));
+ assertEquals(cae.getAggregate(), 4d);
+
+ // change p2's value to 7.5, average increase of 0.5.
+ cae.onEvent(doubleSensor.newEvent(producers.get(2), 7.5d));
+ assertEquals(cae.getAggregate(), 4.5d);
+ }
+
+ @Test
+ public void testMultipleProducersAverageDefaultingZero() {
+ List<TestEntity> producers = ImmutableList.of(
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class)),
+ app.createAndManageChild(EntitySpec.create(TestEntity.class))
+ );
+ CustomAggregatingEnricher<Double, Double> cae = CustomAggregatingEnricher.<Double>newAveragingEnricher(
+ ImmutableMap.of("producers", producers),
+ doubleSensor, new BasicAttributeSensor<Double>(Double.class, "target sensor"), 0d, 0d);
+
+ producer.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 0d);
+ cae.onEvent(doubleSensor.newEvent(producers.get(0), 3d));
+ assertEquals(cae.getAggregate(), 1d);
+
+ cae.onEvent(doubleSensor.newEvent(producers.get(1), 3d));
+ assertEquals(cae.getAggregate(), 2d);
+
+ cae.onEvent(doubleSensor.newEvent(producers.get(2), 6d));
+ assertEquals(cae.getAggregate(), 4d);
+
+ // change p2's value to 7.5, average increase of 0.5.
+ cae.onEvent(doubleSensor.newEvent(producers.get(2), 7.5d));
+ assertEquals(cae.getAggregate(), 4.5d);
+ }
+
+ @Test
+ public void testAddingAndRemovingProducers() {
+ TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ ImmutableMap.of("producers", ImmutableList.of(p1)),
+ intSensor, target, null, null);
+
+ producer.enrichers().add(cae);
+ Assert.assertEquals(cae.getAggregate(), null);
+
+ // Event by initial producer
+ cae.onEvent(intSensor.newEvent(p1, 1));
+ assertEquals(cae.getAggregate(), 1);
+
+ // Add producer and fire event
+ cae.addProducer(p2);
+ cae.onEvent(intSensor.newEvent(p2, 4));
+ assertEquals(cae.getAggregate(), 5);
+
+ cae.removeProducer(p2);
+ assertEquals(cae.getAggregate(), 1);
+ }
+
+ @Test
+ public void testAggregatesNewMembersOfGroup() {
+ try {
+ BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
+ TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ log.debug("created $group and the entities it will contain $p1 $p2");
+
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ ImmutableMap.of("allMembers", true),
+ intSensor, target, 0, 0);
+ group.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 0);
+
+ group.addMember(p1);
+ p1.sensors().set(intSensor, 1);
+ aggregateIsEventually(cae, 1);
+
+ group.addMember(p2);
+ p2.sensors().set(intSensor, 2);
+ aggregateIsEventually(cae, 3);
+
+ group.removeMember(p2);
+ aggregateIsEventually(cae, 1);
+ } catch (Exception e) {
+ log.error("testAggregatesNewMembersOfGroup failed (now cleaning up): "+e);
+ throw e;
+ }
+ }
+
+ @Test(groups = "Integration")
+ public void testAggregatesGroupMembersFiftyTimes() {
+ for (int i=0; i<50; i++) {
+ log.debug("testAggregatesNewMembersOfGroup $i");
+ testAggregatesNewMembersOfGroup();
+ }
+ }
+
+ @Test
+ public void testAggregatesExistingMembersOfGroup() {
+ BasicGroup group = app.addChild(EntitySpec.create(BasicGroup.class));
+ TestEntity p1 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group));
+ TestEntity p2 = app.getManagementContext().getEntityManager().createEntity(EntitySpec.create(TestEntity.class).parent(group));
+ group.addMember(p1);
+ group.addMember(p2);
+ p1.sensors().set(intSensor, 1);
+ Entities.manage(group);
+
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ ImmutableMap.of("allMembers", true),
+ intSensor, target, null, null);
+ group.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 1);
+
+ p2.sensors().set(intSensor, 2);
+ aggregateIsEventually(cae, 3);
+
+ group.removeMember(p2);
+ aggregateIsEventually(cae, 1);
+ }
+
+ @Test
+ public void testAppliesFilterWhenAggregatingMembersOfGroup() {
+ BasicGroup group = app.createAndManageChild(EntitySpec.create(BasicGroup.class));
+ TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ TestEntity p2 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ TestEntity p3 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ group.addMember(p1);
+ group.addMember(p2);
+ p1.sensors().set(intSensor, 1);
+ p2.sensors().set(intSensor, 2);
+ p3.sensors().set(intSensor, 4);
+
+ final CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newSummingEnricher(
+ ImmutableMap.of("allMembers", true, "filter", Predicates.equalTo(p1)),
+ intSensor, target, null, null);
+ group.enrichers().add(cae);
+
+ assertEquals(cae.getAggregate(), 1);
+
+ group.addMember(p3);
+ Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), new Runnable() {
+ @Override
+ public void run() {
+ assertEquals(cae.getAggregate(), 1);
+ }
+ });
+ }
+
+ @Test
+ public void testCustomAggregatingFunction() {
+ TestEntity p1 = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ Function<Collection<Integer>,Integer> aggregator = new Function<Collection<Integer>, Integer>() {
+ @Override
+ public Integer apply(Collection<Integer> c) {
+ int result = 0;
+ for (Integer it : c) {
+ result += it*it;
+ }
+ return result;
+ }
+ };
+
+ CustomAggregatingEnricher<Integer, Integer> cae = CustomAggregatingEnricher.<Integer, Integer>newEnricher(
+ ImmutableMap.of("producers", ImmutableList.of(p1)),
+ intSensor, target, aggregator, 0);
+
+ producer.enrichers().add(cae);
+ assertEquals(cae.getAggregate(), 0);
+
+ // Event by producer
+ cae.onEvent(intSensor.newEvent(p1, 2));
+ assertEquals(cae.getAggregate(), 4);
+ }
+
+
+ private void assertEquals(Integer i1, int i2) {
+ Assert.assertEquals(i1, (Integer)i2);
+ }
+ private void assertEquals(Double i1, double i2) {
+ Assert.assertEquals(i1, (Double)i2);
+ }
+
+ private void aggregateIsEventually(final CustomAggregatingEnricher<Integer, Integer> cae, final int avg) {
+ ImmutableMap<String, Long> timeout = ImmutableMap.of("timeout", TIMEOUT_MS);
+
+ Asserts.succeedsEventually(timeout, new Runnable() {
+ @Override
+ public void run() {
+ assertEquals(cae.getAggregate(), avg);
+ }
+ });
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
deleted file mode 100644
index 9d4952d..0000000
--- a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.groovy
+++ /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 org.apache.brooklyn.enricher.stock
-
-import java.util.concurrent.Callable
-
-import org.apache.brooklyn.api.entity.EntitySpec
-import org.apache.brooklyn.api.sensor.AttributeSensor
-import org.apache.brooklyn.core.test.entity.TestApplication
-import org.apache.brooklyn.core.test.entity.TestEntity
-import org.apache.brooklyn.enricher.stock.SensorTransformingEnricher;
-import org.apache.brooklyn.core.entity.Entities
-import org.apache.brooklyn.core.location.SimulatedLocation
-import org.apache.brooklyn.core.sensor.BasicAttributeSensor
-import org.apache.brooklyn.test.Asserts;
-import org.apache.brooklyn.util.collections.MutableMap
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.Assert
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-public class TransformingEnricherDeprecatedTest {
-
- public static final Logger log = LoggerFactory.getLogger(TransformingEnricherDeprecatedTest.class);
-
- private static final long TIMEOUT_MS = 10*1000;
-// private static final long SHORT_WAIT_MS = 250;
-
- TestApplication app;
- TestEntity producer;
- AttributeSensor<Integer> intSensorA;
- AttributeSensor<Long> target;
-
- @BeforeMethod()
- public void before() {
- app = TestApplication.Factory.newManagedInstanceForTests();
- producer = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- intSensorA = new BasicAttributeSensor<Integer>(Integer.class, "int.sensor.a");
- target = new BasicAttributeSensor<Long>(Long.class, "long.sensor.target");
-
- app.start(Arrays.asList(new SimulatedLocation()));
- }
-
- @AfterMethod(alwaysRun=true)
- public void after() {
- if (app!=null) Entities.destroyAll(app.getManagementContext());
- }
-
- @Test
- public void testTransformingEnricher() throws InterruptedException {
- final SensorTransformingEnricher e1 = new SensorTransformingEnricher<Integer,Long>(intSensorA, target,
- { 2*it });
-
- producer.sensors().set(intSensorA, 3);
- //ensure previous values get picked up
- producer.enrichers().add(e1);
-
- Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS),
- new Callable<Object>() { public Object call() {
- Assert.assertEquals(producer.getAttribute(target), (Long)((long)6));
- return null;
- }});
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.java b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.java
new file mode 100644
index 0000000..e52ff45
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/enricher/stock/TransformingEnricherDeprecatedTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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 org.apache.brooklyn.enricher.stock;
+
+import java.util.Arrays;
+import java.util.concurrent.Callable;
+
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.location.SimulatedLocation;
+import org.apache.brooklyn.core.sensor.BasicAttributeSensor;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.test.Asserts;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Function;
+
+@SuppressWarnings("deprecation")
+public class TransformingEnricherDeprecatedTest {
+
+ public static final Logger log = LoggerFactory.getLogger(TransformingEnricherDeprecatedTest.class);
+
+ private static final long TIMEOUT_MS = 10*1000;
+// private static final long SHORT_WAIT_MS = 250;
+
+ TestApplication app;
+ TestEntity producer;
+ AttributeSensor<Integer> intSensorA;
+ AttributeSensor<Long> target;
+
+ @BeforeMethod()
+ public void before() {
+ app = TestApplication.Factory.newManagedInstanceForTests();
+ producer = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+ intSensorA = new BasicAttributeSensor<Integer>(Integer.class, "int.sensor.a");
+ target = new BasicAttributeSensor<Long>(Long.class, "long.sensor.target");
+
+ app.start(Arrays.asList(new SimulatedLocation()));
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void after() {
+ if (app!=null) Entities.destroyAll(app.getManagementContext());
+ }
+
+ @Test
+ public void testTransformingEnricher() throws InterruptedException {
+ final SensorTransformingEnricher<Integer, Long> e1 = new SensorTransformingEnricher<Integer,Long>(intSensorA, target, new DoubleFn());
+
+ producer.sensors().set(intSensorA, 3);
+ //ensure previous values get picked up
+ producer.enrichers().add(e1);
+
+ Asserts.succeedsEventually(MutableMap.of("timeout", TIMEOUT_MS), new Callable<Object>() {
+ @Override
+ public Object call() {
+ Assert.assertEquals(producer.getAttribute(target), (Long)((long)6));
+ return null;
+ }});
+ }
+
+ private static class DoubleFn implements Function<Integer, Long> {
+ @Override
+ public Long apply(Integer i) {
+ return ((long)i)*2;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.groovy b/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.groovy
deleted file mode 100644
index 5eae3c9..0000000
--- a/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.groovy
+++ /dev/null
@@ -1,256 +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 org.apache.brooklyn.util.core.internal
-
-import static java.util.concurrent.TimeUnit.*
-import static org.testng.Assert.*
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit
-
-import org.testng.annotations.Test
-import org.apache.brooklyn.util.core.internal.Repeater
-import org.apache.brooklyn.util.groovy.TimeExtras;
-import org.apache.brooklyn.util.time.Duration;
-
-import com.google.common.base.Stopwatch
-
-public class RepeaterTest {
- static { TimeExtras.init() }
-
- @Test
- public void sanityTest() {
- new Repeater("Sanity test")
- .repeat()
- .until { true }
- .every(10 * MILLISECONDS);
- }
-
- @Test
- public void sanityTestDescription() {
- new Repeater()
- .repeat()
- .until { true }
- .every(10 * MILLISECONDS);
- }
-
- @Test
- public void sanityTestBuilder() {
- Repeater.create("Sanity test")
- .repeat()
- .until { true }
- .every(10 * MILLISECONDS);
- }
-
- @Test
- public void sanityTestBuilderDescription() {
- Repeater.create()
- .repeat()
- .until { true }
- .every(10 * MILLISECONDS);
- }
-
- @Test(expectedExceptions = [ NullPointerException.class ])
- public void repeatFailsIfClosureIsNull() {
- new Repeater("repeatFailsIfClosureIsNull").repeat((Callable<?>)null);
- fail "Expected exception was not thrown"
- }
-
- @Test
- public void repeatSucceedsIfClosureIsNonNull() {
- new Repeater("repeatSucceedsIfClosureIsNonNull").repeat { true };
- }
-
- @Test(expectedExceptions = [ NullPointerException.class ])
- public void untilFailsIfClosureIsNull() {
- new Repeater("untilFailsIfClosureIsNull").until(null);
- fail "Expected exception was not thrown"
- }
-
- @Test
- public void untilSucceedsIfClosureIsNonNull() {
- new Repeater("untilSucceedsIfClosureIsNonNull").until { true };
- }
-
- @Test(expectedExceptions = [ IllegalArgumentException.class ])
- public void everyFailsIfPeriodIsZero() {
- new Repeater("everyFailsIfPeriodIsZero").every(0 * MILLISECONDS);
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ IllegalArgumentException.class ])
- public void everyFailsIfPeriodIsNegative() {
- new Repeater("everyFailsIfPeriodIsNegative").every(-1 * MILLISECONDS);
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ NullPointerException.class ])
- public void everyFailsIfUnitsIsNull() {
- new Repeater("everyFailsIfUnitsIsNull").every(10, null);
- fail "Expected exception was not thrown"
- }
-
- @Test
- public void everySucceedsIfPeriodIsPositiveAndUnitsIsNonNull() {
- new Repeater("repeatSucceedsIfClosureIsNonNull").every(10 * MILLISECONDS);
- }
-
- @Test(expectedExceptions = [ IllegalArgumentException.class ])
- public void limitTimeToFailsIfPeriodIsZero() {
- new Repeater("limitTimeToFailsIfPeriodIsZero").limitTimeTo(0, TimeUnit.MILLISECONDS);
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ IllegalArgumentException.class ])
- public void limitTimeToFailsIfPeriodIsNegative() {
- new Repeater("limitTimeToFailsIfPeriodIsNegative").limitTimeTo(-1, TimeUnit.MILLISECONDS);
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ NullPointerException.class ])
- public void limitTimeToFailsIfUnitsIsNull() {
- new Repeater("limitTimeToFailsIfUnitsIsNull").limitTimeTo(10, null);
- fail "Expected exception was not thrown"
- }
-
- @Test
- public void limitTimeToSucceedsIfPeriodIsPositiveAndUnitsIsNonNull() {
- new Repeater("limitTimeToSucceedsIfClosureIsNonNull").limitTimeTo(10, TimeUnit.MILLISECONDS);
- }
-
- @Test
- public void everyAcceptsDuration() {
- new Repeater("everyAcceptsDuration").every(Duration.ONE_SECOND);
- }
-
- @Test
- public void everyAcceptsLong() {
- new Repeater("everyAcceptsLong").every(1000L);
- }
-
- @Test
- public void everyAcceptsTimeUnit() {
- new Repeater("everyAcceptsTimeUnit").every(1000000L, TimeUnit.MICROSECONDS);
- }
-
- @Test
- public void runReturnsTrueIfExitConditionIsTrue() {
- assertTrue new Repeater("runReturnsTrueIfExitConditionIsTrue")
- .repeat()
- .every(1 * MILLISECONDS)
- .until { true }
- .run();
- }
-
- @Test
- public void runRespectsMaximumIterationLimitAndReturnsFalseIfReached() {
- int iterations = 0;
- assertFalse new Repeater("runRespectsMaximumIterationLimitAndReturnsFalseIfReached")
- .repeat { iterations++ }
- .every(1 * MILLISECONDS)
- .until { false }
- .limitIterationsTo(5)
- .run();
- assertEquals 5, iterations;
- }
-
- /**
- * Check that the {@link Repeater} will stop after a time limit.
- *
- * The repeater is configured to run every 100ms and never stop until the limit is reached.
- * This is given as {@link Repeater#limitTimeTo(groovy.time.Duration)} and the execution time
- * is then checked to ensure it is between 100% and 400% of the specified value. Due to scheduling
- * delays and other factors in a non RTOS system it is expected that the repeater will take much
- * longer to exit occasionally.
- *
- * @see #runRespectsMaximumIterationLimitAndReturnsFalseIfReached()
- */
- @Test(groups="Integration")
- public void runRespectsTimeLimitAndReturnsFalseIfReached() {
- final long LIMIT = 2000l;
- Repeater repeater = new Repeater("runRespectsTimeLimitAndReturnsFalseIfReached")
- .repeat()
- .every(100 * MILLISECONDS)
- .until { false }
- .limitTimeTo(LIMIT, TimeUnit.MILLISECONDS);
-
- Stopwatch stopwatch = new Stopwatch().start();
- boolean result = repeater.run();
- stopwatch.stop();
-
- assertFalse result;
-
- long difference = stopwatch.elapsed(TimeUnit.MILLISECONDS);
- assertTrue(difference >= LIMIT, "Difference was: " + difference);
- assertTrue(difference < 4 * LIMIT, "Difference was: " + difference);
- }
-
- @Test(expectedExceptions = [ IllegalStateException.class ])
- public void runFailsIfUntilWasNotSet() {
- new Repeater("runFailsIfUntilWasNotSet")
- .repeat()
- .every(10 * MILLISECONDS)
- .run();
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ IllegalStateException.class ])
- public void runFailsIfEveryWasNotSet() {
- new Repeater("runFailsIfEveryWasNotSet")
- .repeat()
- .until { true }
- .run();
- fail "Expected exception was not thrown"
- }
-
- @Test(expectedExceptions = [ UnsupportedOperationException.class ])
- public void testRethrowsException() {
- boolean result = new Repeater("throwRuntimeException")
- .repeat()
- .every(10 * MILLISECONDS)
- .until { throw new UnsupportedOperationException("fail") }
- .rethrowException()
- .limitIterationsTo(2)
- .run();
- fail "Expected exception was not thrown"
- }
-
- @Test
- public void testNoRethrowsException() {
- try {
- boolean result = new Repeater("throwRuntimeException")
- .repeat()
- .every(10 * MILLISECONDS)
- .until { throw new UnsupportedOperationException("fail") }
- .limitIterationsTo(2)
- .run();
- assertFalse result
- } catch (RuntimeException re) {
- fail "Exception should not have been thrown: " + re.getMessage()
- }
- }
-
- public void testFlags() {
- int count=0;
- new Repeater(period: 5*MILLISECONDS, timeout: 100*MILLISECONDS).repeat({ count++ }).until({ count>100}).run();
- assertTrue count>10
- assertTrue count<30
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.java b/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.java
new file mode 100644
index 0000000..de26857
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/util/core/internal/RepeaterTest.java
@@ -0,0 +1,251 @@
+/*
+ * 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 org.apache.brooklyn.util.core.internal;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.brooklyn.util.time.Duration;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Stopwatch;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.Callables;
+
+@SuppressWarnings("deprecation")
+public class RepeaterTest {
+
+ @Test
+ public void sanityTest() {
+ new Repeater("Sanity test")
+ .repeat()
+ .until(Callables.returning(true))
+ .every(Duration.millis(10));
+ }
+
+ @Test
+ public void sanityTestDescription() {
+ new Repeater()
+ .repeat()
+ .until(Callables.returning(true))
+ .every(Duration.millis(10));
+ }
+
+ @Test
+ public void sanityTestBuilder() {
+ Repeater.create("Sanity test")
+ .repeat()
+ .until(Callables.returning(true))
+ .every(Duration.millis(10));
+ }
+
+ @Test
+ public void sanityTestBuilderDescription() {
+ Repeater.create()
+ .repeat()
+ .until(Callables.returning(true))
+ .every(Duration.millis(10));
+ }
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void repeatFailsIfClosureIsNull() {
+ new Repeater("repeatFailsIfClosureIsNull").repeat((Callable<?>)null);
+ }
+
+ @Test
+ public void repeatSucceedsIfClosureIsNonNull() {
+ new Repeater("repeatSucceedsIfClosureIsNonNull").repeat(Callables.returning(true));
+ }
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void untilFailsIfClosureIsNull() {
+ new Repeater("untilFailsIfClosureIsNull").until(null);
+ }
+
+ @Test
+ public void untilSucceedsIfClosureIsNonNull() {
+ new Repeater("untilSucceedsIfClosureIsNonNull").until(Callables.returning(true));
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void everyFailsIfPeriodIsZero() {
+ new Repeater("everyFailsIfPeriodIsZero").every(Duration.ZERO);
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void everyFailsIfPeriodIsNegative() {
+ new Repeater("everyFailsIfPeriodIsNegative").every(Duration.millis(-1));
+ }
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void everyFailsIfUnitsIsNull() {
+ new Repeater("everyFailsIfUnitsIsNull").every(10, null);
+ }
+
+ @Test
+ public void everySucceedsIfPeriodIsPositiveAndUnitsIsNonNull() {
+ new Repeater("repeatSucceedsIfClosureIsNonNull").every(Duration.millis(10));
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void limitTimeToFailsIfPeriodIsZero() {
+ new Repeater("limitTimeToFailsIfPeriodIsZero").limitTimeTo(0, TimeUnit.MILLISECONDS);
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void limitTimeToFailsIfPeriodIsNegative() {
+ new Repeater("limitTimeToFailsIfPeriodIsNegative").limitTimeTo(-1, TimeUnit.MILLISECONDS);
+ }
+
+ @Test(expectedExceptions = NullPointerException.class)
+ public void limitTimeToFailsIfUnitsIsNull() {
+ new Repeater("limitTimeToFailsIfUnitsIsNull").limitTimeTo(10, null);
+ }
+
+ @Test
+ public void limitTimeToSucceedsIfPeriodIsPositiveAndUnitsIsNonNull() {
+ new Repeater("limitTimeToSucceedsIfClosureIsNonNull").limitTimeTo(10, TimeUnit.MILLISECONDS);
+ }
+
+ @Test
+ public void everyAcceptsDuration() {
+ new Repeater("everyAcceptsDuration").every(Duration.ONE_SECOND);
+ }
+
+ @Test
+ public void everyAcceptsLong() {
+ new Repeater("everyAcceptsLong").every(1000L);
+ }
+
+ @Test
+ public void everyAcceptsTimeUnit() {
+ new Repeater("everyAcceptsTimeUnit").every(1000000L, TimeUnit.MICROSECONDS);
+ }
+
+ @Test
+ public void runReturnsTrueIfExitConditionIsTrue() {
+ assertTrue(new Repeater("runReturnsTrueIfExitConditionIsTrue")
+ .repeat()
+ .every(Duration.millis(1))
+ .until(Callables.returning(true))
+ .run());
+ }
+
+ @Test
+ public void runRespectsMaximumIterationLimitAndReturnsFalseIfReached() {
+ final AtomicInteger iterations = new AtomicInteger();
+ assertFalse(new Repeater("runRespectsMaximumIterationLimitAndReturnsFalseIfReached")
+ .repeat(new Runnable() {@Override public void run() {iterations.incrementAndGet();}})
+ .every(Duration.millis(1))
+ .until(Callables.returning(false))
+ .limitIterationsTo(5)
+ .run());
+ assertEquals(iterations.get(), 5);
+ }
+
+ /**
+ * Check that the {@link Repeater} will stop after a time limit.
+ *
+ * The repeater is configured to run every 100ms and never stop until the limit is reached.
+ * This is given as {@link Repeater#limitTimeTo(groovy.time.Duration)} and the execution time
+ * is then checked to ensure it is between 100% and 400% of the specified value. Due to scheduling
+ * delays and other factors in a non RTOS system it is expected that the repeater will take much
+ * longer to exit occasionally.
+ *
+ * @see #runRespectsMaximumIterationLimitAndReturnsFalseIfReached()
+ */
+ @Test(groups="Integration")
+ public void runRespectsTimeLimitAndReturnsFalseIfReached() {
+ final long LIMIT = 2000l;
+ Repeater repeater = new Repeater("runRespectsTimeLimitAndReturnsFalseIfReached")
+ .repeat()
+ .every(Duration.millis(100))
+ .until(Callables.returning(false))
+ .limitTimeTo(LIMIT, TimeUnit.MILLISECONDS);
+
+ Stopwatch stopwatch = Stopwatch.createStarted();
+ boolean result = repeater.run();
+ stopwatch.stop();
+
+ assertFalse(result);
+
+ long difference = stopwatch.elapsed(TimeUnit.MILLISECONDS);
+ assertTrue(difference >= LIMIT, "Difference was: " + difference);
+ assertTrue(difference < 4 * LIMIT, "Difference was: " + difference);
+ }
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void runFailsIfUntilWasNotSet() {
+ new Repeater("runFailsIfUntilWasNotSet")
+ .repeat()
+ .every(Duration.millis(10))
+ .run();
+ }
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void runFailsIfEveryWasNotSet() {
+ new Repeater("runFailsIfEveryWasNotSet")
+ .repeat()
+ .until(Callables.returning(true))
+ .run();
+ }
+
+ @Test(expectedExceptions = UnsupportedOperationException.class)
+ public void testRethrowsException() {
+ new Repeater("throwRuntimeException")
+ .repeat()
+ .every(Duration.millis(10))
+ .until(new Callable<Boolean>() {@Override public Boolean call() {throw new UnsupportedOperationException("fail"); }})
+ .rethrowException()
+ .limitIterationsTo(2)
+ .run();
+ }
+
+ @Test
+ public void testNoRethrowsException() {
+ try {
+ boolean result = new Repeater("throwRuntimeException")
+ .repeat()
+ .every(Duration.millis(10))
+ .until(new Callable<Boolean>() {@Override public Boolean call() {throw new UnsupportedOperationException("fail"); }})
+ .limitIterationsTo(2)
+ .run();
+ assertFalse(result);
+ } catch (RuntimeException re) {
+ fail("Exception should not have been thrown: " + re.getMessage(), re);
+ }
+ }
+
+ public void testFlags() {
+ final AtomicInteger count = new AtomicInteger();
+ new Repeater(ImmutableMap.of("period", Duration.millis(5), "timeout", Duration.millis(100)))
+ .repeat(new Runnable() {@Override public void run() {count.incrementAndGet();}})
+ .until(new Callable<Boolean>() { @Override public Boolean call() {return count.get() > 0;}})
+ .run();
+ assertTrue(count.get()>10);
+ assertTrue(count.get()<30);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
----------------------------------------------------------------------
diff --git a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy b/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
deleted file mode 100644
index c1156b1..0000000
--- a/examples/simple-web-cluster/src/main/java/org/apache/brooklyn/demo/WebClusterDatabaseExampleGroovy.groovy
+++ /dev/null
@@ -1,92 +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 org.apache.brooklyn.demo;
-
-import static org.apache.brooklyn.entity.java.JavaEntityMethods.javaSysProp
-import static org.apache.brooklyn.core.sensor.DependentConfiguration.attributeWhenReady
-import static org.apache.brooklyn.core.sensor.DependentConfiguration.formatString
-
-import org.apache.brooklyn.api.entity.EntitySpec
-import org.apache.brooklyn.core.entity.AbstractApplication
-import org.apache.brooklyn.core.entity.Entities
-import org.apache.brooklyn.entity.database.mysql.MySqlNode
-import org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
-import org.apache.brooklyn.entity.webapp.DynamicWebAppCluster
-import org.apache.brooklyn.launcher.BrooklynLauncher
-import org.apache.brooklyn.policy.autoscaling.AutoScalerPolicy
-import org.apache.brooklyn.util.CommandLineUtil
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-
-import com.google.common.collect.Lists
-
-/**
- * Launches a 3-tier app with nginx, clustered jboss, and mysql.
- * <p>
- * This variant of {@link WebClusterDatabaseExample} demonstrates <i>Groovy</i> language conveniences.
- **/
-public class WebClusterDatabaseExampleGroovy extends AbstractApplication {
-
- public static final Logger LOG = LoggerFactory.getLogger(WebClusterDatabaseExampleGroovy.class);
-
- public static final String DEFAULT_LOCATION = "localhost";
-
- public static final String WAR_PATH = "classpath://hello-world-sql-webapp.war";
-
- public static final String DB_SETUP_SQL_URL = "classpath://visitors-creation-script.sql";
-
- public static final String DB_TABLE = "visitors";
- public static final String DB_USERNAME = "brooklyn";
- public static final String DB_PASSWORD = "br00k11n";
-
- @Override
- public void initApp() {
- MySqlNode mysql = addChild(MySqlNode,
- creationScriptUrl: DB_SETUP_SQL_URL);
-
- ControlledDynamicWebAppCluster web = addChild(ControlledDynamicWebAppCluster,
- war: WAR_PATH,
- httpPort: "8080+",
- (javaSysProp("brooklyn.example.db.url")):
- formatString("jdbc:%s%s?user=%s\\&password=%s",
- attributeWhenReady(mysql, MySqlNode.DATASTORE_URL),
- DB_TABLE, DB_USERNAME, DB_PASSWORD));
-
- web.getCluster().policies().add(AutoScalerPolicy.builder().
- metric(DynamicWebAppCluster.REQUESTS_PER_SECOND_LAST_PER_NODE).
- sizeRange(1, 5).
- metricRange(10, 100).
- build());
- }
-
- public static void main(String[] argv) {
- List<String> args = Lists.newArrayList(argv);
- String port = CommandLineUtil.getCommandLineOption(args, "--port", "8081+");
- String location = CommandLineUtil.getCommandLineOption(args, "--location", DEFAULT_LOCATION);
-
- BrooklynLauncher launcher = BrooklynLauncher.newInstance()
- .application(EntitySpec.create(WebClusterDatabaseExampleGroovy.class).displayName("Brooklyn WebApp Cluster with Database example"))
- .webconsolePort(port)
- .location(location)
- .start();
-
- Entities.dumpInfo(launcher.getApplications());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/locations/jclouds/pom.xml
----------------------------------------------------------------------
diff --git a/locations/jclouds/pom.xml b/locations/jclouds/pom.xml
index ed10132..3338893 100644
--- a/locations/jclouds/pom.xml
+++ b/locations/jclouds/pom.xml
@@ -85,10 +85,6 @@
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
- <groupId>org.codehaus.groovy</groupId>
- <artifactId>groovy-all</artifactId>
- </dependency>
- <dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
</dependency>
@@ -199,21 +195,4 @@
<scope>test</scope>
</dependency>
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <inherited>true</inherited>
- <executions>
- <execution>
- <id>default-testCompile</id>
- <configuration>
- <compilerId>groovy-eclipse-compiler</compilerId>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.groovy
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.groovy b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.groovy
deleted file mode 100644
index 6a04784..0000000
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.groovy
+++ /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 org.apache.brooklyn.location.jclouds.provider;
-
-import static org.testng.Assert.*
-
-import org.apache.brooklyn.api.mgmt.ManagementContext
-import org.apache.brooklyn.core.entity.Entities
-import org.apache.brooklyn.location.jclouds.JcloudsLocation
-import org.apache.brooklyn.location.jclouds.JcloudsSshMachineLocation
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import com.google.common.collect.ImmutableMap
-
-public class AwsEc2LocationWindowsLiveTest {
- private static final Logger LOG = LoggerFactory.getLogger(AwsEc2LocationWindowsLiveTest.class)
-
- private static final String PROVIDER = "aws-ec2"
- private static final String EUWEST_REGION_NAME = "eu-west-1"
- private static final String EUWEST_IMAGE_ID = EUWEST_REGION_NAME+"/"+"ami-7f0c260b";//"ami-41d3d635"
- private static final String LOCATION_ID = "jclouds:"+PROVIDER+":"+EUWEST_REGION_NAME;
-
- protected JcloudsLocation loc;
- protected Collection<SshMachineLocation> machines = []
- protected ManagementContext ctx;
-
- @BeforeMethod(groups = "Live")
- public void setUp() {
- ctx = Entities.newManagementContext(ImmutableMap.of("provider", PROVIDER));
-
- loc = ctx.locationRegistry.resolve LOCATION_ID
- }
-
- @AfterMethod(groups = "Live")
- public void tearDown() {
- List<Exception> exceptions = []
- machines.each {
- try {
- loc?.release(it)
- } catch (Exception e) {
- LOG.warn("Error releasing machine $it; continuing...", e)
- exceptions.add(e)
- }
- }
- if (exceptions) {
- throw exceptions.get(0)
- }
- machines.clear()
- }
-
- // TODO Note careful choice of image due to jclouds 1.4 issue 886
- // TODO Blocks for long time, waiting for IP:22 to be reachable, before falling back to using public IP
- // 10*2 minutes per attempt in jclouds 1.4 because done sequentially, and done twice by us so test takes 40 minutes!
- @Test(enabled=true, groups = [ "Live" ])
- public void testProvisionWindowsVm() {
- JcloudsSshMachineLocation machine = obtainMachine([ imageId:EUWEST_IMAGE_ID ]);
-
- LOG.info("Provisioned Windows VM {}; checking if has password", machine)
- assertNotNull(machine.waitForPassword())
- }
-
- // Use this utility method to ensure machines are released on tearDown
- protected SshMachineLocation obtainMachine(Map flags) {
- SshMachineLocation result = loc.obtain(flags)
- machines.add(result)
- return result
- }
-
- protected SshMachineLocation release(SshMachineLocation machine) {
- machines.remove(machine)
- loc.release(machine)
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.java
new file mode 100644
index 0000000..7c3618c
--- /dev/null
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/AwsEc2LocationWindowsLiveTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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 org.apache.brooklyn.location.jclouds.provider;
+
+import static org.testng.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.brooklyn.api.location.NoMachinesAvailableException;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.location.jclouds.JcloudsLocation;
+import org.apache.brooklyn.location.jclouds.JcloudsSshMachineLocation;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class AwsEc2LocationWindowsLiveTest {
+ private static final Logger LOG = LoggerFactory.getLogger(AwsEc2LocationWindowsLiveTest.class);
+
+ private static final String PROVIDER = "aws-ec2";
+ private static final String EUWEST_REGION_NAME = "eu-west-1";
+ private static final String EUWEST_IMAGE_ID = EUWEST_REGION_NAME+"/"+"ami-7f0c260b";//"ami-41d3d635"
+ private static final String LOCATION_ID = "jclouds:"+PROVIDER+":"+EUWEST_REGION_NAME;
+
+ protected JcloudsLocation loc;
+ protected Collection<SshMachineLocation> machines = new ArrayList<SshMachineLocation>();
+ protected ManagementContext ctx;
+
+ @BeforeMethod(groups = "Live")
+ public void setUp() {
+ ctx = Entities.newManagementContext(ImmutableMap.of("provider", PROVIDER));
+
+ loc = (JcloudsLocation) ctx.getLocationRegistry().resolve(LOCATION_ID);
+ }
+
+ @AfterMethod(groups = "Live")
+ public void tearDown() throws Exception {
+ List<Exception> exceptions = new ArrayList<Exception>();
+ for (SshMachineLocation machine : machines) {
+ try {
+ loc.release(machine);
+ } catch (Exception e) {
+ LOG.warn("Error releasing machine $it; continuing...", e);
+ exceptions.add(e);
+ }
+ }
+ if (!exceptions.isEmpty()) {
+ throw exceptions.get(0);
+ }
+ machines.clear();
+ }
+
+ // TODO Note careful choice of image due to jclouds 1.4 issue 886
+ // TODO Blocks for long time, waiting for IP:22 to be reachable, before falling back to using public IP
+ // 10*2 minutes per attempt in jclouds 1.4 because done sequentially, and done twice by us so test takes 40 minutes!
+ @Test(enabled=true, groups = "Live")
+ public void testProvisionWindowsVm() throws NoMachinesAvailableException {
+ JcloudsSshMachineLocation machine = (JcloudsSshMachineLocation) obtainMachine(ImmutableMap.of("imageId", EUWEST_IMAGE_ID));
+
+ LOG.info("Provisioned Windows VM {}; checking if has password", machine);
+ assertNotNull(machine.waitForPassword());
+ }
+
+ // Use this utility method to ensure machines are released on tearDown
+ protected SshMachineLocation obtainMachine(Map<?, ?> flags) throws NoMachinesAvailableException {
+ JcloudsSshMachineLocation result = (JcloudsSshMachineLocation) loc.obtain(flags);
+ machines.add(result);
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f69ade37/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/CarrenzaLocationLiveTest.groovy
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/CarrenzaLocationLiveTest.groovy b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/CarrenzaLocationLiveTest.groovy
deleted file mode 100644
index 0c2197f..0000000
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/provider/CarrenzaLocationLiveTest.groovy
+++ /dev/null
@@ -1,132 +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 org.apache.brooklyn.location.jclouds.provider;
-
-import static org.testng.Assert.*
-
-import org.apache.brooklyn.core.internal.BrooklynProperties
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext
-import org.apache.brooklyn.location.jclouds.JcloudsLocation
-import org.apache.brooklyn.location.jclouds.JcloudsSshMachineLocation
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-import org.apache.brooklyn.util.collections.MutableMap
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import com.google.common.collect.ImmutableList
-
-/**
- * Tests vcloud, with Carrenza. Uses the cloudsoft test account (hard-coding its NAT Mapping,
- * and one of its private vApp templates). Note that the template is for a Windows 2008
- * machine with winsshd installed.
- *
- * TODO Will only work with >= jclouds 1.5, due to jclouds issues 994 and 995. Therefore it
- * will not work in brooklyn 0.4.0-M2 etc.
- */
-class CarrenzaLocationLiveTest {
- private static final Logger LOG = LoggerFactory.getLogger(CarrenzaLocationLiveTest.class)
-
- private static final String PROVIDER = "vcloud"
- private static final String ENDPOINT = "https://myvdc.carrenza.net/api"
- private static final String LOCATION_ID = "jclouds:"+PROVIDER+":"+ENDPOINT;
- private static final String WINDOWS_IMAGE_ID = "https://myvdc.carrenza.net/api/v1.0/vAppTemplate/vappTemplate-2bd5b0ff-ecd9-405e-8306-2f4f6c092a1b"
-
- private BrooklynProperties brooklynProperties;
- private LocalManagementContext managementContext;
- private JcloudsLocation loc;
- private Collection<SshMachineLocation> machines = []
-
- // TODO Has not been tested since updating ot remove use of deleted LocationRegistry!
- @BeforeMethod(groups = "Live")
- public void setUp() {
- System.out.println("classpath="+System.getProperty("java.class.path"));
-
- brooklynProperties = BrooklynProperties.Factory.newDefault();
- brooklynProperties.remove("brooklyn.jclouds."+PROVIDER+".image-description-regex");
- brooklynProperties.remove("brooklyn.jclouds."+PROVIDER+".image-name-regex");
- brooklynProperties.remove("brooklyn.jclouds."+PROVIDER+".image-id");
- brooklynProperties.remove("brooklyn.jclouds."+PROVIDER+".inboundPorts");
- brooklynProperties.remove("brooklyn.jclouds."+PROVIDER+".hardware-id");
-
- // Also removes scriptHeader (e.g. if doing `. ~/.bashrc` and `. ~/.profile`, then that can cause "stdin: is not a tty")
- brooklynProperties.remove("brooklyn.ssh.config.scriptHeader");
-
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".jclouds.endpoint", ENDPOINT)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".imageId", WINDOWS_IMAGE_ID)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".noDefaultSshKeys", true)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".userName", "Administrator")
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".dontCreateUser", true)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".overrideLoginUser", "Administrator")
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".waitForSshable", false)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".runAsRoot", false)
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".inboundPorts", [22, 3389])
- brooklynProperties.put("brooklyn.jclouds."+PROVIDER+".natMapping", [("192.168.0.100"):"195.3.186.200", ("192.168.0.101"):"195.3.186.42"])
-
- managementContext = new LocalManagementContext(brooklynProperties);
- loc = (JcloudsLocation) managementContext.getLocationRegistry().resolve(LOCATION_ID);
- }
-
- @AfterMethod(groups = "Live")
- public void tearDown() {
- List<Exception> exceptions = []
- machines.each {
- try {
- loc?.release(it)
- } catch (Exception e) {
- LOG.warn("Error releasing machine $it; continuing...", e)
- exceptions.add(e)
- }
- }
- if (exceptions) {
- throw exceptions.get(0)
- }
- machines.clear()
- }
-
- // FIXME Disabled because of jclouds issues #994 and #995 (fixed in jclouds 1.5, so not in brooklyn 0.4.0-M2 etc)
- // Note the careful settings in setUp (e.g. so don't try to install ssh-keys etc
- // Also, the windows image used has winsshd installed
- @Test(enabled=false, groups = [ "Live" ])
- public void testProvisionWindowsVm() {
- JcloudsSshMachineLocation machine = obtainMachine(MutableMap.of(
- "imageId", WINDOWS_IMAGE_ID));
-
- LOG.info("Provisioned Windows VM {}; checking if has password", machine)
- String password = machine.waitForPassword();
- assertNotNull(password);
-
- LOG.info("Checking can ssh to windows machine {} using password {}", machine, password);
- assertEquals(machine.execCommands(MutableMap.of("password", password), "check-reachable", ImmutableList.of("hostname")), 0);
- }
-
- // Use this utility method to ensure machines are released on tearDown
- protected SshMachineLocation obtainMachine(Map flags) {
- SshMachineLocation result = loc.obtain(flags)
- machines.add(result)
- return result
- }
-
- protected SshMachineLocation release(SshMachineLocation machine) {
- machines.remove(machine)
- loc.release(machine)
- }
-}