You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/01 18:47:01 UTC
[43/50] brooklyn-library git commit: Tidying up Redis entity code -
Convert RedisIntegrationTest to Java - Update RedisStore to use FreeMarker
template - Use RedisSupport class to encapsulate API testing - Use SshFeed to
poll for uptime
Tidying up Redis entity code
- Convert RedisIntegrationTest to Java
- Update RedisStore to use FreeMarker template
- Use RedisSupport class to encapsulate API testing
- Use SshFeed to poll for uptime
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-library/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-library/commit/e9cb1572
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-library/tree/e9cb1572
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-library/diff/e9cb1572
Branch: refs/heads/0.5.0
Commit: e9cb1572990ac3e678b3f953c1c26ad219af28b8
Parents: e4098ab
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 22 14:40:19 2013 +0100
Committer: Andrew Kennedy <an...@cloudsoftcorp.com>
Committed: Wed Apr 24 13:25:44 2013 +0100
----------------------------------------------------------------------
.../entity/nosql/redis/RedisCluster.java | 2 +-
.../entity/nosql/redis/RedisClusterImpl.java | 15 +--
.../brooklyn/entity/nosql/redis/RedisSlave.java | 16 +++-
.../entity/nosql/redis/RedisSlaveImpl.java | 14 +--
.../brooklyn/entity/nosql/redis/RedisStore.java | 25 ++---
.../entity/nosql/redis/RedisStoreImpl.java | 86 ++++++++---------
.../entity/nosql/redis/RedisStoreSshDriver.java | 6 +-
.../brooklyn/entity/nosql/redis/redis.conf | 13 +++
.../brooklyn/entity/nosql/redis/slave.conf | 13 +++
.../nosql/src/main/resources/redis-logo.png | Bin 0 -> 34333 bytes
.../entity/nosql/redis/RedisEc2LiveTest.java | 22 ++---
.../nosql/redis/RedisIntegrationTest.groovy | 93 -------------------
.../nosql/redis/RedisIntegrationTest.java | 77 +++++++++++++++
.../entity/nosql/redis/RedisSupport.java | 41 ++++++++
14 files changed, 227 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
index 57b3682..0393926 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisCluster.java
@@ -13,7 +13,7 @@ import brooklyn.entity.trait.Startable;
*
* TODO add sensors with aggregated Redis statistics from cluster
*/
-@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.jpeg")
+@Catalog(name="Redis Cluster", description="Redis is an open-source, networked, in-memory, key-value data store with optional durability", iconUrl="classpath:///redis-logo.png")
@ImplementedBy(RedisClusterImpl.class)
public interface RedisCluster extends Entity, Startable {
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
index 08d114a..6a5e6ff 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisClusterImpl.java
@@ -16,7 +16,7 @@ import brooklyn.util.MutableMap;
import com.google.common.collect.Maps;
public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
- Map redisProperties = Maps.newLinkedHashMap();
+
RedisStore master;
DynamicCluster slaves;
@@ -31,23 +31,18 @@ public class RedisClusterImpl extends AbstractEntity implements RedisCluster {
}
public RedisClusterImpl(Map properties, Entity parent) {
super(properties, parent);
-
- redisProperties.putAll(properties);
}
@Override
public void start(Collection<? extends Location> locations) {
- master = addChild(EntitySpecs.spec(RedisStore.class)
- .configure(redisProperties));
+ master = addChild(EntitySpecs.spec(RedisStore.class));
Entities.manage(master);
master.start(locations);
- redisProperties.put("master", master);
-
+
slaves = addChild(EntitySpecs.spec(DynamicCluster.class)
- .configure(redisProperties)
- .configure(DynamicCluster.FACTORY, new BasicConfigurableEntityFactory(RedisSlave.class)));
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpecs.spec(RedisSlave.class).configure(RedisSlave.MASTER, master)));
slaves.start(locations);
-
+
setAttribute(Startable.SERVICE_UP, true);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
index d433688..6b07c2b 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlave.java
@@ -1,12 +1,24 @@
package brooklyn.entity.nosql.redis;
+import brooklyn.config.ConfigKey;
import brooklyn.entity.proxying.ImplementedBy;
+import brooklyn.event.basic.BasicConfigKey;
+import brooklyn.util.flags.SetFromFlag;
/**
* A {@link RedisStore} configured as a slave.
- *
- * The {@code master} property must be set to the master Redis store entity.
*/
@ImplementedBy(RedisSlaveImpl.class)
public interface RedisSlave extends RedisStore {
+
+ @SetFromFlag("master")
+ ConfigKey<RedisStore> MASTER = new BasicConfigKey<RedisStore>(RedisStore.class, "redis.master", "Redis master");
+
+ @SetFromFlag("redisConfigTemplateUrl")
+ ConfigKey<String> REDIS_CONFIG_TEMPLATE_URL = new BasicConfigKey<String>(
+ String.class, "redis.config.templateUrl", "Template file (in freemarker format) for the redis.conf config file",
+ "classpath://brooklyn/entity/nosql/redis/slave.conf");
+
+ RedisStore getMaster();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
index 2ea0783..c0718b9 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisSlaveImpl.java
@@ -9,11 +9,8 @@ import com.google.common.base.Preconditions;
/**
* A {@link RedisStore} configured as a slave.
- *
- * The {@code master} property must be set to the master Redis store entity.
*/
public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
- RedisStore master;
public RedisSlaveImpl() {
this(MutableMap.of(), null);
@@ -26,17 +23,10 @@ public class RedisSlaveImpl extends RedisStoreImpl implements RedisSlave {
}
public RedisSlaveImpl(Map properties, Entity parent) {
super(properties, parent);
-
- // TODO Use config key for "master"
- Preconditions.checkArgument(properties.containsKey("master"), "The Redis master entity must be specified");
- master = (RedisStore) properties.get("master");
}
@Override
- public String getConfigData(int port, boolean include) {
- String masterAddress = master.getAddress();
- int masterPort = getParent().getAttribute(REDIS_PORT);
-
- return super.getConfigData(port, include) + "slaveof "+masterAddress+" "+masterPort;
+ public RedisStore getMaster() {
+ return getConfig(MASTER);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
index a6ce441..492da2d 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStore.java
@@ -22,22 +22,23 @@ import brooklyn.util.flags.SetFromFlag;
public interface RedisStore extends SoftwareProcess, DataStore {
@SetFromFlag("version")
- public static final BasicConfigKey<String> SUGGESTED_VERSION =
+ BasicConfigKey<String> SUGGESTED_VERSION =
new BasicConfigKey<String>(SoftwareProcess.SUGGESTED_VERSION, "2.6.7");
@SetFromFlag("downloadUrl")
- public static final BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
+ BasicAttributeSensorAndConfigKey<String> DOWNLOAD_URL = new BasicAttributeSensorAndConfigKey<String>(
SoftwareProcess.DOWNLOAD_URL, "http://redis.googlecode.com/files/redis-${version}.tar.gz");
@SetFromFlag("redisPort")
- public static final PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
-
- @SetFromFlag("configFile")
- public static final ConfigKey<String> REDIS_CONFIG_FILE = new BasicConfigKey<String>(String.class, "redis.config.file", "Redis user configuration file");
-
- public static final AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
-
- public String getAddress();
-
- public String getConfigData(int port, boolean include);
+ PortAttributeSensorAndConfigKey REDIS_PORT = new PortAttributeSensorAndConfigKey("redis.port", "Redis port number", 6379);
+
+ @SetFromFlag("redisConfigTemplateUrl")
+ ConfigKey<String> REDIS_CONFIG_TEMPLATE_URL = new BasicConfigKey<String>(
+ String.class, "redis.config.templateUrl", "Template file (in freemarker format) for the redis.conf config file",
+ "classpath://brooklyn/entity/nosql/redis/redis.conf");
+
+ AttributeSensor<Integer> UPTIME = new BasicAttributeSensor<Integer>(Integer.class, "redis.uptime", "Redis uptime in seconds");
+
+ String getAddress();
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
index 5c454cd..bf6c171 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreImpl.java
@@ -4,15 +4,27 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Map;
+import javax.annotation.Nullable;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.entity.Entity;
import brooklyn.entity.basic.SoftwareProcessImpl;
+import brooklyn.event.feed.ssh.SshFeed;
+import brooklyn.event.feed.ssh.SshPollConfig;
+import brooklyn.event.feed.ssh.SshValueFunctions;
import brooklyn.location.MachineLocation;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.util.MutableMap;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+
/**
* An entity that represents a Redis key-value store service.
*
@@ -21,6 +33,8 @@ import brooklyn.util.MutableMap;
public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
protected static final Logger LOG = LoggerFactory.getLogger(RedisStore.class);
+ private transient SshFeed sshFeed;
+
public RedisStoreImpl() {
this(MutableMap.of(), null);
}
@@ -39,25 +53,37 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
super.connectSensors();
connectServiceUpIsRunning();
-
- // TODO IF desired, port this for setting UPTIME (because legacy sshAdapter is deleted)
-// String output = sshAdapter.newOutputValueProvider("${driver.runDir}/bin/redis-cli info").compute()
-// for (String line : output.split("\n")) {
-// if (line =~ /^uptime_in_seconds:/) {
-// String data = line.trim()
-// int colon = data.indexOf(":")
-// return Integer.parseInt(data.substring(colon + 1))
-// }
-// }
+
+ sshFeed = SshFeed.builder()
+ .entity(this)
+ .poll(new SshPollConfig<Integer>(UPTIME)
+ .command(getDriver().getRunDir() + "/bin/redis-cli info")
+ .onError(Functions.constant(-1))
+ .onSuccess(Functions.compose(new Function<String, Integer>(){
+ @Override
+ public Integer apply(@Nullable String input) {
+ Optional<String> line = Iterables.tryFind(Splitter.on('\n').split(input), Predicates.containsPattern("uptime_in_seconds:"));
+ if (line.isPresent()) {
+ String data = line.get().trim();
+ int colon = data.indexOf(":");
+ return Integer.parseInt(data.substring(colon + 1));
+ } else {
+ throw new IllegalStateException();
+ }
+ }
+ }, SshValueFunctions.stdout())))
+ .build();
}
@Override
public void disconnectSensors() {
super.disconnectSensors();
disconnectServiceUpIsRunning();
+ if (sshFeed != null && sshFeed.isActivated()) sshFeed.stop();
}
-
- public Class getDriverInterface() {
+
+ @Override
+ public Class<?> getDriverInterface() {
return RedisStoreDriver.class;
}
@@ -65,45 +91,11 @@ public class RedisStoreImpl extends SoftwareProcessImpl implements RedisStore {
public RedisStoreDriver getDriver() {
return (RedisStoreDriver) super.getDriver();
}
-
+
@Override
public String getAddress() {
MachineLocation machine = getMachineOrNull();
return (machine != null) ? machine.getAddress().getHostAddress() : null;
}
-
-
- // FIXME Don't want to hard-code this as SshMachineLocatoin; want generic way of doing machine.copyTo
- @Override
- protected SshMachineLocation getMachineOrNull() {
- return (SshMachineLocation) super.getMachineOrNull();
- }
-
- // FIXME This logic should all be in the driver
- void doExtraConfigurationDuringStart() {
- int port = getAttribute(REDIS_PORT);
- boolean include = false;
-
- String includeName = getConfig(REDIS_CONFIG_FILE);
- if (includeName != null && includeName.length() > 0) {
- File includeFile = new File(includeName);
- include = includeFile.exists();
- }
-
- getMachineOrNull().copyTo(new ByteArrayInputStream(getConfigData(port, include).getBytes()), getDriver().getRunDir()+"/redis.conf");
- if (include) getMachineOrNull().copyTo(new File(includeName), getDriver().getRunDir()+"/include.conf");
-
- super.configure();
- }
- @Override
- public String getConfigData(int port, boolean include) {
- String data =
- "daemonize yes"+"\n"+
- "pidfile "+getDriver().getRunDir()+"/pid.txt"+"\n"+
- "port "+port+"\n";
-
- if (include) data += "include "+getDriver().getRunDir()+"/include.conf";
- return data;
- }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
index 8b8e8ae..7cbe3c7 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/redis/RedisStoreSshDriver.java
@@ -68,10 +68,10 @@ public class RedisStoreSshDriver extends AbstractSoftwareProcessSshDriver implem
format("cd %s", getExpandedInstallDir()),
"make install PREFIX="+getRunDir())
.execute();
-
- getEntity().doExtraConfigurationDuringStart();
+
+ copyTemplate(getEntity().getConfig(RedisStore.REDIS_CONFIG_TEMPLATE_URL), "redis.conf");
}
-
+
@Override
public void launch() {
// TODO Should we redirect stdout/stderr: format(" >> %s/console 2>&1 </dev/null &", getRunDir())
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
new file mode 100644
index 0000000..b2dd5cb
--- /dev/null
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/redis.conf
@@ -0,0 +1,13 @@
+# Redis configuration file
+
+# Start as daemon
+daemonize yes
+pidfile ${driver.runDir}/pid.txt
+
+# Set port and optional bind address
+port ${entity.port}
+# bind ${driver.machine.address}
+
+# Configure logging
+loglevel verbose
+logfile ${driver.runDir}/redis.log
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
new file mode 100644
index 0000000..b2dd5cb
--- /dev/null
+++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/redis/slave.conf
@@ -0,0 +1,13 @@
+# Redis configuration file
+
+# Start as daemon
+daemonize yes
+pidfile ${driver.runDir}/pid.txt
+
+# Set port and optional bind address
+port ${entity.port}
+# bind ${driver.machine.address}
+
+# Configure logging
+loglevel verbose
+logfile ${driver.runDir}/redis.log
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/main/resources/redis-logo.png
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/resources/redis-logo.png b/software/nosql/src/main/resources/redis-logo.png
new file mode 100644
index 0000000..4ad2561
Binary files /dev/null and b/software/nosql/src/main/resources/redis-logo.png differ
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
index d49fee5..eb49ac9 100644
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisEc2LiveTest.java
@@ -1,12 +1,9 @@
package brooklyn.entity.nosql.redis;
-import static org.testng.Assert.assertTrue;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
-import redis.clients.jedis.Connection;
import brooklyn.entity.AbstractEc2LiveTest;
import brooklyn.entity.proxying.EntitySpecs;
import brooklyn.location.Location;
@@ -28,25 +25,18 @@ public class RedisEc2LiveTest extends AbstractEc2LiveTest {
@Override
protected void doTest(Location loc) throws Exception {
- // Start Redis
RedisStore redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
app.start(ImmutableList.of(loc));
EntityTestUtils.assertAttributeEqualsEventually(redis, RedisStore.SERVICE_UP, true);
- // Access Redis
- Connection connection = getRedisConnection(redis);
- assertTrue(connection.isConnected());
- connection.disconnect();
+ RedisSupport support = new RedisSupport(redis);
+ try {
+ support.redisTest();
+ } finally {
+ redis.stop();
+ }
}
- private Connection getRedisConnection(RedisStore redis) {
- String hostname = redis.getAttribute(RedisStore.HOSTNAME);
- int port = redis.getAttribute(RedisStore.REDIS_PORT);
- Connection connection = new Connection(hostname, port);
- connection.connect();
- return connection;
- }
-
@Test(enabled=false)
public void testDummy() {} // Convince testng IDE integration that this really does have test methods
}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
deleted file mode 100644
index 44d9e0e..0000000
--- a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.groovy
+++ /dev/null
@@ -1,93 +0,0 @@
-package brooklyn.entity.nosql.redis;
-
-import static brooklyn.test.TestUtils.*
-import static org.testng.Assert.*
-
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.testng.annotations.AfterMethod
-import org.testng.annotations.BeforeMethod
-import org.testng.annotations.Test
-
-import redis.clients.jedis.Connection
-import brooklyn.entity.basic.ApplicationBuilder
-import brooklyn.entity.basic.Entities
-import brooklyn.entity.proxying.EntitySpecs
-import brooklyn.entity.trait.Startable
-import brooklyn.location.Location
-import brooklyn.location.basic.LocalhostMachineProvisioningLocation
-import brooklyn.test.entity.TestApplication
-import brooklyn.util.internal.TimeExtras
-
-/**
- * Test the operation of the {@link RedisStore} class.
- *
- * TODO clarify test purpose
- */
-public class RedisIntegrationTest {
- private static final Logger log = LoggerFactory.getLogger(RedisIntegrationTest.class)
-
- static { TimeExtras.init() }
-
- private TestApplication app
- private Location testLocation
- private RedisStore redis
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- app = ApplicationBuilder.newManagedApp(TestApplication.class);
- testLocation = new LocalhostMachineProvisioningLocation(name:'london')
- }
-
- @AfterMethod(alwaysRun=true)
- public void shutdown() {
- if (app != null) Entities.destroyAll(app);
- }
-
- /**
- * Test that the server starts up and sets SERVICE_UP correctly.
- */
- // FIXME Marked as WIP because failing in jenkins; environmental differences?
- @Test(groups = ["Integration"])
- public void canStartupAndShutdown() {
- redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
- app.start([ testLocation ])
- executeUntilSucceeds() {
- assertTrue redis.getAttribute(Startable.SERVICE_UP)
- }
-
- redis.stop()
- assertFalse redis.getAttribute(Startable.SERVICE_UP)
- }
-
- /**
- * Test that a client can connect to the service.
- */
- // FIXME Marked as WIP because failing in jenkins; environmental differences?
- @Test(groups = ["Integration"])
- public void testRedisConnection() {
- // Start Redis
- redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
- app.start([ testLocation ])
- executeUntilSucceeds {
- assertTrue redis.getAttribute(Startable.SERVICE_UP)
- }
-
- try {
- // Access Redis
- Connection connection = getRedisConnection(redis)
- assertTrue connection.isConnected()
- connection.disconnect()
- } finally {
- // Stop broker
- redis.stop()
- }
- }
-
- private Connection getRedisConnection(RedisStore redis) {
- int port = redis.getAttribute(RedisStore.REDIS_PORT)
- Connection connection = new Connection("localhost", port)
- connection.connect()
- return connection
- }
-}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
new file mode 100644
index 0000000..1ddfa92
--- /dev/null
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisIntegrationTest.java
@@ -0,0 +1,77 @@
+package brooklyn.entity.nosql.redis;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.ApplicationBuilder;
+import brooklyn.entity.basic.Entities;
+import brooklyn.entity.proxying.EntitySpecs;
+import brooklyn.entity.trait.Startable;
+import brooklyn.location.Location;
+import brooklyn.location.basic.LocalhostMachineProvisioningLocation;
+import brooklyn.test.EntityTestUtils;
+import brooklyn.test.entity.TestApplication;
+import brooklyn.util.MutableMap;
+import brooklyn.util.internal.TimeExtras;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Test the operation of the {@link RedisStore} class.
+ */
+public class RedisIntegrationTest {
+
+ static { TimeExtras.init(); }
+
+ private TestApplication app;
+ private Location testLocation;
+ private RedisStore redis;
+
+ @BeforeMethod(alwaysRun=true)
+ public void setup() {
+ app = ApplicationBuilder.newManagedApp(TestApplication.class);
+ testLocation = new LocalhostMachineProvisioningLocation(MutableMap.of("name", "london"));
+ }
+
+ @AfterMethod(alwaysRun=true)
+ public void shutdown() {
+ if (app != null) Entities.destroyAll(app);
+ }
+
+ /**
+ * Test that the server starts up and sets SERVICE_UP correctly.
+ */
+ @Test(groups = { "Integration" })
+ public void canStartupAndShutdown() throws Exception {
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
+ app.start(ImmutableList.of(testLocation));
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, true);
+
+ redis.stop();
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, false);
+ }
+
+ /**
+ * Test that a client can connect to the service.
+ */
+ @Test(groups = { "Integration" })
+ public void testRedisConnection() throws Exception {
+ redis = app.createAndManageChild(EntitySpecs.spec(RedisStore.class));
+ app.start(ImmutableList.of(testLocation));
+
+ EntityTestUtils.assertAttributeEqualsEventually(redis, Startable.SERVICE_UP, true);
+
+ RedisSupport support = new RedisSupport(redis);
+ try {
+ support.redisTest();
+ } finally {
+ redis.stop();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-library/blob/e9cb1572/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
new file mode 100644
index 0000000..f617922
--- /dev/null
+++ b/software/nosql/src/test/java/brooklyn/entity/nosql/redis/RedisSupport.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012-2013 by Cloudsoft Corp.
+ */
+package brooklyn.entity.nosql.redis;
+
+import static org.testng.Assert.assertTrue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import redis.clients.jedis.Connection;
+
+/**
+ * {@link RedisStore} testing using Redis API.
+ */
+public class RedisSupport {
+ private static final Logger log = LoggerFactory.getLogger(RedisSupport.class);
+
+ private RedisStore redis;
+
+ public RedisSupport(RedisStore redis) {
+ this.redis = redis;
+ }
+
+ /**
+ * Exercise the {@link RedisStore} using the Redis API.
+ */
+ public void redisTest() throws Exception {
+ // Access Redis
+ Connection connection = getRedisConnection(redis);
+ assertTrue(connection.isConnected());
+ connection.disconnect();
+ }
+
+ private Connection getRedisConnection(RedisStore redis) {
+ int port = redis.getAttribute(RedisStore.REDIS_PORT);
+ Connection connection = new Connection("localhost", port);
+ connection.connect();
+ return connection;
+ }
+}