http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.java deleted file mode 100644 index 523cbda..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlIntegrationTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import java.io.File; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.Assert; -import org.testng.annotations.Test; - -import brooklyn.entity.BrooklynAppLiveTestSupport; -import brooklyn.entity.database.VogellaExampleAccess; -import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; -import brooklyn.util.collections.MutableMap; -import brooklyn.util.net.Networking; -import brooklyn.util.os.Os; - -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; -import com.google.common.io.Files; - -/** - * Runs a slightly modified version of the popular Vogella MySQL tutorial, - * from - * http://www.vogella.de/articles/MySQLJava/article.html - */ -public class MySqlIntegrationTest extends BrooklynAppLiveTestSupport { - - public static final Logger log = LoggerFactory.getLogger(MySqlIntegrationTest.class); - - // can start in AWS by running this -- or use brooklyn CLI/REST for most clouds, or programmatic/config for set of fixed IP machines - static String hostname = Networking.getLocalHost().getHostName(); - - // From http://www.vogella.de/articles/MySQLJava/article.html - // Expects COMMENTS to be injected as the test.table.name config value, for VogellaExampleAccess to work. - public static final String CREATION_SCRIPT = Joiner.on("\n").join(ImmutableList.of( - "CREATE DATABASE feedback;", - "CREATE USER 'sqluser'@'localhost' IDENTIFIED BY 'sqluserpw';", - "GRANT USAGE ON *.* TO 'sqluser'@'localhost';", - "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'localhost';", - "CREATE USER 'sqluser'@'%' IDENTIFIED BY 'sqluserpw';", - "GRANT USAGE ON *.* TO 'sqluser'@'%';", - "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'%';", - "CREATE USER 'sqluser'@'$hostname' IDENTIFIED BY 'sqluserpw';", - "GRANT USAGE ON *.* TO 'sqluser'@'$hostname';", - "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'$hostname';", - "FLUSH PRIVILEGES;", - "USE feedback;", - "CREATE TABLE ${config['test.table.name']} (", - " id INT NOT NULL AUTO_INCREMENT,", - " MYUSER VARCHAR(30) NOT NULL,", - " EMAIL VARCHAR(30), ", - " WEBPAGE VARCHAR(100) NOT NULL,", - " DATUM DATE NOT NULL, ", - " SUMMARY VARCHAR(40) NOT NULL,", - " COMMENTS VARCHAR(400) NOT NULL,", - " PRIMARY KEY (ID)", - " );", - "", - "INSERT INTO ${config['test.table.name']} values (default, 'lars', '[email protected]','http://www.vogella.de', '2009-09-14 10:33:11', 'Summary','My first comment' );" - )); - - @Test(groups = {"Integration"}) - public void test_localhost() throws Exception { - File dataDir = Files.createTempDir(); - try { - MySqlNode mysql = app.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure("mysql.server.conf", MutableMap.of("skip-name-resolve","")) - .configure("creationScriptContents", CREATION_SCRIPT) - .configure("dataDir", dataDir.getAbsolutePath()) - .configure("test.table.name", "COMMENTS")); // to ensure creation script is templated - LocalhostMachineProvisioningLocation location = new LocalhostMachineProvisioningLocation(); - - app.start(ImmutableList.of(location));; - log.info("MySQL started"); - - new VogellaExampleAccess("com.mysql.jdbc.Driver", mysql.getAttribute(MySqlNode.DATASTORE_URL)).readModifyAndRevertDataBase(); - - log.info("Ran vogella MySQL example -- SUCCESS"); - - // Ensure the data directory was successfully overridden. - File mysqlSubdirFile = new File(dataDir, "mysql"); - Assert.assertTrue(mysqlSubdirFile.exists()); - } finally { - Os.deleteRecursively(dataDir); - } - } -}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveEc2Test.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveEc2Test.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveEc2Test.java deleted file mode 100644 index c9d5e97..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveEc2Test.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.AbstractEc2LiveTest; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; - -import com.google.common.collect.ImmutableList; - -@Test(groups = { "Live" }) -public class MySqlLiveEc2Test extends AbstractEc2LiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - MySqlNode mysql = app.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS")); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("com.mysql.jdbc.Driver", mysql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } - - @Override - @Test(enabled=false, groups = "Live") - public void test_Debian_7_2() throws Exception { } // Disabled because MySQl not available - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveGceTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveGceTest.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveGceTest.java deleted file mode 100644 index f6322bd..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveGceTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.AbstractGoogleComputeLiveTest; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; - -import com.google.common.collect.ImmutableList; - -@Test(groups = { "Live" }) -public class MySqlLiveGceTest extends AbstractGoogleComputeLiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - MySqlNode mysql = app.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS")); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("com.mysql.jdbc.Driver", mysql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.java deleted file mode 100644 index 4175a7e..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlLiveRackspaceTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import java.util.Arrays; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.testng.annotations.Test; - -import brooklyn.config.BrooklynProperties; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import org.apache.brooklyn.location.basic.SshMachineLocation; -import org.apache.brooklyn.location.jclouds.JcloudsLocation; -import brooklyn.util.net.Protocol; -import brooklyn.util.ssh.IptablesCommands; -import brooklyn.util.ssh.IptablesCommands.Chain; -import brooklyn.util.ssh.IptablesCommands.Policy; - -import com.google.common.collect.ImmutableList; - -/** - * The MySqlLiveTest installs MySQL on various operating systems like Ubuntu, CentOS, Red Hat etc. To make sure that - * MySQL works like expected on these Operating Systems. - */ -public class MySqlLiveRackspaceTest extends MySqlIntegrationTest { - @Test(groups = {"Live"}) - public void test_Debian_6() throws Exception { - test("Debian 6"); - } - - @Test(groups = {"Live"}) - public void test_Ubuntu_10_0() throws Exception { - test("Ubuntu 10.0"); - } - - @Test(groups = {"Live", "Live-sanity"}) - public void test_Ubuntu_12_0() throws Exception { - test("Ubuntu 12.0"); - } - - @Test(groups = {"Live"}) - public void test_Ubuntu_13() throws Exception { - test("Ubuntu 13"); - } - - @Test(groups = {"Live"}) - public void test_CentOS_6() throws Exception { - test("CentOS 6"); - } - - @Test(groups = {"Live"}) - public void test_CentOS_5() throws Exception { - test("CentOS 5"); - } - - @Test(groups = {"Live"}) - public void test_Fedora() throws Exception { - test("Fedora "); - } - - @Test(groups = {"Live"}) - public void test_Red_Hat_Enterprise_Linux_6() throws Exception { - test("Red Hat Enterprise Linux 6"); - } - - @Test(enabled=false, groups = {"Live"}) // only run this in MySqlIntegrationTest - public void test_localhost() throws Exception { - super.test_localhost(); - } - - public void test(String osRegex) throws Exception { - MySqlNode mysql = app.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS")); - - BrooklynProperties brooklynProperties = mgmt.getBrooklynProperties(); - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageNameRegex", osRegex); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.image-id"); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageId"); - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.inboundPorts", Arrays.asList(22, 3306)); - JcloudsLocation jcloudsLocation = (JcloudsLocation) mgmt.getLocationRegistry().resolve("jclouds:rackspace-cloudservers-uk"); - - app.start(ImmutableList.of(jcloudsLocation)); - - SshMachineLocation l = (SshMachineLocation) mysql.getLocations().iterator().next(); - l.execCommands("add iptables rule", ImmutableList.of(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, 3306, Policy.ACCEPT))); - - new VogellaExampleAccess("com.mysql.jdbc.Driver", mysql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlRestartIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlRestartIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlRestartIntegrationTest.java deleted file mode 100644 index ccc0e19..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MySqlRestartIntegrationTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.annotations.Test; - -import brooklyn.entity.basic.AbstractSoftwareProcessRestartIntegrationTest; -import brooklyn.entity.basic.SoftwareProcess; - -/** - * Tests restart of the software *process* (as opposed to the VM). - */ -@Test(groups="Integration") -public class MySqlRestartIntegrationTest extends AbstractSoftwareProcessRestartIntegrationTest { - - @SuppressWarnings("unused") - private static final Logger LOG = LoggerFactory.getLogger(MySqlRestartIntegrationTest.class); - - @Override - protected EntitySpec<? extends SoftwareProcess> newEntitySpec() { - return EntitySpec.create(MySqlNode.class); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/mysql/MysqlDockerLiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/mysql/MysqlDockerLiveTest.java b/software/database/src/test/java/brooklyn/entity/database/mysql/MysqlDockerLiveTest.java deleted file mode 100644 index 0642dd6..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/mysql/MysqlDockerLiveTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.mysql; - -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import brooklyn.entity.software.AbstractDockerLiveTest; - -import com.google.common.collect.ImmutableList; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -public class MysqlDockerLiveTest extends AbstractDockerLiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - MySqlNode mysql = app.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS")); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("com.mysql.jdbc.Driver", mysql.getAttribute(DatastoreCommon.DATASTORE_URL)) - .readModifyAndRevertDataBase(); - } - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqDockerLiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqDockerLiveTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqDockerLiveTest.java deleted file mode 100644 index 8b23415..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqDockerLiveTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import brooklyn.entity.software.AbstractDockerLiveTest; - -import com.google.common.collect.ImmutableList; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -public class PostgreSqDockerLiveTest extends AbstractDockerLiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - PostgreSqlNode psql = app.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT)); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("org.postgresql.Driver", psql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlChefTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlChefTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlChefTest.java deleted file mode 100644 index 36eb963..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlChefTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import java.util.Random; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.Assert; -import org.testng.annotations.Test; - -import brooklyn.entity.basic.Entities; -import brooklyn.entity.chef.ChefLiveTestSupport; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import brooklyn.entity.effector.EffectorTasks; -import brooklyn.entity.software.SshEffectorTasks; - -import org.apache.brooklyn.api.location.PortRange; -import org.apache.brooklyn.core.util.task.system.ProcessTaskWrapper; -import org.apache.brooklyn.location.basic.PortRanges; -import org.apache.brooklyn.location.basic.SshMachineLocation; - -import brooklyn.util.time.Duration; - -import com.google.common.collect.ImmutableList; - -/** - * Tests Chef installation of PostgreSql. Requires chef-server (knife). - * <p> - * To be able to run repeatedly on the same box, you will need the patched version of the postgresql library, - * at https://github.com/opscode-cookbooks/postgresql/pull/73 . - * - * @author alex - * - */ -public class PostgreSqlChefTest extends ChefLiveTestSupport { - - private static final Logger log = LoggerFactory.getLogger(PostgreSqlChefTest.class); - - PostgreSqlNode psql; - - @Test(groups="Live") - public void testPostgresStartsAndStops() throws Exception { - ChefLiveTestSupport.installBrooklynChefHostedConfig(app); - psql = app.createAndManageChild(PostgreSqlSpecs.specChef()); - - app.start(ImmutableList.of(targetLocation)); - - Entities.submit(psql, SshEffectorTasks.ssh("ps aux | grep [p]ostgres").requiringExitCodeZero()); - SshMachineLocation targetMachine = EffectorTasks.getSshMachine(psql); - - psql.stop(); - - try { - // if host is still contactable ensure postgres is not running - ProcessTaskWrapper<Integer> t = Entities.submit(app, SshEffectorTasks.ssh("ps aux | grep [p]ostgres").machine(targetMachine).allowingNonZeroExitCode()); - t.getTask().blockUntilEnded(Duration.TEN_SECONDS); - if (!t.isDone()) - Assert.fail("Task not finished yet: "+t.getTask()); - Assert.assertNotEquals(t.get(), (Integer)0, "Task ended with code "+t.get()+"; output: "+t.getStdout() ); - } catch (Exception e) { - // host has been killed, that is fine - log.info("Machine "+targetMachine+" destroyed on stop (expected - "+e+")"); - } - } - - @Test(groups="Live") - public void testPostgresScriptAndAccess() throws Exception { - ChefLiveTestSupport.installBrooklynChefHostedConfig(app); - PortRange randomPort = PortRanges.fromString(String.format("%d+", 5420 + new Random().nextInt(10))); - psql = app.createAndManageChild(PostgreSqlSpecs.specChef() - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, randomPort) - .configure(PostgreSqlNode.SHARED_MEMORY, "8MB") - ); - - app.start(ImmutableList.of(targetLocation)); - - String url = psql.getAttribute(DatastoreCommon.DATASTORE_URL); - log.info("Trying to connect to "+psql+" at "+url); - Assert.assertNotNull(url); - Assert.assertTrue(url.contains("542")); - - new VogellaExampleAccess("org.postgresql.Driver", url).readModifyAndRevertDataBase(); - } - -} - http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlEc2LiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlEc2LiveTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlEc2LiveTest.java deleted file mode 100644 index 5eda573..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlEc2LiveTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.AbstractEc2LiveTest; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; - -import com.google.common.collect.ImmutableList; - -public class PostgreSqlEc2LiveTest extends AbstractEc2LiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - PostgreSqlNode psql = app.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT)); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("org.postgresql.Driver", psql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } - - @Override - @Test(enabled=false, groups = "Live") - public void test_Debian_6() throws Exception { } // Disabled because PostgreSql 9.1 not available - - @Override - @Test(enabled=false, groups = "Live") - public void test_Ubuntu_10_0() throws Exception { } // Disabled because PostgreSql 9.1 not available - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlGceLiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlGceLiveTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlGceLiveTest.java deleted file mode 100644 index 70e44e0..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlGceLiveTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.AbstractGoogleComputeLiveTest; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; - -import com.google.common.collect.ImmutableList; - -public class PostgreSqlGceLiveTest extends AbstractGoogleComputeLiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - PostgreSqlNode psql = app.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT)); - - app.start(ImmutableList.of(loc)); - - new VogellaExampleAccess("org.postgresql.Driver", psql.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); - } - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.java deleted file mode 100644 index 7cb5863..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlIntegrationTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.management.ManagementContext; -import org.apache.brooklyn.core.management.internal.LocalManagementContext; -import org.apache.brooklyn.test.entity.TestApplication; -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.config.BrooklynProperties; -import brooklyn.entity.basic.ApplicationBuilder; -import brooklyn.entity.basic.Entities; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; - -import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; - -import com.google.common.collect.ImmutableList; - -/** - * Runs the popular Vogella MySQL tutorial against PostgreSQL - * from - * http://www.vogella.de/articles/MySQLJava/article.html - */ -public class PostgreSqlIntegrationTest { - - public static final Logger log = LoggerFactory.getLogger(PostgreSqlIntegrationTest.class); - - protected BrooklynProperties brooklynProperties; - protected ManagementContext managementContext; - protected TestApplication tapp; - - @BeforeMethod(alwaysRun = true) - public void setUp() { - brooklynProperties = BrooklynProperties.Factory.newDefault(); - managementContext = new LocalManagementContext(brooklynProperties); - tapp = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext); - } - - @AfterMethod(alwaysRun = true) - public void ensureShutDown() { - Entities.destroyAllCatching(managementContext); - } - - //from http://www.vogella.de/articles/MySQLJava/article.html - public static final String CREATION_SCRIPT = - "CREATE USER sqluser WITH PASSWORD 'sqluserpw';\n" + - "CREATE DATABASE feedback OWNER sqluser;\n" + - "\\c feedback;\n" + - "CREATE TABLE COMMENTS ( " + - "id INT8 NOT NULL, " + - "MYUSER VARCHAR(30) NOT NULL, " + - "EMAIL VARCHAR(30), " + - "WEBPAGE VARCHAR(100) NOT NULL, " + - "DATUM DATE NOT NULL, " + - "SUMMARY VARCHAR(40) NOT NULL, " + - "COMMENTS VARCHAR(400) NOT NULL, " + - "PRIMARY KEY (ID) " + - ");\n" + - "GRANT ALL ON comments TO sqluser;\n" + - "INSERT INTO COMMENTS values (1, 'lars', '[email protected]','http://www.vogella.de', '2009-09-14 10:33:11', 'Summary','My first comment' );"; - - @Test(groups = "Integration") - public void test_localhost() throws Exception { - PostgreSqlNode pgsql = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, CREATION_SCRIPT) - .configure(PostgreSqlNode.MAX_CONNECTIONS, 10) - .configure(PostgreSqlNode.SHARED_MEMORY, "512kB")); // Very low so kernel configuration not needed - - tapp.start(ImmutableList.of(new LocalhostMachineProvisioningLocation())); - String url = pgsql.getAttribute(DatastoreCommon.DATASTORE_URL); - log.info("PostgreSql started on "+url); - new VogellaExampleAccess("org.postgresql.Driver", url).readModifyAndRevertDataBase(); - log.info("Ran vogella PostgreSql example -- SUCCESS"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRackspaceLiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRackspaceLiveTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRackspaceLiveTest.java deleted file mode 100644 index bd6abbf..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRackspaceLiveTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import java.util.Arrays; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.testng.annotations.Test; - -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import org.apache.brooklyn.location.basic.PortRanges; -import org.apache.brooklyn.location.basic.SshMachineLocation; -import org.apache.brooklyn.location.jclouds.JcloudsLocation; -import brooklyn.util.net.Protocol; -import brooklyn.util.ssh.IptablesCommands; -import brooklyn.util.ssh.IptablesCommands.Chain; -import brooklyn.util.ssh.IptablesCommands.Policy; - -import com.google.common.collect.ImmutableList; - -/** - * The PostgreSqlRackspaceLiveTest installs Postgresql on various operating systems like Ubuntu, CentOS, Red Hat etc. To - * make sure that PostgreSql works like expected on these Operating Systems. - */ -public class PostgreSqlRackspaceLiveTest extends PostgreSqlIntegrationTest { - @Test(groups = "Live") - public void test_Debian_6() throws Exception { - test("Debian 6"); - } - - @Test(groups = "Live") - public void test_Ubuntu_10_0() throws Exception { - test("Ubuntu 10.0"); - } - - @Test(groups = "Live") - public void test_Ubuntu_11_0() throws Exception { - test("Ubuntu 11.0"); - } - - @Test(groups = "Live") - public void test_Ubuntu_12_0() throws Exception { - test("Ubuntu 12.0"); - } - - @Test(groups = "Live") - public void test_CentOS_6_0() throws Exception { - test("CentOS 6.0"); - } - - @Test(groups = "Live") - public void test_CentOS_5_6() throws Exception { - test("CentOS 5.6"); - } - - @Test(groups = "Live") - public void test_Fedora_17() throws Exception { - test("Fedora 17"); - } - - @Test(groups = "Live") - public void test_Red_Hat_Enterprise_Linux_6() throws Exception { - test("Red Hat Enterprise Linux 6"); - } - - @Test(groups = "Live") - public void test_localhost() throws Exception { - super.test_localhost(); - } - - public void test(String osRegex) throws Exception { - PostgreSqlNode psql = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(5432)) - .configure(PostgreSqlNode.SHARED_MEMORY, "32MB")); - - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageNameRegex", osRegex); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.image-id"); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageId"); - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.inboundPorts", Arrays.asList(22, 5432)); - JcloudsLocation jcloudsLocation = (JcloudsLocation) managementContext.getLocationRegistry().resolve("jclouds:rackspace-cloudservers-uk"); - - tapp.start(ImmutableList.of(jcloudsLocation)); - - SshMachineLocation l = (SshMachineLocation) psql.getLocations().iterator().next(); - l.execCommands("add iptables rule", ImmutableList.of(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, 5432, Policy.ACCEPT))); - - String url = psql.getAttribute(DatastoreCommon.DATASTORE_URL); - new VogellaExampleAccess("org.postgresql.Driver", url).readModifyAndRevertDataBase(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java deleted file mode 100644 index 8a00587..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRebindIntegrationTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.test.EntityTestUtils; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import brooklyn.entity.rebind.RebindTestFixtureWithApp; -import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; - -import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; - -public class PostgreSqlRebindIntegrationTest extends RebindTestFixtureWithApp { - - private LocalhostMachineProvisioningLocation loc; - - @BeforeMethod(alwaysRun=true) - @Override - public void setUp() throws Exception { - super.setUp(); - loc = origApp.newLocalhostProvisioningLocation(); - } - - @Test(groups = {"Integration"}) - public void testRebind() throws Exception { - origApp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class)); - origApp.start(ImmutableList.of(loc)); - - // rebind - rebind(); - final PostgreSqlNode newEntity = (PostgreSqlNode) Iterables.find(newApp.getChildren(), Predicates.instanceOf(PostgreSqlNode.class)); - - // confirm effectors still work on entity - EntityTestUtils.assertAttributeEqualsEventually(newEntity, PostgreSqlNode.SERVICE_UP, true); - newEntity.stop(); - EntityTestUtils.assertAttributeEqualsEventually(newEntity, PostgreSqlNode.SERVICE_UP, false); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRestartIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRestartIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRestartIntegrationTest.java deleted file mode 100644 index ba2ff29..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/postgresql/PostgreSqlRestartIntegrationTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.postgresql; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.annotations.Test; - -import brooklyn.entity.basic.AbstractSoftwareProcessRestartIntegrationTest; -import brooklyn.entity.basic.SoftwareProcess; - -/** - * Tests restart of the software *process* (as opposed to the VM). - */ -@Test(groups="Integration") -public class PostgreSqlRestartIntegrationTest extends AbstractSoftwareProcessRestartIntegrationTest { - - @SuppressWarnings("unused") - private static final Logger LOG = LoggerFactory.getLogger(PostgreSqlRestartIntegrationTest.class); - - @Override - protected EntitySpec<? extends SoftwareProcess> newEntitySpec() { - return EntitySpec.create(PostgreSqlNode.class); - } - - // TODO The second start() will fail because customize operations forbidden while there is existing data: - // "If you want to create a new database system, either remove or empty". - // I haven't checked whether it damaged the data in the database though! - @Test(enabled=false, groups={"Integration", "WIP"}) - public void testStopProcessAndStart() throws Exception { - super.testStopProcessAndStart(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepEc2LiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepEc2LiveTest.java b/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepEc2LiveTest.java deleted file mode 100644 index c53db06..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepEc2LiveTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.rubyrep; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.AbstractEc2LiveTest; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.postgresql.PostgreSqlIntegrationTest; -import brooklyn.entity.database.postgresql.PostgreSqlNode; - -import org.apache.brooklyn.location.basic.PortRanges; - -public class RubyRepEc2LiveTest extends AbstractEc2LiveTest { - - @Override - protected void doTest(Location loc) throws Exception { - PostgreSqlNode db1 = app.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9111))); - - PostgreSqlNode db2 = app.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9111))); - - RubyRepIntegrationTest.startInLocation(app, db1, db2, loc); - RubyRepIntegrationTest.testReplication(db1, db2); - } - - @Override - @Test(enabled=false, groups = "Live") - public void test_Debian_6() throws Exception { } // Disabled because PostgreSql 9.1 not available - - @Override - @Test(enabled=false, groups = "Live") - public void test_Ubuntu_10_0() throws Exception { } // Disabled because PostgreSql 9.1 not available - - @Override - @Test(enabled=false, groups = "Live") - public void test_Debian_7_2() throws Exception { } // Diabling all except Ubuntu 12.0 temporarily - - @Override - @Test(enabled=false, groups = "Live") - public void test_CentOS_6_3() throws Exception { } // Diabling all except Ubuntu 12.0 temporarily - - @Override - @Test(enabled=false, groups = "Live") - public void test_CentOS_5() throws Exception { } // Diabling all except Ubuntu 12.0 temporarily - - @Override - @Test(enabled=false, groups = "Live") - public void test_Red_Hat_Enterprise_Linux_6() throws Exception { } // Diabling all except Ubuntu 12.0 temporarily - - @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/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java b/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java deleted file mode 100644 index 7028d1b..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepIntegrationTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.rubyrep; - -import static org.testng.Assert.assertEquals; - -import java.util.Arrays; -import java.util.List; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.apache.brooklyn.api.management.ManagementContext; -import org.apache.brooklyn.core.management.internal.LocalManagementContext; -import org.apache.brooklyn.test.entity.TestApplication; -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.config.BrooklynProperties; -import brooklyn.entity.basic.ApplicationBuilder; -import brooklyn.entity.basic.Entities; -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.VogellaExampleAccess; -import brooklyn.entity.database.mysql.MySqlIntegrationTest; -import brooklyn.entity.database.mysql.MySqlNode; -import brooklyn.entity.database.postgresql.PostgreSqlIntegrationTest; -import brooklyn.entity.database.postgresql.PostgreSqlNode; - -import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; -import org.apache.brooklyn.location.basic.PortRanges; - -public class RubyRepIntegrationTest { - - public static final Logger log = LoggerFactory.getLogger(RubyRepIntegrationTest.class); - protected BrooklynProperties brooklynProperties; - protected ManagementContext managementContext; - protected TestApplication tapp; - - @BeforeMethod(alwaysRun = true) - public void setUp() { - brooklynProperties = BrooklynProperties.Factory.newDefault(); - managementContext = new LocalManagementContext(brooklynProperties); - tapp = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext); - } - - @AfterMethod(alwaysRun = true) - public void tearDown() { - Entities.destroyAllCatching(managementContext); - } - - @Test(groups = "Integration") - public void test_localhost_mysql() throws Exception { - MySqlNode db1 = tapp.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS") - .configure(MySqlNode.MYSQL_PORT, PortRanges.fromInteger(9111))); - - MySqlNode db2 = tapp.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure("test.table.name", "COMMENTS") - .configure(MySqlNode.MYSQL_PORT, PortRanges.fromInteger(9112))); - - - startInLocation(tapp, db1, db2, new LocalhostMachineProvisioningLocation()); - testReplication(db1, db2); - } - - /** - * Altered to use a single postgresql server to avoid issues with shared memory limits - */ - @Test(groups = {"Integration"}) - public void test_localhost_postgres() throws Exception { - String createTwoDbsScript = PostgreSqlIntegrationTest.CREATION_SCRIPT + - PostgreSqlIntegrationTest.CREATION_SCRIPT.replaceAll("CREATE USER.*", "").replaceAll(" feedback", " feedback1"); - - PostgreSqlNode db1 = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, createTwoDbsScript) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9113)) - .configure(PostgreSqlNode.MAX_CONNECTIONS, 10) - .configure(PostgreSqlNode.SHARED_MEMORY, "512kB")); // Very low so kernel configuration not needed - - startInLocation(tapp, db1, "feedback", db1, "feedback1", new LocalhostMachineProvisioningLocation()); - testReplication(db1, "feedback", db1, "feedback1"); - } - - @Test(enabled = false, groups = "Integration") // TODO this doesn't appear to be supported by RubyRep - public void test_localhost_postgres_mysql() throws Exception { - PostgreSqlNode db1 = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9115)) - .configure(PostgreSqlNode.MAX_CONNECTIONS, 10) - .configure(PostgreSqlNode.SHARED_MEMORY, "512kB")); // Very low so kernel configuration not needed - - MySqlNode db2 = tapp.createAndManageChild(EntitySpec.create(MySqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MySqlIntegrationTest.CREATION_SCRIPT) - .configure(MySqlNode.MYSQL_PORT, PortRanges.fromInteger(9116))); - - startInLocation(tapp, db1, db2, new LocalhostMachineProvisioningLocation()); - testReplication(db1, db2); - } - - public static void startInLocation(TestApplication tapp, DatastoreCommon db1, DatastoreCommon db2, Location... locations) throws Exception { - startInLocation(tapp, db1, "feedback", db2, "feedback", locations); - } - - /** - * Configures rubyrep to connect to the two databases and starts the app - */ - public static void startInLocation(TestApplication tapp, DatastoreCommon db1, String dbName1, DatastoreCommon db2, String dbName2, Location... locations) throws Exception { - tapp.createAndManageChild(EntitySpec.create(RubyRepNode.class) - .configure("startupTimeout", 300) - .configure("leftDatabase", db1) - .configure("rightDatabase", db2) - .configure("leftUsername", "sqluser") - .configure("rightUsername", "sqluser") - .configure("rightPassword", "sqluserpw") - .configure("leftPassword", "sqluserpw") - .configure("leftDatabaseName", dbName1) - .configure("rightDatabaseName", dbName2) - .configure("replicationInterval", 1) - ); - - tapp.start(Arrays.asList(locations)); - } - - public static void testReplication(DatastoreCommon db1, DatastoreCommon db2) throws Exception { - testReplication(db1, "feedback", db2, "feedback"); - } - - /** - * Tests replication between the two databases by altering the first and checking the change is applied to the second - */ - public static void testReplication(DatastoreCommon db1, String dbName1, DatastoreCommon db2, String dbName2) throws Exception { - String db1Url = db1.getAttribute(DatastoreCommon.DATASTORE_URL); - String db2Url = db2.getAttribute(DatastoreCommon.DATASTORE_URL); - - log.info("Testing replication between " + db1Url + " and " + db2Url); - - VogellaExampleAccess vea1 = new VogellaExampleAccess(db1 instanceof MySqlNode ? "com.mysql.jdbc.Driver" : "org.postgresql.Driver", db1Url, dbName1); - VogellaExampleAccess vea2 = new VogellaExampleAccess(db2 instanceof MySqlNode ? "com.mysql.jdbc.Driver" : "org.postgresql.Driver", db2Url, dbName2); - - try { - vea1.connect(); - List<List<String>> rs = vea1.readDataBase(); - assertEquals(rs.size(), 1); - - vea2.connect(); - rs = vea2.readDataBase(); - assertEquals(rs.size(), 1); - - log.info("Modifying left database"); - vea1.modifyDataBase(); - - log.info("Reading left database"); - rs = vea1.readDataBase(); - assertEquals(rs.size(), 2); - - log.info("Reading right database"); - rs = vea2.readDataBase(); - - for (int i = 0; i < 60 && rs.size() != 2; i++) { - log.info("Sleeping for a second"); - Thread.sleep(1000); - rs = vea2.readDataBase(); - } - - assertEquals(rs.size(), 2); - } finally { - vea1.close(); - vea2.close(); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepRackspaceLiveTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepRackspaceLiveTest.java b/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepRackspaceLiveTest.java deleted file mode 100644 index 845dce7..0000000 --- a/software/database/src/test/java/brooklyn/entity/database/rubyrep/RubyRepRackspaceLiveTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package brooklyn.entity.database.rubyrep; - -import java.util.Arrays; - -import org.apache.brooklyn.api.entity.proxying.EntitySpec; -import org.apache.brooklyn.api.location.Location; -import org.testng.annotations.Test; - -import brooklyn.entity.database.DatastoreMixins.DatastoreCommon; -import brooklyn.entity.database.postgresql.PostgreSqlIntegrationTest; -import brooklyn.entity.database.postgresql.PostgreSqlNode; - -import org.apache.brooklyn.location.basic.PortRanges; -import org.apache.brooklyn.location.basic.SshMachineLocation; - -import brooklyn.util.net.Protocol; -import brooklyn.util.ssh.IptablesCommands; -import brooklyn.util.ssh.IptablesCommands.Chain; -import brooklyn.util.ssh.IptablesCommands.Policy; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; - -/** - * The RubyRepRackspaceLiveTest installs RubyRep on various operating systems like Ubuntu, CentOS, Red Hat etc. To make sure that - * RubyRep and PostgreSql works like expected on these Operating Systems. - */ -public class RubyRepRackspaceLiveTest extends RubyRepIntegrationTest { - - @Test(groups = "Live") - public void test_Debian_6() throws Exception { - test("Debian 6"); - } - - @Test(groups = "Live") - public void test_Ubuntu_10_0() throws Exception { - test("Ubuntu 10.0"); - } - - @Test(groups = "Live") - public void test_Ubuntu_12_0() throws Exception { - test("Ubuntu 12.0"); - } - - @Test(groups = "Live") - public void test_Ubuntu_13() throws Exception { - test("Ubuntu 13"); - } - - @Test(groups = "Live") - public void test_CentOS_6() throws Exception { - test("CentOS 6"); - } - - @Test(groups = "Live") - public void test_CentOS_5() throws Exception { - test("CentOS 5"); - } - - @Test(groups = "Live") - public void test_Fedora() throws Exception { - test("Fedora "); - } - - @Test(groups = "Live") - public void test_Red_Hat_Enterprise_Linux_6() throws Exception { - test("Red Hat Enterprise Linux 6"); - } - - public void test(String osRegex) throws Exception { - PostgreSqlNode db1 = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9111))); - PostgreSqlNode db2 = tapp.createAndManageChild(EntitySpec.create(PostgreSqlNode.class) - .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, PostgreSqlIntegrationTest.CREATION_SCRIPT) - .configure(PostgreSqlNode.POSTGRESQL_PORT, PortRanges.fromInteger(9111))); - - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageNameRegex", osRegex); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.image-id"); - brooklynProperties.remove("brooklyn.location.jclouds.rackspace-cloudservers-uk.imageId"); - brooklynProperties.put("brooklyn.location.jclouds.rackspace-cloudservers-uk.inboundPorts", Arrays.asList(22, 9111)); - Location loc = managementContext.getLocationRegistry().resolve("jclouds:rackspace-cloudservers-uk"); - - startInLocation(tapp, db1, db2, loc); - - //hack to get the port for mysql open; is the inbounds property not respected on rackspace?? - for (DatastoreCommon node : ImmutableSet.of(db1, db2)) { - SshMachineLocation l = (SshMachineLocation) node.getLocations().iterator().next(); - l.execCommands("add iptables rule", ImmutableList.of(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, 9111, Policy.ACCEPT))); - } - - testReplication(db1, db2); - } - - // disable inherited non-live tests - @Test(enabled = false, groups = "Integration") - public void test_localhost_mysql() throws Exception { - super.test_localhost_mysql(); - } - - // disable inherited non-live tests - @Test(enabled = false, groups = "Integration") - public void test_localhost_postgres() throws Exception { - super.test_localhost_postgres(); - } - - // disable inherited non-live tests - @Test(enabled = false, groups = "Integration") - public void test_localhost_postgres_mysql() throws Exception { - super.test_localhost_postgres_mysql(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/org/apache/brooklyn/entity/database/VogellaExampleAccess.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/org/apache/brooklyn/entity/database/VogellaExampleAccess.java b/software/database/src/test/java/org/apache/brooklyn/entity/database/VogellaExampleAccess.java new file mode 100644 index 0000000..6b5a6cb --- /dev/null +++ b/software/database/src/test/java/org/apache/brooklyn/entity/database/VogellaExampleAccess.java @@ -0,0 +1,161 @@ +/* + * 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.entity.database; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; + +import java.sql.*; +import java.util.List; + +/** + * Basic JDBC Access test Class, based on the Vogella MySQL tutorial + * http://www.vogella.de/articles/MySQLJava/article.html + */ +public class VogellaExampleAccess { + public static final Logger log = LoggerFactory.getLogger(VogellaExampleAccess.class); + + private Connection connect = null; + private Statement statement = null; + private final String url; + private final String dbName; + + public VogellaExampleAccess(String driverClass, String url) throws ClassNotFoundException { + this(driverClass, url, "feedback"); + } + + public VogellaExampleAccess(String driverClass, String url, String dbName) throws ClassNotFoundException { + // This will load the JDBC driver, each DB has its own driver + Class.forName(driverClass); + this.url = url; + this.dbName = dbName; + } + + public void readModifyAndRevertDataBase() throws Exception { + connect(); + readDataBase(); + modifyDataBase(); + revertDatabase(); + close(); + } + + public void connect() throws Exception { + try { + // Setup the connection with the DB + String jdbcUrl = "jdbc:" + url + dbName + "?" + "user=sqluser&password=sqluserpw"; + log.info("Connecting to " + jdbcUrl); + connect = DriverManager.getConnection(jdbcUrl); + + // Statements allow to issue SQL queries to the database + statement = connect.createStatement(); + } catch (Exception ex) { + close(); + throw ex; + } + } + + public List<List<String>> readDataBase() throws Exception { + List<List<String>> results = Lists.newArrayList(); + // Result set get the result of the SQL query + ResultSet resultSet = statement.executeQuery("SELECT myuser, webpage, datum, summary, COMMENTS from COMMENTS"); + // ResultSet is initially before the first data set + while (resultSet.next()) { + List<String> row = Lists.newArrayList(); + for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { + row.add(resultSet.getObject(i).toString()); + } + results.add(row); + } + // Should close resultsets + resultSet.close(); + writeResultSet(results); + return results; + } + + public void modifyDataBase() throws Exception { + // PreparedStatements can use variables and are more efficient + PreparedStatement preparedStatement = connect.prepareStatement("insert into COMMENTS values (?, ?, ?, ?, ? , ?, ?)"); + // "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS"); + // Parameters start with 1 + preparedStatement.setInt(1, 2); + preparedStatement.setString(2, "Test"); + preparedStatement.setString(3, "TestEmail"); + preparedStatement.setString(4, "TestWebpage"); + preparedStatement.setDate(5, new Date(new java.util.Date().getTime())); + preparedStatement.setString(6, "TestSummary"); + preparedStatement.setString(7, "TestComment"); + preparedStatement.executeUpdate(); + + writeResultSet(readDataBase()); + preparedStatement.close(); + } + + // Remove again the insert comment added by modifyDataBase() + public void revertDatabase() throws Exception { + PreparedStatement preparedStatement = connect + .prepareStatement("delete from COMMENTS where myuser= ? ; "); + preparedStatement.setString(1, "Test"); + preparedStatement.executeUpdate(); + + ResultSet resultSet = statement.executeQuery("select * from COMMENTS"); + writeMetaData(resultSet); + // Should close resultsets + resultSet.close(); + } + + private void writeMetaData(ResultSet resultSet) throws SQLException { + // Get some metadata from the database + log.info("The columns in the table are: "); + + log.info("Table: " + resultSet.getMetaData().getTableName(1)); + for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { + log.info("Column " + i + " " + resultSet.getMetaData().getColumnName(i)); + } + } + + private void writeResultSet(List<List<String>> resultSet) throws SQLException { + for (List<String> row : resultSet) { + String user = row.get(0); + String website = row.get(1); + String date = row.get(2); + String summary = row.get(3); + String comment = row.get(4); + log.info("User: " + user); + log.info("Website: " + website); + log.info("Summary: " + summary); + log.info("Date: " + date); + log.info("Comment: " + comment); + } + } + + // You should always close the statement and connection + public void close() throws Exception { + if (statement != null) { + statement.close(); + statement = null; + } + + if (connect != null) { + connect.close(); + connect = null; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/org/apache/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/org/apache/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java b/software/database/src/test/java/org/apache/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java new file mode 100644 index 0000000..e91b4ad --- /dev/null +++ b/software/database/src/test/java/org/apache/brooklyn/entity/database/crate/CrateNodeIntegrationTest.java @@ -0,0 +1,64 @@ +/* + * 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.entity.database.crate; + +import static org.testng.Assert.assertFalse; + +import org.apache.brooklyn.api.entity.proxying.EntitySpec; +import org.apache.brooklyn.test.EntityTestUtils; +import org.apache.brooklyn.test.entity.TestApplication; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +import brooklyn.entity.basic.ApplicationBuilder; +import brooklyn.entity.basic.Entities; +import brooklyn.entity.trait.Startable; +import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; + +public class CrateNodeIntegrationTest { + + private TestApplication app; + private LocalhostMachineProvisioningLocation localhostProvisioningLocation; + + @BeforeMethod(alwaysRun = true) + public void setUp() throws Exception { + localhostProvisioningLocation = new LocalhostMachineProvisioningLocation(); + app = ApplicationBuilder.newManagedApp(TestApplication.class); + } + + @AfterMethod(alwaysRun = true) + public void tearDown() throws Exception { + if (app != null) Entities.destroyAll(app.getManagementContext()); + } + + @Test(groups = "Integration") + public void testCanStartAndStop() throws Exception { + CrateNode entity = app.createAndManageChild(EntitySpec.create(CrateNode.class)); + app.start(ImmutableList.of(localhostProvisioningLocation)); + + EntityTestUtils.assertAttributeEqualsEventually(entity, Startable.SERVICE_UP, true); + EntityTestUtils.assertAttributeEventuallyNonNull(entity, CrateNode.SERVER_NAME); + + entity.stop(); + assertFalse(entity.getAttribute(Startable.SERVICE_UP)); + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.java b/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.java new file mode 100644 index 0000000..8e846e1 --- /dev/null +++ b/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbIntegrationTest.java @@ -0,0 +1,125 @@ +/* + * 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.entity.database.mariadb; + +import java.io.File; +import java.net.InetAddress; + +import org.apache.brooklyn.api.entity.proxying.EntitySpec; +import org.apache.brooklyn.api.management.ManagementContext; +import org.apache.brooklyn.core.management.internal.LocalManagementContext; +import org.apache.brooklyn.test.entity.TestApplication; +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 brooklyn.config.BrooklynProperties; +import brooklyn.entity.basic.ApplicationBuilder; +import brooklyn.entity.basic.Entities; +import org.apache.brooklyn.entity.database.DatastoreMixins.DatastoreCommon; +import org.apache.brooklyn.entity.database.VogellaExampleAccess; +import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation; +import brooklyn.util.collections.MutableMap; +import brooklyn.util.text.Strings; + +import com.google.common.collect.ImmutableList; + +/** + * Runs a slightly modified version of the popular Vogella MySQL tutorial, + * from + * http://www.vogella.de/articles/MySQLJava/article.html + */ +public class MariaDbIntegrationTest { + + public static final Logger log = LoggerFactory.getLogger(MariaDbIntegrationTest.class); + + protected BrooklynProperties brooklynProperties; + protected ManagementContext managementContext; + protected TestApplication tapp; + protected String hostname; + + @BeforeMethod(alwaysRun = true) + public void setUp() throws Exception { + // can start in AWS by running this -- or use brooklyn CLI/REST for most clouds, or programmatic/config for set of fixed IP machines + hostname = InetAddress.getLocalHost().getHostName(); + + brooklynProperties = BrooklynProperties.Factory.newDefault(); + managementContext = new LocalManagementContext(brooklynProperties); + tapp = ApplicationBuilder.newManagedApp(TestApplication.class, managementContext); + } + + @AfterMethod(alwaysRun=true) + public void ensureShutDown() throws Exception { + Entities.destroyAllCatching(managementContext); + } + + //from http://www.vogella.de/articles/MySQLJava/article.html + public static final String CREATION_SCRIPT = + "CREATE DATABASE feedback; " + + "CREATE USER 'sqluser'@'localhost' IDENTIFIED BY 'sqluserpw'; " + + "GRANT USAGE ON *.* TO 'sqluser'@'localhost'; " + + "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'localhost'; " + + "CREATE USER 'sqluser'@'%' IDENTIFIED BY 'sqluserpw'; " + + "GRANT USAGE ON *.* TO 'sqluser'@'%'; " + + "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'%'; " + + "CREATE USER 'sqluser'@'$hostname' IDENTIFIED BY 'sqluserpw'; " + + "GRANT USAGE ON *.* TO 'sqluser'@'$hostname'; " + + "GRANT ALL PRIVILEGES ON feedback.* TO 'sqluser'@'$hostname'; " + + "FLUSH PRIVILEGES; " + + "USE feedback; " + + "CREATE TABLE COMMENTS ( " + + "id INT NOT NULL AUTO_INCREMENT, " + + "MYUSER VARCHAR(30) NOT NULL, " + + "EMAIL VARCHAR(30), " + + "WEBPAGE VARCHAR(100) NOT NULL, " + + "DATUM DATE NOT NULL, " + + "SUMMARY VARCHAR(40) NOT NULL, " + + "COMMENTS VARCHAR(400) NOT NULL, " + + "PRIMARY KEY (ID) " + + "); " + + "INSERT INTO COMMENTS values (default, 'lars', '[email protected]','http://www.vogella.de', '2009-09-14 10:33:11', 'Summary','My first comment' );"; + + @Test(groups = "Integration") + public void test_localhost() throws Exception { + String dataDir = "/tmp/mariadb-data-" + Strings.makeRandomId(8); + MariaDbNode mariadb = tapp.createAndManageChild(EntitySpec.create(MariaDbNode.class) + .configure(MariaDbNode.MARIADB_SERVER_CONF, MutableMap.<String, Object>of("skip-name-resolve","")) + .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, CREATION_SCRIPT) + .configure(MariaDbNode.DATA_DIR, dataDir)); + LocalhostMachineProvisioningLocation location = new LocalhostMachineProvisioningLocation(); + + tapp.start(ImmutableList.of(location)); + log.info("MariaDB started"); + + new VogellaExampleAccess("com.mysql.jdbc.Driver", mariadb.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); + + log.info("Ran vogella MySQL example -- SUCCESS"); + + // Ensure the data directory was successfully overridden. + File dataDirFile = new File(dataDir); + File mariadbSubdirFile = new File(dataDirFile, "mysql"); + Assert.assertTrue(mariadbSubdirFile.exists()); + + // Clean up. + dataDirFile.delete(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ac1a7c09/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java ---------------------------------------------------------------------- diff --git a/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java b/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java new file mode 100644 index 0000000..6fbf43e --- /dev/null +++ b/software/database/src/test/java/org/apache/brooklyn/entity/database/mariadb/MariaDbLiveEc2Test.java @@ -0,0 +1,57 @@ +/* + * 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.entity.database.mariadb; + +import org.apache.brooklyn.api.entity.proxying.EntitySpec; +import org.apache.brooklyn.api.location.Location; +import org.testng.annotations.Test; + +import brooklyn.entity.AbstractEc2LiveTest; +import org.apache.brooklyn.entity.database.DatastoreMixins.DatastoreCommon; +import org.apache.brooklyn.entity.database.VogellaExampleAccess; + +import org.apache.brooklyn.location.jclouds.JcloudsLocation; + +import com.google.common.collect.ImmutableList; + +@Test(groups = { "Live" }) +public class MariaDbLiveEc2Test extends AbstractEc2LiveTest { + + @Override + protected void doTest(Location loc) throws Exception { + // TODO For some CentOS VMs (e.g. in AWS 6.3, us-east-1/ami-a96b01c0), currently need to turn off iptables unfortunately. + // Should really just open the ports in iptables. + MariaDbNode mariadb = app.createAndManageChild(EntitySpec.create(MariaDbNode.class) + .configure(DatastoreCommon.CREATION_SCRIPT_CONTENTS, MariaDbIntegrationTest.CREATION_SCRIPT) + .configure(MariaDbNode.PROVISIONING_PROPERTIES.subKey(JcloudsLocation.STOP_IPTABLES.getName()), true)); + + app.start(ImmutableList.of(loc)); + + new VogellaExampleAccess("com.mysql.jdbc.Driver", mariadb.getAttribute(DatastoreCommon.DATASTORE_URL)).readModifyAndRevertDataBase(); + } + + @Override + @Test(enabled=false, groups = "Live") + public void test_Debian_7_2() throws Exception { } // Disabled because MariaDB not available + + @Test(enabled=false) + public void testDummy() {} // Convince testng IDE integration that this really does have test methods + +} +
