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 2015/08/19 13:10:02 UTC
[44/72] [abbrv] incubator-brooklyn git commit: BROOKLYN-162 - jclouds
last few package prefixes needed,
and tidy in core and elsewhere related (or observed in the process)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsSubnetSshMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsSubnetSshMachineLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsSubnetSshMachineLocation.java
index c21810d..d4e8615 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsSubnetSshMachineLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/AbstractJcloudsSubnetSshMachineLocation.java
@@ -21,8 +21,7 @@ package org.apache.brooklyn.location.jclouds;
import java.util.Map;
import org.jclouds.compute.domain.NodeMetadata;
-
-import org.apache.brooklyn.location.basic.SupportsPortForwarding.RequiresPortForwarding;
+import org.apache.brooklyn.location.core.SupportsPortForwarding.RequiresPortForwarding;
public abstract class AbstractJcloudsSubnetSshMachineLocation extends JcloudsSshMachineLocation implements RequiresPortForwarding {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
index f52ad0d..dc61807 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BrooklynMachinePool.java
@@ -32,10 +32,10 @@ import org.apache.brooklyn.entity.trait.Startable;
import org.jclouds.compute.domain.NodeMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.basic.SshMachineLocation;
import org.apache.brooklyn.location.jclouds.pool.MachinePool;
import org.apache.brooklyn.location.jclouds.pool.MachineSet;
import org.apache.brooklyn.location.jclouds.pool.ReusableMachineTemplate;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.task.BasicExecutionContext;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
index 5059a0a..1773470 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java
@@ -32,12 +32,12 @@ import org.apache.brooklyn.api.location.NoMachinesAvailableException;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.basic.BasicLocationRegistry;
-import org.apache.brooklyn.location.basic.FixedListMachineProvisioningLocation;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.basic.LocationConfigUtils;
-import org.apache.brooklyn.location.basic.LocationInternal;
-import org.apache.brooklyn.location.basic.LocationPropertiesFromBrooklynProperties;
+import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation;
+import org.apache.brooklyn.location.core.BasicLocationRegistry;
+import org.apache.brooklyn.location.core.LocationConfigKeys;
+import org.apache.brooklyn.location.core.LocationConfigUtils;
+import org.apache.brooklyn.location.core.LocationPropertiesFromBrooklynProperties;
+import org.apache.brooklyn.location.core.internal.LocationInternal;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.exceptions.Exceptions;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 3d91644..c2f1a28 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -61,10 +61,10 @@ import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.config.Sanitizer;
-import org.apache.brooklyn.core.mgmt.rebind.persister.LocationWithObjectStore;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore;
+import org.apache.brooklyn.core.mgmt.persist.LocationWithObjectStore;
+import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore;
+import org.apache.brooklyn.core.mgmt.persist.jclouds.JcloudsBlobStoreBasedObjectStore;
import org.apache.brooklyn.location.access.PortMapping;
-import org.apache.brooklyn.location.basic.AbstractLocation;
import org.apache.brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation;
import org.apache.brooklyn.location.cloud.names.AbstractCloudMachineNamer;
import org.apache.brooklyn.location.jclouds.networking.JcloudsPortForwarderExtension;
@@ -132,19 +132,18 @@ import com.google.common.io.Files;
import com.google.common.net.HostAndPort;
import com.google.common.primitives.Ints;
-import brooklyn.entity.rebind.persister.jclouds.JcloudsBlobStoreBasedObjectStore;
-
import org.apache.brooklyn.location.access.PortForwardManager;
-import org.apache.brooklyn.location.basic.BasicMachineMetadata;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.basic.LocationConfigUtils;
-import org.apache.brooklyn.location.basic.LocationConfigUtils.OsCredential;
-import org.apache.brooklyn.location.basic.SshMachineLocation;
-import org.apache.brooklyn.location.basic.WinRmMachineLocation;
import org.apache.brooklyn.location.cloud.AvailabilityZoneExtension;
import org.apache.brooklyn.location.cloud.names.CloudMachineNamer;
+import org.apache.brooklyn.location.core.AbstractLocation;
+import org.apache.brooklyn.location.core.BasicMachineMetadata;
+import org.apache.brooklyn.location.core.LocationConfigKeys;
+import org.apache.brooklyn.location.core.LocationConfigUtils;
+import org.apache.brooklyn.location.core.LocationConfigUtils.OsCredential;
import org.apache.brooklyn.location.jclouds.JcloudsPredicates.NodeInLocation;
import org.apache.brooklyn.location.jclouds.templates.PortableTemplateBuilder;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.collections.MutableSet;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationConfig.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationConfig.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationConfig.java
index 03d4432..dd52b75 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationConfig.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationConfig.java
@@ -34,8 +34,8 @@ import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.domain.LoginCredentials;
import org.apache.brooklyn.location.access.BrooklynAccessUtils;
import org.apache.brooklyn.location.access.PortForwardManager;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
import org.apache.brooklyn.location.cloud.CloudLocationConfig;
+import org.apache.brooklyn.location.core.LocationConfigKeys;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import com.google.common.annotations.Beta;
@@ -204,7 +204,7 @@ public interface JcloudsLocationConfig extends CloudLocationConfig {
/**
* CUSTOM_MACHINE_SETUP_SCRIPT_URL accepts a URL location that points to a shell script.
- * Please have a look at locations/jclouds/src/main/resources/sample/script/setup-server.sh as an example
+ * Please have a look at locations/jclouds/src/main/resources/org/apache/brooklyn/location/jclouds/sample/setup-server.sh as an example
*/
public static final ConfigKey<String> CUSTOM_MACHINE_SETUP_SCRIPT_URL = ConfigKeys.newStringConfigKey(
"setup.script", "Custom script to customize a node");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationResolver.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationResolver.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationResolver.java
index ebb5d57..60ce84f 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationResolver.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationResolver.java
@@ -29,16 +29,16 @@ import org.apache.brooklyn.api.location.LocationRegistry;
import org.apache.brooklyn.api.location.LocationResolver;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.basic.LocationConfigUtils;
-import org.apache.brooklyn.location.basic.LocationInternal;
import org.jclouds.apis.ApiMetadata;
import org.jclouds.apis.Apis;
import org.jclouds.providers.ProviderMetadata;
import org.jclouds.providers.Providers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.basic.BasicLocationRegistry;
+import org.apache.brooklyn.location.core.BasicLocationRegistry;
+import org.apache.brooklyn.location.core.LocationConfigKeys;
+import org.apache.brooklyn.location.core.LocationConfigUtils;
+import org.apache.brooklyn.location.core.internal.LocationInternal;
import org.apache.brooklyn.util.text.Strings;
import com.google.common.collect.ImmutableMap;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineLocation.java
index 11d20ef..90b4db8 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineLocation.java
@@ -19,7 +19,7 @@
package org.apache.brooklyn.location.jclouds;
import org.apache.brooklyn.api.location.MachineLocation;
-import org.apache.brooklyn.location.basic.HasSubnetHostname;
+import org.apache.brooklyn.location.core.HasSubnetHostname;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.Template;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsPropertiesFromBrooklynProperties.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsPropertiesFromBrooklynProperties.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsPropertiesFromBrooklynProperties.java
index 8b2356b..6086d08 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsPropertiesFromBrooklynProperties.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsPropertiesFromBrooklynProperties.java
@@ -21,11 +21,11 @@ package org.apache.brooklyn.location.jclouds;
import java.util.Map;
import org.apache.brooklyn.core.config.ConfigUtils;
-import org.apache.brooklyn.location.basic.DeprecatedKeysMappingBuilder;
-import org.apache.brooklyn.location.basic.LocationPropertiesFromBrooklynProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
+import org.apache.brooklyn.location.core.DeprecatedKeysMappingBuilder;
+import org.apache.brooklyn.location.core.LocationConfigKeys;
+import org.apache.brooklyn.location.core.LocationPropertiesFromBrooklynProperties;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.javalang.JavaClassNames;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
index f315f42..31b414b 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
@@ -34,10 +34,10 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.location.HardwareDetails;
import org.apache.brooklyn.api.location.MachineDetails;
import org.apache.brooklyn.api.location.OsDetails;
-import org.apache.brooklyn.location.basic.BasicHardwareDetails;
-import org.apache.brooklyn.location.basic.BasicMachineDetails;
-import org.apache.brooklyn.location.basic.BasicOsDetails;
-import org.apache.brooklyn.location.basic.SshMachineLocation;
+import org.apache.brooklyn.location.core.BasicHardwareDetails;
+import org.apache.brooklyn.location.core.BasicMachineDetails;
+import org.apache.brooklyn.location.core.BasicOsDetails;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.net.Networking;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
index b59ce3e..7b84432 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
@@ -25,7 +25,7 @@ import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.Set;
-import org.apache.brooklyn.location.basic.WinRmMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.net.Networking;
import org.jclouds.compute.domain.NodeMetadata;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java
index f295790..2552874 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/SudoTtyFixingCustomizer.java
@@ -18,7 +18,7 @@
*/
package org.apache.brooklyn.location.jclouds;
-import org.apache.brooklyn.location.basic.SshMachineLocation;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.ssh.SshTasks;
import org.apache.brooklyn.util.core.task.ssh.SshTasks.OnFailingTask;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
new file mode 100644
index 0000000..805f1d6
--- /dev/null
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
@@ -0,0 +1,173 @@
+/*
+ * 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.policy.jclouds.os;
+
+import java.util.List;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.internal.EntityLocal;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
+import org.apache.brooklyn.api.sensor.SensorEvent;
+import org.apache.brooklyn.api.sensor.SensorEventListener;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.entity.core.AbstractEntity;
+import org.apache.brooklyn.entity.core.EntityInternal;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.policy.core.AbstractPolicy;
+import org.apache.brooklyn.sensor.core.Sensors;
+import org.apache.brooklyn.util.core.flags.SetFromFlag;
+import org.apache.brooklyn.util.core.internal.ssh.SshTool;
+import org.apache.brooklyn.util.text.Identifiers;
+import org.jclouds.compute.config.AdminAccessConfiguration;
+import org.jclouds.scriptbuilder.functions.InitAdminAccess;
+import org.jclouds.scriptbuilder.statements.login.AdminAccess;
+import org.jclouds.scriptbuilder.statements.ssh.SshdConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * When attached to an entity, this will monitor for when an {@link SshMachineLocation} is added to that entity
+ * (e.g. when a VM has been provisioned for it).
+ *
+ * The policy will then (asynchronously) add a new user to the VM, with a randomly generated password.
+ * The ssh details will be set as a sensor on the entity.
+ *
+ * If this is used, it is strongly encouraged to tell users to change the password on first login.
+ *
+ * A preferred mechanism would be for an external key-management tool to generate ssh key-pairs for
+ * the user, and for the public key to be passed to Brooklyn. However, there is not a customer
+ * requirement for that yet, so focusing on the password-approach.
+ */
+@Beta
+public class CreateUserPolicy extends AbstractPolicy implements SensorEventListener<Location> {
+
+ // TODO Should add support for authorizing ssh keys as well
+
+ // TODO Should review duplication with:
+ // - JcloudsLocationConfig.GRANT_USER_SUDO
+ // (but config default/description and context of use are different)
+ // - AdminAccess in JcloudsLocation.createUserStatements
+
+ // TODO Could make the password explicitly configurable, or auto-generate if not set?
+
+ private static final Logger LOG = LoggerFactory.getLogger(CreateUserPolicy.class);
+
+ @SetFromFlag("user")
+ public static final ConfigKey<String> VM_USERNAME = ConfigKeys.newStringConfigKey("createuser.vm.user.name");
+
+ @SetFromFlag("grantSudo")
+ public static final ConfigKey<Boolean> GRANT_SUDO = ConfigKeys.newBooleanConfigKey(
+ "createuser.vm.user.grantSudo",
+ "Whether to give the new user sudo rights",
+ false);
+
+ public static final AttributeSensor<String> VM_USER_CREDENTIALS = Sensors.newStringSensor(
+ "createuser.vm.user.credentials",
+ "The \"<user> : <password> @ <hostname>:<port>\"");
+
+ public void setEntity(EntityLocal entity) {
+ super.setEntity(entity);
+ subscribe(entity, AbstractEntity.LOCATION_ADDED, this);
+ }
+
+ @Override
+ public void onEvent(SensorEvent<Location> event) {
+ final Entity entity = event.getSource();
+ final Location loc = event.getValue();
+ if (loc instanceof SshMachineLocation) {
+ addUserAsync(entity, (SshMachineLocation)loc);
+ }
+ }
+
+ protected void addUserAsync(final Entity entity, final SshMachineLocation machine) {
+ ((EntityInternal)entity).getExecutionContext().execute(new Runnable() {
+ public void run() {
+ addUser(entity, machine);
+ }});
+ }
+
+ protected void addUser(Entity entity, SshMachineLocation machine) {
+ boolean grantSudo = getRequiredConfig(GRANT_SUDO);
+ String user = getRequiredConfig(VM_USERNAME);
+ String password = Identifiers.makeRandomId(12);
+ String hostname = machine.getAddress().getHostName();
+ int port = machine.getPort();
+ String creds = user + " : " + password + " @ " +hostname + ":" + port;
+
+ LOG.info("Adding auto-generated user "+user+" @ "+hostname+":"+port);
+
+ // Build the command to create the user
+ // Note AdminAccess requires _all_ fields set, due to http://code.google.com/p/jclouds/issues/detail?id=1095
+ // If jclouds grants Sudo rights, it overwrites the /etc/sudoers, which makes integration tests very dangerous! Not using it.
+ AdminAccess adminAccess = AdminAccess.builder()
+ .adminUsername(user)
+ .adminPassword(password)
+ .grantSudoToAdminUser(false)
+ .resetLoginPassword(true)
+ .loginPassword(password)
+ .authorizeAdminPublicKey(false)
+ .adminPublicKey("ignored")
+ .installAdminPrivateKey(false)
+ .adminPrivateKey("ignore")
+ .lockSsh(false)
+ .build();
+
+ org.jclouds.scriptbuilder.domain.OsFamily scriptOsFamily = (machine.getMachineDetails().getOsDetails().isWindows())
+ ? org.jclouds.scriptbuilder.domain.OsFamily.WINDOWS
+ : org.jclouds.scriptbuilder.domain.OsFamily.UNIX;
+
+ InitAdminAccess initAdminAccess = new InitAdminAccess(new AdminAccessConfiguration.Default());
+ initAdminAccess.visit(adminAccess);
+ String cmd = adminAccess.render(scriptOsFamily);
+
+ // Exec command to create the user
+ int result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd));
+ if (result != 0) {
+ throw new IllegalStateException("Failed to auto-generate user, using command "+cmd);
+ }
+
+ // Exec command to grant password-access to sshd (which may have been disabled earlier).
+ cmd = new SshdConfig(ImmutableMap.of("PasswordAuthentication", "yes")).render(scriptOsFamily);
+ result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd));
+ if (result != 0) {
+ throw new IllegalStateException("Failed to enable ssh-login-with-password, using command "+cmd);
+ }
+
+ // Exec command to grant sudo rights.
+ if (grantSudo) {
+ List<String> cmds = ImmutableList.of(
+ "cat >> /etc/sudoers <<-'END_OF_JCLOUDS_FILE'\n"+
+ user+" ALL = (ALL) NOPASSWD:ALL\n"+
+ "END_OF_JCLOUDS_FILE\n",
+ "chmod 0440 /etc/sudoers");
+ result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "add-user-to-sudoers-"+user, cmds);
+ if (result != 0) {
+ throw new IllegalStateException("Failed to auto-generate user, using command "+cmd);
+ }
+ }
+
+ ((EntityLocal)entity).setAttribute(VM_USER_CREDENTIALS, creds);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/resources/org/apache/brooklyn/location/jclouds/sample/setup-server.sh
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/resources/org/apache/brooklyn/location/jclouds/sample/setup-server.sh b/locations/jclouds/src/main/resources/org/apache/brooklyn/location/jclouds/sample/setup-server.sh
new file mode 100755
index 0000000..cdb5dcc
--- /dev/null
+++ b/locations/jclouds/src/main/resources/org/apache/brooklyn/location/jclouds/sample/setup-server.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+#
+# 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.
+#
+echo Appending nameserver 8.8.8.8 to /etc/resolv.conf
+sudo -s -- '/bin/echo nameserver 8.8.8.8 >> /etc/resolv.conf'
+unset OS
+OS=`head -1 /etc/issue | awk '{ print $1 }'`
+unset OS_MAJOR
+OS_MAJOR=`head -1 /etc/issue | awk '{ print $4 }' | cut -d'.' -f1`
+if [ $OS = "CentOS" -a $OS_MAJOR -eq 6 ]; then
+ echo Appending options single-request-reopen to /etc/resolv.conf
+ sudo -s -- '/bin/echo options single-request-reopen >> /etc/resolv.conf'
+fi
+echo Changing default gateway to ${defaultGateway}
+sudo -s -- '/sbin/ip route replace default via ${defaultGateway} dev eth0'
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/main/resources/sample/script/setup-server.sh
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/resources/sample/script/setup-server.sh b/locations/jclouds/src/main/resources/sample/script/setup-server.sh
deleted file mode 100755
index cdb5dcc..0000000
--- a/locations/jclouds/src/main/resources/sample/script/setup-server.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env bash
-#
-# 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.
-#
-echo Appending nameserver 8.8.8.8 to /etc/resolv.conf
-sudo -s -- '/bin/echo nameserver 8.8.8.8 >> /etc/resolv.conf'
-unset OS
-OS=`head -1 /etc/issue | awk '{ print $1 }'`
-unset OS_MAJOR
-OS_MAJOR=`head -1 /etc/issue | awk '{ print $4 }' | cut -d'.' -f1`
-if [ $OS = "CentOS" -a $OS_MAJOR -eq 6 ]; then
- echo Appending options single-request-reopen to /etc/resolv.conf
- sudo -s -- '/bin/echo options single-request-reopen >> /etc/resolv.conf'
-fi
-echo Changing default gateway to ${defaultGateway}
-sudo -s -- '/sbin/ip route replace default via ${defaultGateway} dev eth0'
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreCleaner.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreCleaner.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreCleaner.java
deleted file mode 100644
index 4b40176..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreCleaner.java
+++ /dev/null
@@ -1,71 +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.rebind.persister.jclouds;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.ContextBuilder;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.cloud.CloudLocationConfig;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-
-/** Utility for cleaning up after test leaks. Most should not leak of course, but if they do... */
-public class BlobStoreCleaner {
-
- private static String locationSpec = BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC;
-
- private static final Logger log = LoggerFactory.getLogger(BlobStoreCleaner.class);
-
- public static void main(String[] args) {
- LocalManagementContextForTests mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- JcloudsLocation location = (JcloudsLocation) mgmt.getLocationRegistry().resolve(locationSpec);
-
- String identity = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_IDENTITY), "identity must not be null");
- String credential = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_CREDENTIAL), "credential must not be null");
- String provider = checkNotNull(location.getConfig(LocationConfigKeys.CLOUD_PROVIDER), "provider must not be null");
- String endpoint = location.getConfig(CloudLocationConfig.CLOUD_ENDPOINT);
-
- BlobStoreContext context = ContextBuilder.newBuilder(provider)
- .credentials(identity, credential)
- .endpoint(endpoint)
- .buildView(BlobStoreContext.class);
-
- PageSet<? extends StorageMetadata> containers = context.getBlobStore().list();
- for (StorageMetadata container: containers) {
- if (container.getName().matches("brooklyn.*-test.*")
- // to kill all containers here
-// || container.getName().matches(".*")
- ) {
- log.info("killing - "+container.getName());
- context.getBlobStore().deleteContainer(container.getName());
- } else {
- log.info("KEEPING - "+container.getName());
- }
- }
- context.close();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreExpiryTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreExpiryTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreExpiryTest.java
deleted file mode 100644
index b3877dc..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreExpiryTest.java
+++ /dev/null
@@ -1,196 +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.rebind.persister.jclouds;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.openstack.reference.AuthHeaders.URL_SUFFIX;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.List;
-import java.util.Map.Entry;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.entity.core.Entities;
-import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.http.HttpTool;
-import org.apache.brooklyn.util.core.http.HttpToolResponse;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.apache.brooklyn.util.time.Duration;
-import org.apache.brooklyn.util.time.Time;
-import org.apache.http.client.HttpClient;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.domain.Credentials;
-import org.jclouds.openstack.domain.AuthenticationResponse;
-import org.jclouds.openstack.reference.AuthHeaders;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.cloud.CloudLocationConfig;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsUtil;
-
-import com.google.common.base.Preconditions;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
-import com.google.inject.Inject;
-
-@Test(groups={"Live", "Live-sanity"})
-public class BlobStoreExpiryTest {
-
- private static final Logger log = LoggerFactory.getLogger(BlobStoreExpiryTest.class);
-
- /**
- * Live tests as written require a location defined as follows:
- *
- * <code>
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1==jclouds:swift:https://ams01.objectstorage.softlayer.net/auth/v1.0
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1.identity=IBMOS1234-5:yourname
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1.credential=0123abcd.......
- * </code>
- */
-
- public static final String PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC = BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC;
- public static final String CONTAINER_PREFIX = "brooklyn-persistence-test";
- private String locationSpec = PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC;
-
- private JcloudsLocation location;
- private BlobStoreContext context;
-
- private ManagementContext mgmt;
- private String testContainerName;
-
- private String identity;
- private String credential;
- private String provider;
- private String endpoint;
-
- public synchronized BlobStoreContext getSwiftBlobStoreContext() {
- if (context==null) {
- if (location==null) {
- Preconditions.checkNotNull(locationSpec, "locationSpec required for remote object store when location is null");
- Preconditions.checkNotNull(mgmt, "mgmt required for remote object store when location is null");
- location = (JcloudsLocation) mgmt.getLocationRegistry().resolve(locationSpec);
- }
-
- identity = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_IDENTITY), "identity must not be null");
- credential = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_CREDENTIAL), "credential must not be null");
- provider = checkNotNull(location.getConfig(LocationConfigKeys.CLOUD_PROVIDER), "provider must not be null");
- endpoint = location.getConfig(CloudLocationConfig.CLOUD_ENDPOINT);
-
- context = JcloudsUtil.newBlobstoreContext(provider, endpoint, identity, credential);
- }
- return context;
- }
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- testContainerName = CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(8);
- mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- }
-
- @AfterMethod(alwaysRun=true)
- public void teardown() {
- Entities.destroyAll(mgmt);
- if (context!=null) context.close();
- context = null;
- }
-
- public void testRenewAuthSucceedsInSwiftObjectStore() throws Exception {
- doTestRenewAuth();
- }
-
- protected void doTestRenewAuth() throws Exception {
- getSwiftBlobStoreContext();
-
- injectShortLivedTokenForSwiftAuth();
-
- context.getBlobStore().createContainerInLocation(null, testContainerName);
-
- assertContainerFound();
-
- log.info("created container, now sleeping for expiration");
-
- Time.sleep(Duration.TEN_SECONDS);
-
- assertContainerFound();
-
- context.getBlobStore().deleteContainer(testContainerName);
- }
-
- private void assertContainerFound() {
- PageSet<? extends StorageMetadata> ps = context.getBlobStore().list();
- BlobStoreTest.assertHasItemNamed(ps, testContainerName);
- }
-
- private void injectShortLivedTokenForSwiftAuth() throws Exception {
- URL endpointUrl = new URL(endpoint);
-
- HttpToolResponse tokenHttpResponse1 = requestTokenWithExplicitLifetime(endpointUrl,
- identity, credential, Duration.FIVE_SECONDS);
-
- Builder<String, URI> servicesMapBuilder = ImmutableMap.builder();
- for (Entry<String, List<String>> entry : tokenHttpResponse1.getHeaderLists().entrySet()) {
- if (entry.getKey().toLowerCase().endsWith(URL_SUFFIX.toLowerCase()) ||
- entry.getKey().toLowerCase().endsWith("X-Auth-Token-Expires".toLowerCase())){
- servicesMapBuilder.put(entry.getKey(), URI.create(entry.getValue().iterator().next()));
- }
- }
- AuthenticationResponse authResponse = new AuthenticationResponse(tokenHttpResponse1.getHeaderLists().get(AuthHeaders.AUTH_TOKEN).get(0), servicesMapBuilder.build());
-
- getAuthCache().put(new Credentials(identity, credential), authResponse);
- }
-
- private LoadingCache<Credentials, AuthenticationResponse> getAuthCache() {
- return context.utils().injector().getInstance(CachePeeker.class).authenticationResponseCache;
- }
-
- public static class CachePeeker {
- private final LoadingCache<Credentials, AuthenticationResponse> authenticationResponseCache;
-
- @Inject
- protected CachePeeker(LoadingCache<Credentials, AuthenticationResponse> authenticationResponseCache) {
- this.authenticationResponseCache = authenticationResponseCache;
- }
- }
-
- public static HttpToolResponse requestTokenWithExplicitLifetime(URL url, String user, String key, Duration expiration) throws URISyntaxException {
- HttpClient client = HttpTool.httpClientBuilder().build();
- HttpToolResponse response = HttpTool.httpGet(client, url.toURI(), MutableMap.<String,String>of()
- .add(AuthHeaders.AUTH_USER, user)
- .add(AuthHeaders.AUTH_KEY, key)
- .add("Host", url.getHost())
- .add("X-Auth-New-Token", "" + true)
- .add("X-Auth-Token-Lifetime", "" + expiration.toSeconds())
- );
-// curl -v https://ams01.objectstorage.softlayer.net/auth/v1.0/v1.0 -H "X-Auth-User: IBMOS12345-2:username" -H "X-Auth-Key: <API KEY>" -H "Host: ams01.objectstorage.softlayer.net" -H "X-Auth-New-Token: true" -H "X-Auth-Token-Lifetime: 15"
- log.info("Requested token with explicit lifetime: "+expiration+" at "+url+"\n"+response+"\n"+response.getHeaderLists());
- return response;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStorePersistencePerformanceTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStorePersistencePerformanceTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStorePersistencePerformanceTest.java
deleted file mode 100644
index acd5775..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStorePersistencePerformanceTest.java
+++ /dev/null
@@ -1,120 +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.rebind.persister.jclouds;
-
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistMode;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore.StoreObjectAccessor;
-import org.apache.brooklyn.core.test.qa.performance.AbstractPerformanceTest;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-public class BlobStorePersistencePerformanceTest extends AbstractPerformanceTest {
-
- public static final String LOCATION_SPEC = "named:brooklyn-jclouds-objstore-test-1";
-
- JcloudsBlobStoreBasedObjectStore objectStore;
- StoreObjectAccessor blobstoreAccessor;
-
- @BeforeMethod(alwaysRun=true)
- @Override
- public void setUp() throws Exception {
- super.setUp();
-
- objectStore = new JcloudsBlobStoreBasedObjectStore(LOCATION_SPEC, "BlobStorePersistencePerformanceTest");
- objectStore.injectManagementContext(mgmt);
- objectStore.prepareForSharedUse(PersistMode.AUTO, HighAvailabilityMode.AUTO);
- blobstoreAccessor = objectStore.newAccessor(Identifiers.makeRandomId(8));
-
- app.start(ImmutableList.of(loc));
- }
-
- @AfterMethod(alwaysRun=true)
- @Override
- public void tearDown() throws Exception {
- super.tearDown();
- if (blobstoreAccessor != null) blobstoreAccessor.delete();
- if (objectStore != null) {
- objectStore.deleteCompletely();
- objectStore.close();
- }
- }
-
- protected int numIterations() {
- return 100;
- }
-
- @Test(groups={"Live", "Acceptance"})
- public void testStoreObjectPuts() throws Exception {
- int numIterations = numIterations();
- double minRatePerSec = 10 * PERFORMANCE_EXPECTATION;
- final AtomicInteger i = new AtomicInteger();
-
- measureAndAssert("StoreObjectAccessor.put", numIterations, minRatePerSec, new Runnable() {
- public void run() {
- blobstoreAccessor.put(""+i.incrementAndGet());
- }});
- }
-
- @Test(groups={"Live", "Acceptance"})
- public void testStoreObjectGet() throws Exception {
- // The file system will have done a lot of caching here - we are unlikely to touch the disk more than once.
- int numIterations = numIterations();
- double minRatePerSec = 10 * PERFORMANCE_EXPECTATION;
-
- measureAndAssert("FileBasedStoreObjectAccessor.get", numIterations, minRatePerSec, new Runnable() {
- public void run() {
- blobstoreAccessor.get();
- }});
- }
-
- @Test(groups={"Live", "Acceptance"})
- public void testStoreObjectDelete() throws Exception {
- int numIterations = numIterations();
- double minRatePerSec = 10 * PERFORMANCE_EXPECTATION;
-
- // Will do 10% warm up runs first
- final List<StoreObjectAccessor> blobstoreAccessors = Lists.newArrayList();
- for (int i = 0; i < (numIterations * 1.1 + 1); i++) {
- blobstoreAccessors.add(objectStore.newAccessor("storeObjectDelete-"+i));
- }
-
- final AtomicInteger i = new AtomicInteger();
-
- try {
- measureAndAssert("FileBasedStoreObjectAccessor.delete", numIterations, minRatePerSec, new Runnable() {
- public void run() {
- StoreObjectAccessor blobstoreAccessor = blobstoreAccessors.get(i.getAndIncrement());
- blobstoreAccessor.delete();
- }});
- } finally {
- for (StoreObjectAccessor blobstoreAccessor : blobstoreAccessors) {
- blobstoreAccessor.delete();
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreTest.java
deleted file mode 100644
index 65cfda5..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BlobStoreTest.java
+++ /dev/null
@@ -1,150 +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.rebind.persister.jclouds;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.entity.core.Entities;
-import org.apache.brooklyn.util.stream.Streams;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.cloud.CloudLocationConfig;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsUtil;
-
-import com.google.common.base.Preconditions;
-
-@Test(groups={"Live", "Live-sanity"})
-public class BlobStoreTest {
-
- /**
- * Live tests as written require a location defined as follows:
- *
- * <code>
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1==jclouds:swift:https://ams01.objectstorage.softlayer.net/auth/v1.0
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1.identity=IBMOS1234-5:yourname
- * brooklyn.location.named.brooklyn-jclouds-objstore-test-1.credential=0123abcd.......
- * </code>
- */
- public static final String PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC = "named:brooklyn-jclouds-objstore-test-1";
-
- public static final String CONTAINER_PREFIX = "brooklyn-persistence-test";
-
- private String locationSpec = PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC;
-
- private JcloudsLocation location;
- private BlobStoreContext context;
-
- private ManagementContext mgmt;
- private String testContainerName;
-
- public synchronized BlobStoreContext getBlobStoreContext() {
- if (context==null) {
- if (location==null) {
- Preconditions.checkNotNull(locationSpec, "locationSpec required for remote object store when location is null");
- Preconditions.checkNotNull(mgmt, "mgmt required for remote object store when location is null");
- location = (JcloudsLocation) mgmt.getLocationRegistry().resolve(locationSpec);
- }
-
- String identity = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_IDENTITY), "identity must not be null");
- String credential = checkNotNull(location.getConfig(LocationConfigKeys.ACCESS_CREDENTIAL), "credential must not be null");
- String provider = checkNotNull(location.getConfig(LocationConfigKeys.CLOUD_PROVIDER), "provider must not be null");
- String endpoint = location.getConfig(CloudLocationConfig.CLOUD_ENDPOINT);
-
- context = JcloudsUtil.newBlobstoreContext(provider, endpoint, identity, credential);
- }
- return context;
- }
-
- @BeforeMethod(alwaysRun=true)
- public void setup() {
- testContainerName = CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(8);
- mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- getBlobStoreContext();
- }
-
- @AfterMethod(alwaysRun=true)
- public void teardown() {
- Entities.destroyAll(mgmt);
- }
-
- public void testCreateListDestroyContainer() throws IOException {
- context.getBlobStore().createContainerInLocation(null, testContainerName);
- context.getBlobStore().list(testContainerName);
- PageSet<? extends StorageMetadata> ps = context.getBlobStore().list();
- assertHasItemNamed(ps, testContainerName);
-
- Blob b = context.getBlobStore().blobBuilder("my-blob-1").payload(Streams.newInputStreamWithContents("hello world")).build();
- context.getBlobStore().putBlob(testContainerName, b);
-
- Blob b2 = context.getBlobStore().getBlob(testContainerName, "my-blob-1");
- Assert.assertEquals(Streams.readFullyString(b2.getPayload().openStream()), "hello world");
-
- context.getBlobStore().deleteContainer(testContainerName);
- }
-
- public void testCreateListDestroySimpleDirInContainer() throws IOException {
- context.getBlobStore().createContainerInLocation(null, testContainerName);
- context.getBlobStore().createDirectory(testContainerName, "my-dir-1");
-
- PageSet<? extends StorageMetadata> ps = context.getBlobStore().list(testContainerName);
- assertHasItemNamed(ps, "my-dir-1");
-
- Blob b = context.getBlobStore().blobBuilder("my-blob-1").payload(Streams.newInputStreamWithContents("hello world")).build();
- context.getBlobStore().putBlob(testContainerName+"/"+"my-dir-1", b);
-
- ps = context.getBlobStore().list(testContainerName, ListContainerOptions.Builder.inDirectory("my-dir-1"));
- assertHasItemNamed(ps, "my-dir-1/my-blob-1");
-
- // both these syntaxes work:
- Blob b2 = context.getBlobStore().getBlob(testContainerName+"/"+"my-dir-1", "my-blob-1");
- Assert.assertEquals(Streams.readFullyString(b2.getPayload().openStream()), "hello world");
-
- Blob b3 = context.getBlobStore().getBlob(testContainerName, "my-dir-1"+"/"+"my-blob-1");
- Assert.assertEquals(Streams.readFullyString(b3.getPayload().openStream()), "hello world");
-
- context.getBlobStore().deleteContainer(testContainerName);
- }
-
- static void assertHasItemNamed(PageSet<? extends StorageMetadata> ps, String name) {
- if (!hasItemNamed(ps, name))
- Assert.fail("No item named '"+name+"' in "+ps);
- }
-
- static boolean hasItemNamed(PageSet<? extends StorageMetadata> ps, String name) {
- for (StorageMetadata sm: ps)
- if (name==null || name.equals(sm.getName())) return true;
- return false;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BrooklynMementoPersisterJcloudsObjectStoreTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BrooklynMementoPersisterJcloudsObjectStoreTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BrooklynMementoPersisterJcloudsObjectStoreTest.java
deleted file mode 100644
index 550cc8c..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/BrooklynMementoPersisterJcloudsObjectStoreTest.java
+++ /dev/null
@@ -1,66 +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.rebind.persister.jclouds;
-
-
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils;
-import org.apache.brooklyn.core.mgmt.rebind.persister.BrooklynMementoPersisterTestFixture;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.apache.brooklyn.util.time.Duration;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-/**
- * @author Andrea Turli
- */
-@Test(groups={"Live", "Live-sanity"})
-public class BrooklynMementoPersisterJcloudsObjectStoreTest extends BrooklynMementoPersisterTestFixture {
-
- @Override @BeforeMethod
- public void setUp() throws Exception { super.setUp(); }
-
- protected LocalManagementContext newPersistingManagementContext() {
- objectStore = new JcloudsBlobStoreBasedObjectStore(
- BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4));
- return RebindTestUtils.managementContextBuilder(classLoader, objectStore)
- .persistPeriod(Duration.ONE_MILLISECOND)
- .properties(BrooklynProperties.Factory.newDefault())
- .buildStarted();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testCheckPointAndLoadMemento() throws Exception {
- super.testCheckPointAndLoadMemento();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testDeleteAndLoadMemento() throws Exception {
- super.testDeleteAndLoadMemento();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testLoadAndCheckpointRawMemento() throws Exception {
- super.testLoadAndCheckpointRawMemento();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/EntityToBlobStorePersistencePerformanceTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/EntityToBlobStorePersistencePerformanceTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/EntityToBlobStorePersistencePerformanceTest.java
deleted file mode 100644
index 92c11fd..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/EntityToBlobStorePersistencePerformanceTest.java
+++ /dev/null
@@ -1,64 +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.rebind.persister.jclouds;
-
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils;
-import org.apache.brooklyn.core.test.qa.performance.EntityPersistencePerformanceTest;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-public class EntityToBlobStorePersistencePerformanceTest extends EntityPersistencePerformanceTest {
-
- private static final String LOCATION_SPEC = BlobStorePersistencePerformanceTest.LOCATION_SPEC;
-
- private JcloudsBlobStoreBasedObjectStore objectStore;
-
- @Override
- protected LocalManagementContext createOrigManagementContext() {
- objectStore = new JcloudsBlobStoreBasedObjectStore(LOCATION_SPEC, "EntityToBlobStorePersistencePerformanceTest");
-
- return RebindTestUtils.managementContextBuilder(classLoader, objectStore)
- .forLive(true)
- .persistPeriodMillis(getPersistPeriodMillis())
- .buildStarted();
- }
-
- @AfterMethod(alwaysRun=true)
- @Override
- public void tearDown() throws Exception {
- super.tearDown();
- if (objectStore != null) {
- objectStore.deleteCompletely();
- objectStore.close();
- }
- }
-
- @Test(groups="Live")
- @Override
- public void testManyEntities() throws Exception {
- super.testManyEntities();
- }
-
- @Test(groups="Live")
- @Override
- public void testRapidChanges() throws Exception {
- super.testRapidChanges();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/HighAvailabilityManagerJcloudsObjectStoreTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/HighAvailabilityManagerJcloudsObjectStoreTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/HighAvailabilityManagerJcloudsObjectStoreTest.java
deleted file mode 100644
index 3268b0b..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/HighAvailabilityManagerJcloudsObjectStoreTest.java
+++ /dev/null
@@ -1,79 +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.rebind.persister.jclouds;
-
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerTestFixture;
-import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-@Test(groups={"Live", "Live-sanity"})
-public class HighAvailabilityManagerJcloudsObjectStoreTest extends HighAvailabilityManagerTestFixture {
-
- protected ManagementContextInternal newLocalManagementContext() {
- return new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- }
-
- @Override @BeforeMethod
- public void setUp() throws Exception { super.setUp(); }
-
- protected PersistenceObjectStore newPersistenceObjectStore() {
- return new JcloudsBlobStoreBasedObjectStore(
- BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4));
- }
-
- @Test(groups="Live", invocationCount=5) //run fewer times w softlayer...
- public void testGetManagementPlaneStatusManyTimes() throws Exception {
- testGetManagementPlaneStatus();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testDoesNotPromoteIfMasterTimeoutNotExpired() throws Exception {
- super.testDoesNotPromoteIfMasterTimeoutNotExpired();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testGetManagementPlaneStatus() throws Exception {
- super.testGetManagementPlaneStatus();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testPromotes() throws Exception {
- super.testPromotes();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testGetManagementPlaneSyncStateInfersTimedOutNodeAsFailed() throws Exception {
- super.testGetManagementPlaneSyncStateInfersTimedOutNodeAsFailed();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testGetManagementPlaneSyncStateDoesNotThrowNpeBeforePersisterSet() throws Exception {
- super.testGetManagementPlaneSyncStateDoesNotThrowNpeBeforePersisterSet();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsBlobStoreBasedObjectStoreTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsBlobStoreBasedObjectStoreTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsBlobStoreBasedObjectStoreTest.java
deleted file mode 100644
index fee274d..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsBlobStoreBasedObjectStoreTest.java
+++ /dev/null
@@ -1,118 +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.rebind.persister.jclouds;
-
-
-import java.util.List;
-
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
-import org.apache.brooklyn.core.mgmt.rebind.persister.BrooklynPersistenceUtils;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore.StoreObjectAccessor;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.entity.core.Entities;
-import org.apache.brooklyn.util.collections.MutableList;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Stopwatch;
-
-/**
- * @author Andrea Turli
- */
-@Test(groups={"Live", "Live-sanity"})
-public class JcloudsBlobStoreBasedObjectStoreTest {
-
- private static final Logger log = LoggerFactory.getLogger(JcloudsBlobStoreBasedObjectStoreTest.class);
-
- private List<PersistenceObjectStore> objectStores = MutableList.of();;
- private LocalManagementContext mgmt;
-
- @BeforeMethod(alwaysRun=true)
- public void setUp() throws Exception {
- mgmt = LocalManagementContextForTests.builder(true).useDefaultProperties().build();
- }
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
- for (PersistenceObjectStore store: objectStores) store.deleteCompletely();
- Entities.destroyAll(mgmt);
- objectStores.clear();
- }
-
- public PersistenceObjectStore newObjectStore(String spec, String container) {
- PersistenceObjectStore newObjectStore = BrooklynPersistenceUtils.newPersistenceObjectStore(mgmt, spec, container);
- objectStores.add(newObjectStore);
- return newObjectStore;
- }
-
- @Test(groups={"Integration"})
- public void testLocalhost() throws Exception {
- doTestWithStore( newObjectStore(null,
- BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)) );
- }
-
- @Test(groups={"Integration"})
- public void testLocalhostWithSubPathInContainerName() throws Exception {
- doTestWithStore( newObjectStore(null,
- BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)+"/subpath1/subpath2") );
- }
-
- @Test(groups={"Live", "Live-sanity"})
- public void testJclouds() throws Exception {
- doTestWithStore( newObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC,
- BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)) );
- }
-
- @Test(groups={"Live", "Live-sanity"})
- public void testJcloudsWithSubPathInContainerName() throws Exception {
- doTestWithStore( newObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC,
- BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)+"/subpath1/subpath2") );
- }
-
- protected void doTestWithStore(PersistenceObjectStore objectStore) {
- log.info("testing against "+objectStore.getSummaryName());
-
- objectStore.createSubPath("foo");
- StoreObjectAccessor f = objectStore.newAccessor("foo/file1.txt");
- Assert.assertFalse(f.exists());
-
- Stopwatch timer = Stopwatch.createStarted();
- f.append("Hello world");
- log.info("created in "+Duration.of(timer));
- timer.reset();
- Assert.assertEquals(f.get(), "Hello world");
- log.info("retrieved in "+Duration.of(timer));
- Assert.assertTrue(f.exists());
-
- timer.reset();
- List<String> files = objectStore.listContentsWithSubPath("foo");
- log.info("list retrieved in "+Duration.of(timer)+"; is: "+files);
- Assert.assertEquals(files, MutableList.of("foo/file1.txt"));
-
- f.delete();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsExpect100ContinueTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsExpect100ContinueTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsExpect100ContinueTest.java
deleted file mode 100644
index 43943c6..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsExpect100ContinueTest.java
+++ /dev/null
@@ -1,148 +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.rebind.persister.jclouds;
-
-import org.apache.brooklyn.api.mgmt.ManagementContext;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.entity.core.Entities;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.jclouds.blobstore.BlobStore;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.Blob;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import org.apache.brooklyn.location.jclouds.JcloudsLocation;
-import org.apache.brooklyn.location.jclouds.JcloudsUtil;
-
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.Logger;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.ByteSource;
-
-public class JcloudsExpect100ContinueTest {
- private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(JcloudsExpect100ContinueTest.class);
-
- private static String LOCATION_SPEC = BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC;
- private static final String OBJECT_NAME_PUT = "test_put";
- private static final String OBJECT_NAME_GET = "test_get";
-
- private ManagementContext mgmt;
- private BlobStoreContext context;
- private String containerName;
-
- @BeforeMethod(alwaysRun=true)
- public void setUp() throws Exception {
- // It's important to disable jclouds debug logging
- // as it "fixes" the issue.
- setInfoLevel(Logger.ROOT_LOGGER_NAME);
- setInfoLevel("jclouds");
- setInfoLevel("org.jclouds");
-
- mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- JcloudsLocation jcloudsLocation = (JcloudsLocation) mgmt.getLocationRegistry().resolve(LOCATION_SPEC);
- context = JcloudsUtil.newBlobstoreContext(
- jcloudsLocation.getProvider(),
- jcloudsLocation.getEndpoint(),
- jcloudsLocation.getIdentity(),
- jcloudsLocation.getCredential());
- containerName = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(8);
- context.getBlobStore().createContainerInLocation(null, containerName);
- }
-
- private void setInfoLevel(String loggerName) {
- Logger logger = (Logger) LoggerFactory.getLogger(loggerName);
- logger.setLevel(Level.INFO);
- }
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
- try {
- context.getBlobStore().deleteContainer(containerName);
- } catch (Exception e){}
- context.close();
- Entities.destroyAll(mgmt);
- }
-
- @Test(groups = "Live", timeOut=240000)
- public void testPutAfterUnclosedGet() {
- put(OBJECT_NAME_PUT, getContent());
- put(OBJECT_NAME_GET, getContent());
-
- for (int i = 1; i <= 50; i++) {
- long start = System.currentTimeMillis();
- get(OBJECT_NAME_GET);
- long afterGet = System.currentTimeMillis();
- LOG.info(i + ". GET @" + (afterGet - start));
-
- System.gc();
- System.gc();
- System.gc();
- sleep(1000);
-
- // Without excluding Expect: 100-Continue header
- // the PUT is supposed to block until the server
- // times out
-
- long beforePut = System.currentTimeMillis();
- put(OBJECT_NAME_PUT, getContent());
- long end = System.currentTimeMillis();
- LOG.info(i + ". PUT @" + (end - beforePut));
- }
- }
-
- private String getContent() {
- return "1234567890";
- }
-
- private void put(String name, String content) {
- BlobStore blobStore = context.getBlobStore();
- byte[] bytes = content.getBytes(Charsets.UTF_8);
- Blob blob = blobStore.blobBuilder(name)
- .payload(ByteSource.wrap(bytes))
- .contentLength(bytes.length)
- .build();
- try {
- blobStore.putBlob(containerName, blob);
- } catch (Exception e) {
- LOG.error("PUT " + name + " failed", e);
- }
- }
-
- private Blob get(String name) {
- try {
- BlobStore blobStore = context.getBlobStore();
- return blobStore.getBlob(containerName, name);
- } catch (Exception e) {
- LOG.error("GET " + name + " failed", e);
- return null;
- }
- }
-
- private void sleep(long millis) {
- try {
- Thread.sleep(millis);
- } catch (InterruptedException e) {
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a1ad34d7/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsObjectStoreAccessorWriterTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsObjectStoreAccessorWriterTest.java b/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsObjectStoreAccessorWriterTest.java
deleted file mode 100644
index 76c2bfd..0000000
--- a/locations/jclouds/src/test/java/brooklyn/entity/rebind/persister/jclouds/JcloudsObjectStoreAccessorWriterTest.java
+++ /dev/null
@@ -1,181 +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.rebind.persister.jclouds;
-
-import java.io.IOException;
-
-import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode;
-import org.apache.brooklyn.core.internal.BrooklynProperties;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistMode;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceStoreObjectAccessorWriterTestFixture;
-import org.apache.brooklyn.core.mgmt.rebind.persister.StoreObjectAccessorLocking;
-import org.apache.brooklyn.core.mgmt.rebind.persister.PersistenceObjectStore.StoreObjectAccessorWithLock;
-import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.apache.brooklyn.entity.core.Entities;
-import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.net.Urls;
-import org.apache.brooklyn.util.text.Identifiers;
-import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-@Test(groups={"Live", "Live-sanity"})
-public class JcloudsObjectStoreAccessorWriterTest extends PersistenceStoreObjectAccessorWriterTestFixture {
-
- private static final Logger log = LoggerFactory.getLogger(JcloudsObjectStoreAccessorWriterTest.class);
-
- private JcloudsBlobStoreBasedObjectStore store;
- private LocalManagementContextForTests mgmt;
-
- @Override @BeforeMethod
- public void setUp() throws Exception {
- store = new JcloudsBlobStoreBasedObjectStore(
- BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4));
- store.injectManagementContext(mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault()));
- store.prepareForSharedUse(PersistMode.CLEAN, HighAvailabilityMode.DISABLED);
- super.setUp();
- }
-
- @Override @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
- super.tearDown();
- if (mgmt!=null) Entities.destroyAll(mgmt);
- if (store!=null) store.deleteCompletely();
- }
-
- protected StoreObjectAccessorWithLock newPersistenceStoreObjectAccessor() throws IOException {
- return newPersistenceStoreObjectAccessor(store, "");
- }
- protected StoreObjectAccessorWithLock newPersistenceStoreObjectAccessor(JcloudsBlobStoreBasedObjectStore aStore, String prefix) throws IOException {
- return new StoreObjectAccessorLocking(aStore.newAccessor(prefix+"sample-file-"+Identifiers.makeRandomId(4)));
- }
-
- @Override
- protected Duration getLastModifiedResolution() {
- // Not sure what timing resolution is on things like Softlayer's Swift.
- // It passed for Aled repeatedly on 2014-11-05 with 2 seconds.
- return Duration.seconds(2);
- }
-
- protected int biggishSize() {
- // bit smaller since it's actually uploading here!
- return 10000;
- }
-
- /** Tests what happen when we ask the store to be in a container with a path, e.g. path1/path2
- * and then the accessor to a file within that (path3/file) --
- * this does it an emulated way, where the store tracks the subpath so we don't have to */
- @Test(groups={"Live"})
- public void testNestedPath1() throws IOException {
- mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- String path1 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- String path2 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- String path3 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- JcloudsBlobStoreBasedObjectStore store0 = null;
- try {
- store0 = new JcloudsBlobStoreBasedObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, Urls.mergePaths(path1, path2));
- store0.injectManagementContext(mgmt);
- store0.prepareForSharedUse(PersistMode.CLEAN, HighAvailabilityMode.DISABLED);
-
- newPersistenceStoreObjectAccessor(store0, path3+"/").put("hello world");
- } catch (Exception e) {
- log.warn("Failed with: "+e, e);
- throw Exceptions.propagate(e);
-
- } finally {
- store0.deleteCompletely();
-
- JcloudsBlobStoreBasedObjectStore storeD = new JcloudsBlobStoreBasedObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, path1);
- storeD.injectManagementContext(mgmt);
- storeD.prepareForSharedUse(PersistMode.CLEAN, HighAvailabilityMode.DISABLED);
- storeD.deleteCompletely();
- }
- }
-
- /** Tests what happen when we ask the store to be in a container with a path, e.g. path1/path2
- * and then the accessor to a file within that (path3/file) --
- * this does it the "official" way, where we ask for the store's container
- * to be the first path segment */
- @Test(groups={"Live"})
- public void testNestedPath2() throws IOException {
- mgmt = new LocalManagementContextForTests(BrooklynProperties.Factory.newDefault());
- String path1 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- String path2 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- String path3 = BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4);
- JcloudsBlobStoreBasedObjectStore store1 = null, store2 = null;
- try {
- store1 = new JcloudsBlobStoreBasedObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC,
- path1);
- store1.injectManagementContext(mgmt);
- store1.prepareForSharedUse(PersistMode.CLEAN, HighAvailabilityMode.DISABLED);
- store1.createSubPath(path2);
- newPersistenceStoreObjectAccessor(store1, path2+"/"+path3+"/").put("hello world");
-
- store2 = new JcloudsBlobStoreBasedObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC,
- Urls.mergePaths(path1, path2));
- store2.injectManagementContext(mgmt);
- store2.prepareForSharedUse(PersistMode.CLEAN, HighAvailabilityMode.DISABLED);
-
- newPersistenceStoreObjectAccessor(store2, path3+"/").put("hello world");
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- // this doesn't work
-// store2.deleteCompletely();
- // this is how you have to do it:
- store1.newAccessor(path2).delete();
-
- store1.deleteCompletely();
- }
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testWriteBacklogThenDeleteWillLeaveFileDeleted() throws Exception {
- super.testWriteBacklogThenDeleteWillLeaveFileDeleted();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testWritesFile() throws Exception {
- super.testWritesFile();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testLastModifiedTime() throws Exception {
- super.testLastModifiedTime();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testExists() throws Exception {
- super.testExists();
- }
-
- @Test(groups={"Live", "Live-sanity"})
- @Override
- public void testAppendsFile() throws Exception {
- super.testAppendsFile();
- }
-}