http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java deleted file mode 100644 index 7111a61..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.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 org.jclouds.ec2.xml; - -import org.jclouds.ec2.domain.Volume.InstanceInitiatedShutdownBehavior; -import org.jclouds.http.functions.ParseSax; - -/** - * - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" - * /> - * @author Adrian Cole - */ -public class InstanceInitiatedShutdownBehaviorHandler extends - ParseSax.HandlerWithResult<InstanceInitiatedShutdownBehavior> { - - private StringBuilder currentText = new StringBuilder(); - private InstanceInitiatedShutdownBehavior behavior; - - public InstanceInitiatedShutdownBehavior getResult() { - return behavior; - } - - public void endElement(String uri, String name, String qName) { - if (qName.equalsIgnoreCase("value")) { - this.behavior = InstanceInitiatedShutdownBehavior.fromValue(currentText.toString().trim()); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java deleted file mode 100644 index 9c8933f..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import java.util.Set; - -import javax.inject.Inject; - -import org.jclouds.aws.util.AWSUtils; -import org.jclouds.ec2.domain.InstanceState; -import org.jclouds.ec2.domain.InstanceStateChange; -import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult; -import org.jclouds.location.Region; -import org.xml.sax.Attributes; - -import com.google.common.base.Supplier; -import com.google.common.collect.Sets; - -/** - * Parses the following XML document: - * <p/> - * TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" - * StartInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" StopInstancesResponse - * xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" - * - * @author Adrian Cole - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-TerminateInstancesResponseInfoType.html" - * /> - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-StartInstancesResponseInfoType.html" - * /> - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-StopInstancesResponseInfoType.html" - * /> - */ -public class InstanceStateChangeHandler extends - HandlerForGeneratedRequestWithResult<Set<InstanceStateChange>> { - private StringBuilder currentText = new StringBuilder(); - @Inject - @Region - Supplier<String> defaultRegion; - - Set<InstanceStateChange> instances = Sets.newLinkedHashSet(); - private InstanceState shutdownState; - private InstanceState previousState; - private String instanceId; - - private boolean inCurrentState; - - private boolean inPreviousState; - - @Override - public Set<InstanceStateChange> getResult() { - return instances; - } - - public void startElement(String uri, String name, String qName, Attributes attrs) { - if (qName.equals("shutdownState") || qName.equals("currentState")) { - inCurrentState = true; - } else if (qName.equals("previousState")) { - inPreviousState = true; - } - } - - public void endElement(String uri, String name, String qName) { - - if (qName.equals("instanceId")) { - this.instanceId = currentOrNull(); - } else if (qName.equals("shutdownState") || qName.equals("currentState")) { - inCurrentState = false; - } else if (qName.equals("previousState")) { - inPreviousState = false; - } else if (qName.equals("name")) { - if (inCurrentState) { - shutdownState = InstanceState.fromValue(currentOrNull()); - } else if (inPreviousState) { - previousState = InstanceState.fromValue(currentOrNull()); - } - } else if (qName.equals("item")) { - String region = AWSUtils.findRegionInArgsOrNull(getRequest()); - if (region == null) - region = defaultRegion.get(); - instances.add(new InstanceStateChange(region, instanceId, shutdownState, previousState)); - this.instanceId = null; - this.shutdownState = null; - this.previousState = null; - } - - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } - - protected String currentOrNull() { - String returnVal = currentText.toString().trim(); - return returnVal.equals("") ? null : returnVal; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java deleted file mode 100644 index b0ea53e..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import org.jclouds.http.functions.ParseSax; - -/** - * - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" - * /> - * @author Adrian Cole - */ -public class InstanceTypeHandler extends - ParseSax.HandlerWithResult<String> { - - private StringBuilder currentText = new StringBuilder(); - private String type; - - public String getResult() { - return type; - } - - public void endElement(String uri, String name, String qName) { - if (qName.equalsIgnoreCase("value")) { - this.type = currentText.toString().trim(); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java deleted file mode 100644 index 980ef35..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; - -import org.jclouds.http.functions.ParseSax; -import org.jclouds.net.domain.IpPermission; -import org.jclouds.net.domain.IpProtocol; -import org.xml.sax.SAXException; - -/** - * - * @author Adrian Cole - */ -public class IpPermissionHandler extends ParseSax.HandlerForGeneratedRequestWithResult<IpPermission> { - - private StringBuilder currentText = new StringBuilder(); - private IpPermission.Builder builder = IpPermission.builder(); - - /** - * {@inheritDoc} - */ - @Override - public IpPermission getResult() { - try { - return builder.build(); - } finally { - builder = IpPermission.builder(); - } - } - - private String userId; - private String groupId; - - /** - * {@inheritDoc} - */ - @Override - public void endElement(String uri, String name, String qName) throws SAXException { - if (equalsOrSuffix(qName, "ipProtocol")) { - // Algorete: ipProtocol can be an empty tag on EC2 clone (e.g. - // OpenStack EC2) - builder.ipProtocol(IpProtocol.fromValue(currentOrNegative(currentText))); - } else if (equalsOrSuffix(qName, "fromPort")) { - // Algorete: fromPort can be an empty tag on EC2 clone (e.g. OpenStack - // EC2) - builder.fromPort(Integer.parseInt(currentOrNegative(currentText))); - } else if (equalsOrSuffix(qName, "toPort")) { - // Algorete: toPort can be an empty tag on EC2 clone (e.g. OpenStack - // EC2) - builder.toPort(Integer.parseInt(currentOrNegative(currentText))); - } else if (equalsOrSuffix(qName, "cidrIp")) { - builder.cidrBlock(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "userId")) { - this.userId = currentOrNull(currentText); - } else if (equalsOrSuffix(qName, "groupName") || equalsOrSuffix(qName, "groupId")) { - this.groupId = currentOrNull(currentText); - } else if (equalsOrSuffix(qName, "item")) { - if (userId != null && groupId != null) - builder.tenantIdGroupNamePair(userId, groupId); - userId = groupId = null; - } - currentText = new StringBuilder(); - } - - private static String currentOrNegative(StringBuilder currentText) { - String returnVal = currentText.toString().trim(); - return returnVal.equals("") ? "-1" : returnVal; - } - /** - * {@inheritDoc} - */ - @Override - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java deleted file mode 100644 index 9f0d305..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.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 org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; - -import javax.inject.Inject; - -import org.jclouds.aws.util.AWSUtils; -import org.jclouds.ec2.domain.KeyPair; -import org.jclouds.ec2.domain.KeyPair.Builder; -import org.jclouds.http.functions.ParseSax; -import org.jclouds.location.Region; - -import com.google.common.base.Supplier; - -/** - * - * @see <a href= - * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html" - * /> - * @author Adrian Cole - */ -public class KeyPairResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<KeyPair> { - private final Supplier<String> defaultRegion; - private Builder builder; - - @Inject - public KeyPairResponseHandler(@Region Supplier<String> defaultRegion) { - this.defaultRegion = defaultRegion; - } - - @Override - public void startDocument() { - builder = KeyPair.builder().region(defaultRegion.get()); - } - - private StringBuilder currentText = new StringBuilder(); - - public KeyPair getResult() { - String region = AWSUtils.findRegionInArgsOrNull(getRequest()); - if (region != null) - builder.region(region); - try { - return builder.build(); - } finally { - builder = KeyPair.builder().region(defaultRegion.get()); - } - } - - public void endElement(String uri, String name, String qName) { - if (qName.equals("keyFingerprint")) { - builder.sha1OfPrivateKey(currentOrNull(currentText)); - } else if (qName.equals("keyMaterial")) { - builder.keyMaterial(currentOrNull(currentText)); - } else if (qName.equals("keyName")) { - builder.keyName(currentOrNull(currentText)); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java deleted file mode 100644 index 08e088a..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import java.util.Set; - -import org.jclouds.ec2.domain.Permission; -import org.jclouds.http.functions.ParseSax; - -import com.google.common.collect.Sets; - -/** - * - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeImageAttribute.html" - * /> - * @author Adrian Cole - */ -public class PermissionHandler extends ParseSax.HandlerWithResult<Permission> { - - private StringBuilder currentText = new StringBuilder(); - private Set<String> userIds = Sets.newHashSet(); - private Set<String> groups = Sets.newHashSet(); - - public Permission getResult() { - return new Permission(userIds, groups); - } - - public void endElement(String uri, String name, String qName) { - - if (qName.equalsIgnoreCase("group")) { - groups.add(currentText.toString().trim()); - } else if (qName.equalsIgnoreCase("userId")) { - userIds.add(currentText.toString().trim()); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java deleted file mode 100644 index 22a9193..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.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 org.jclouds.ec2.xml; - -import javax.inject.Inject; - -import org.jclouds.date.DateCodecFactory; -import org.jclouds.ec2.domain.Reservation; -import org.jclouds.ec2.domain.RunningInstance; -import org.jclouds.location.Region; - -import com.google.common.base.Supplier; - -/** - * Parses the following XML document: - * <p/> - * RunInstancesResponse xmlns="http: - * - * @author Adrian Cole - * @see <a href="http: /> - */ -public class RunInstancesResponseHandler extends BaseReservationHandler<Reservation<? extends RunningInstance>> { - - @Inject - public RunInstancesResponseHandler(DateCodecFactory dateCodecFactory, @Region Supplier<String> defaultRegion) { - super(dateCodecFactory, defaultRegion); - } - - @Override - public Reservation<? extends RunningInstance> getResult() { - return newReservation(); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java deleted file mode 100644 index bd7db04..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; - -import org.jclouds.aws.util.AWSUtils; -import org.jclouds.ec2.domain.SecurityGroup; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.functions.ParseSax; -import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult; -import org.jclouds.location.Region; -import org.jclouds.rest.internal.GeneratedHttpRequest; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -import com.google.common.base.Supplier; -import com.google.inject.Inject; - -/** - * @author Adrian Cole - */ -public class SecurityGroupHandler extends ParseSax.HandlerForGeneratedRequestWithResult<SecurityGroup> { - - protected final IpPermissionHandler ipPermissionHandler; - protected final Supplier<String> defaultRegion; - - protected StringBuilder currentText = new StringBuilder(); - protected SecurityGroup.Builder<?> builder; - protected boolean inIpPermissions; - - protected int itemDepth; - - protected String region; - - @Inject - public SecurityGroupHandler(IpPermissionHandler ipPermissionHandler, @Region Supplier<String> defaultRegion) { - this.ipPermissionHandler = ipPermissionHandler; - this.defaultRegion = defaultRegion; - } - - protected SecurityGroup.Builder<?> builder() { - return SecurityGroup.builder().region(region); - } - - @Override - public HandlerForGeneratedRequestWithResult<SecurityGroup> setContext(HttpRequest request) { - region = AWSUtils.findRegionInArgsOrNull(GeneratedHttpRequest.class.cast(request)); - if (region == null) - region = defaultRegion.get(); - builder = builder(); - return super.setContext(request); - } - - /** - * {@inheritDoc} - */ - @Override - public SecurityGroup getResult() { - try { - return builder.build(); - } finally { - builder = builder(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void startElement(String url, String name, String qName, Attributes attributes) throws SAXException { - if (equalsOrSuffix(qName, "item")) { - itemDepth++; - } else if (equalsOrSuffix(qName, "ipPermissions")) { - inIpPermissions = true; - } - if (inIpPermissions) { - ipPermissionHandler.startElement(url, name, qName, attributes); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void endElement(String uri, String name, String qName) throws SAXException { - if (equalsOrSuffix(qName, "item")) { - endItem(uri, name, qName); - itemDepth--; - } else if (equalsOrSuffix(qName, "ipPermissions")) { - inIpPermissions = false; - itemDepth = 0; - } else if (inIpPermissions) { - ipPermissionHandler.endElement(uri, name, qName); - } else if (equalsOrSuffix(qName, "groupName")) { - builder.name(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "groupId")) { - builder.id(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "ownerId")) { - builder.ownerId(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "groupDescription")) { - builder.description(currentOrNull(currentText)); - } - currentText = new StringBuilder(); - } - - protected void endItem(String uri, String name, String qName) throws SAXException { - if (inIpPermissions) { - if (itemDepth == 2) - builder.ipPermission(ipPermissionHandler.getResult()); - else - ipPermissionHandler.endElement(uri, name, qName); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void characters(char ch[], int start, int length) { - if (inIpPermissions) { - ipPermissionHandler.characters(ch, start, length); - } else { - currentText.append(ch, start, length); - } - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java deleted file mode 100644 index 3d49aa6..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.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 org.jclouds.ec2.xml; - -import java.util.Date; - -import javax.inject.Inject; - -import org.jclouds.aws.util.AWSUtils; -import org.jclouds.date.DateCodec; -import org.jclouds.date.DateCodecFactory; -import org.jclouds.ec2.domain.Snapshot; -import org.jclouds.ec2.domain.Snapshot.Status; -import org.jclouds.http.functions.ParseSax; -import org.jclouds.location.Region; - -import com.google.common.base.Supplier; - -/** - * - * @author Adrian Cole - */ -public class SnapshotHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Snapshot> { - private StringBuilder currentText = new StringBuilder(); - - protected final DateCodec dateCodec; - protected final Supplier<String> defaultRegion; - - private String id; - private String volumeId; - private int volumeSize; - private Status status; - private Date startTime; - private int progress; - private String ownerId; - private String description; - private String ownerAlias; - - @Inject - public SnapshotHandler(DateCodecFactory dateCodecFactory, @Region Supplier<String> defaultRegion) { - this.dateCodec = dateCodecFactory.iso8601(); - this.defaultRegion = defaultRegion; - } - - public Snapshot getResult() { - String region = AWSUtils.findRegionInArgsOrNull(getRequest()); - if (region == null) - region = defaultRegion.get(); - Snapshot snapshot = new Snapshot(region, id, volumeId, volumeSize, status, startTime, - progress, ownerId, description, ownerAlias); - this.id = null; - this.volumeId = null; - this.volumeSize = 0; - this.status = null; - this.startTime = null; - this.progress = 0; - this.ownerId = null; - this.description = null; - this.ownerAlias = null; - return snapshot; - } - - public void endElement(String uri, String name, String qName) { - if (qName.equals("snapshotId")) { - id = currentText.toString().trim(); - } else if (qName.equals("volumeId")) { - volumeId = currentText.toString().trim(); - } else if (qName.equals("volumeSize")) { - volumeSize = Integer.parseInt(currentText.toString().trim()); - } else if (qName.equals("status")) { - status = Snapshot.Status.fromValue(currentText.toString().trim()); - } else if (qName.equals("startTime")) { - startTime = dateCodec.toDate(currentText.toString().trim()); - } else if (qName.equals("progress")) { - String progressString = currentText.toString().trim(); - if (!progressString.equals("")) { - progressString = progressString.substring(0, progressString.length() - 1); - progress = Integer.parseInt(progressString); - } - } else if (qName.equals("ownerId")) { - ownerId = currentText.toString().trim(); - } else if (qName.equals("description")) { - description = currentText.toString().trim(); - } else if (qName.equals("ownerAlias")) { - ownerAlias = currentText.toString().trim(); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java deleted file mode 100644 index 054b9f4..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import org.jclouds.http.functions.ParseSax; - -/** - * - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" - * /> - * @author Adrian Cole - */ -public class StringValueHandler extends - ParseSax.HandlerWithResult<String> { - - private StringBuilder currentText = new StringBuilder(); - private String value; - - public String getResult() { - return value; - } - - public void endElement(String uri, String name, String qName) { - if (qName.equalsIgnoreCase("value")) { - this.value = currentText.toString().trim(); - } - currentText = new StringBuilder(); - } - - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SubnetHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SubnetHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SubnetHandler.java deleted file mode 100644 index 6b3ca5d..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/SubnetHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; - -import javax.inject.Inject; - -import org.jclouds.ec2.domain.Subnet; -import org.jclouds.http.functions.ParseSax; -import org.xml.sax.Attributes; - -/** - * @see <a href="http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-ItemType-SubnetType.html" >xml</a> - * - * @author Adrian Cole - * @author Andrew Bayer - */ -public class SubnetHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Subnet> { - private StringBuilder currentText = new StringBuilder(); - private Subnet.Builder builder = Subnet.builder(); - private final TagSetHandler tagSetHandler; - private boolean inTagSet; - - @Inject - public SubnetHandler(TagSetHandler tagSetHandler) { - this.tagSetHandler = tagSetHandler; - } - - @Override - public Subnet getResult() { - try { - return builder.build(); - } finally { - builder = Subnet.builder(); - } - } - - @Override - public void startElement(String uri, String name, String qName, Attributes attrs) { - if (equalsOrSuffix(qName, "tagSet")) { - inTagSet = true; - } - if (inTagSet) { - tagSetHandler.startElement(uri, name, qName, attrs); - } - } - - @Override - public void endElement(String uri, String name, String qName) { - if (equalsOrSuffix(qName, "tagSet")) { - inTagSet = false; - builder.tags(tagSetHandler.getResult()); - } else if (inTagSet) { - tagSetHandler.endElement(uri, name, qName); - } else if (equalsOrSuffix(qName, "subnetId")) { - builder.subnetId(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "state")) { - builder.subnetState(Subnet.State.fromValue(currentOrNull(currentText))); - } else if (equalsOrSuffix(qName, "vpcId")) { - builder.vpcId(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "cidrBlock")) { - builder.cidrBlock(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "availableIpAddressCount")) { - builder.availableIpAddressCount(Integer.parseInt(currentOrNull(currentText))); - } else if (equalsOrSuffix(qName, "availabilityZone")) { - builder.availabilityZone(currentOrNull(currentText)); - } - currentText = new StringBuilder(); - } - - @Override - public void characters(char ch[], int start, int length) { - if (inTagSet) { - tagSetHandler.characters(ch, start, length); - } else { - currentText.append(ch, start, length); - } - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagHandler.java deleted file mode 100644 index 6cd2934..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagHandler.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; - -import org.jclouds.ec2.domain.Tag; -import org.jclouds.http.functions.ParseSax; -import org.xml.sax.SAXException; - -import com.google.common.base.Strings; - -/** - * @see <a - * href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html" - * >xml</a> - * - * @author Adrian Cole - */ -public class TagHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Tag> { - - private StringBuilder currentText = new StringBuilder(); - private Tag.Builder builder = Tag.builder(); - - /** - * {@inheritDoc} - */ - @Override - public Tag getResult() { - try { - return builder.build(); - } finally { - builder = Tag.builder(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void endElement(String uri, String name, String qName) throws SAXException { - if (equalsOrSuffix(qName, "resourceId")) { - builder.resourceId(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "resourceType")) { - builder.resourceType(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "key")) { - builder.key(currentOrNull(currentText)); - } else if (equalsOrSuffix(qName, "value")) { - // empty is same as not present - builder.value(Strings.emptyToNull(currentOrNull(currentText))); - } - currentText = new StringBuilder(); - } - - /** - * {@inheritDoc} - */ - @Override - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagSetHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagSetHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagSetHandler.java deleted file mode 100644 index 847b4b4..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/TagSetHandler.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static org.jclouds.util.SaxUtils.currentOrNull; -import static org.jclouds.util.SaxUtils.equalsOrSuffix; - -import java.util.Map; - -import org.jclouds.http.functions.ParseSax; -import org.xml.sax.Attributes; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; - -/** - * @author [email protected] - */ -public class TagSetHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Map<String, String>> { - private StringBuilder currentText = new StringBuilder(); - - private ImmutableMap.Builder<String, String> result; - private boolean inItem = false; - private String key; - private String value; - - public Map<String, String> getResult() { - return result.build(); - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) { - if (equalsOrSuffix(qName, "tagSet")) { - result = ImmutableMap.builder(); - } else if (qName.equals("item")) { - inItem = true; - key = null; - value = null; - } - currentText = new StringBuilder(); - } - - @Override - public void endElement(String uri, String localName, String qName) { - if (qName.equals("item")) { - inItem = false; - if (key != null) { - result.put(key, Strings.nullToEmpty(value)); - } - } - if (inItem) { - if (qName.equals("key")) { - key = currentOrNull(currentText); - } else if (qName.equals("value")) { - value = currentOrNull(currentText); - } - } - } - - @Override - public void characters(char ch[], int start, int length) { - currentText.append(ch, start, length); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/UnencodeStringValueHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/UnencodeStringValueHandler.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/UnencodeStringValueHandler.java deleted file mode 100644 index f4db176..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/xml/UnencodeStringValueHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2.xml; - -import static com.google.common.base.Charsets.UTF_8; -import static com.google.common.io.BaseEncoding.base64; - -/** - * - * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" - * /> - * @author Adrian Cole - */ -public class UnencodeStringValueHandler extends StringValueHandler { - - @Override - public String getResult() { - String result = super.getResult(); - if (result != null) - result = new String(base64().decode(result), UTF_8); - return result; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata deleted file mode 100644 index dce15a1..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata +++ /dev/null @@ -1 +0,0 @@ -org.jclouds.ec2.EC2ApiMetadata \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/CloudApplicationArchitecturesEC2ApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/CloudApplicationArchitecturesEC2ApiLiveTest.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/CloudApplicationArchitecturesEC2ApiLiveTest.java deleted file mode 100644 index 2a999da..0000000 --- a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/test/java/org/jclouds/ec2/CloudApplicationArchitecturesEC2ApiLiveTest.java +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.ec2; - -import static java.util.concurrent.TimeUnit.SECONDS; -import static org.jclouds.ec2.options.RunInstancesOptions.Builder.asType; -import static org.jclouds.util.Predicates2.retry; -import static org.jclouds.scriptbuilder.domain.Statements.exec; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.fail; - -import java.io.IOException; -import java.net.UnknownHostException; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeoutException; - -import org.jclouds.aws.AWSResponseException; -import org.jclouds.compute.domain.ExecResponse; -import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; -import org.jclouds.domain.LoginCredentials; -import org.jclouds.ec2.domain.BlockDevice; -import org.jclouds.ec2.domain.Image.EbsBlockDevice; -import org.jclouds.ec2.domain.InstanceState; -import org.jclouds.ec2.domain.InstanceType; -import org.jclouds.ec2.domain.KeyPair; -import org.jclouds.ec2.domain.PublicIpInstanceIdPair; -import org.jclouds.ec2.domain.Reservation; -import org.jclouds.ec2.domain.RunningInstance; -import org.jclouds.ec2.domain.Volume.InstanceInitiatedShutdownBehavior; -import org.jclouds.ec2.predicates.InstanceHasIpAddress; -import org.jclouds.ec2.predicates.InstanceStateRunning; -import org.jclouds.http.HttpResponseException; -import org.jclouds.net.domain.IpProtocol; -import org.jclouds.predicates.SocketOpen; -import org.jclouds.scriptbuilder.ScriptBuilder; -import org.jclouds.scriptbuilder.domain.OsFamily; -import org.jclouds.ssh.SshClient; -import org.jclouds.ssh.SshException; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import com.google.common.net.HostAndPort; -import com.google.inject.Injector; - -/** - * Follows the book Cloud Application Architectures ISBN: 978-0-596-15636-7 - * <p/> - * adds in functionality to boot a lamp instance: http://alestic.com/2009/06/ec2-user-data-scripts - * <p/> - * Generally disabled, as it incurs higher fees. - * - * @author Adrian Cole - */ -@Test(groups = "live", enabled = false, singleThreaded = true, testName = "CloudApplicationArchitecturesEC2ApiLiveTest") -public class CloudApplicationArchitecturesEC2ApiLiveTest extends BaseComputeServiceContextLiveTest { - public CloudApplicationArchitecturesEC2ApiLiveTest() { - provider = "ec2"; - } - - private EC2Api client; - protected SshClient.Factory sshFactory; - private String instancePrefix = System.getProperty("user.name") + ".ec2"; - private KeyPair keyPair; - private String securityGroupName; - private String instanceId; - private String address; - - private Predicate<HostAndPort> socketTester; - private Predicate<RunningInstance> hasIpTester; - private Predicate<RunningInstance> runningTester; - - @BeforeClass(groups = { "integration", "live" }) - public void setupContext() { - super.setupContext(); - Injector injector = view.utils().injector(); - client = injector.getInstance(EC2Api.class); - sshFactory = injector.getInstance(SshClient.Factory.class); - runningTester = retry(new InstanceStateRunning(client), 180, 5,SECONDS); - hasIpTester = retry(new InstanceHasIpAddress(client), 180, 5, SECONDS); - SocketOpen socketOpen = injector.getInstance(SocketOpen.class); - socketTester = retry(socketOpen, 180, 1, SECONDS); - } - - @Test(enabled = false) - void testCreateSecurityGroupIngressCidr() throws InterruptedException, ExecutionException, TimeoutException { - securityGroupName = instancePrefix + "ingress"; - - try { - client.getSecurityGroupApi().get().deleteSecurityGroupInRegion(null, securityGroupName); - } catch (Exception e) { - } - - client.getSecurityGroupApi().get().createSecurityGroupInRegion(null, securityGroupName, securityGroupName); - for (int port : new int[] { 80, 443, 22 }) { - client.getSecurityGroupApi().get().authorizeSecurityGroupIngressInRegion(null, securityGroupName, - IpProtocol.TCP, port, port, "0.0.0.0/0"); - } - } - - @Test(enabled = false) - void testCreateKeyPair() throws InterruptedException, ExecutionException, TimeoutException { - String keyName = instancePrefix + "1"; - try { - client.getKeyPairApi().get().deleteKeyPairInRegion(null, keyName); - } catch (Exception e) { - - } - client.getKeyPairApi().get().deleteKeyPairInRegion(null, keyName); - - keyPair = client.getKeyPairApi().get().createKeyPairInRegion(null, keyName); - assertNotNull(keyPair); - assertNotNull(keyPair.getKeyMaterial()); - assertNotNull(keyPair.getSha1OfPrivateKey()); - assertEquals(keyPair.getKeyName(), keyName); - } - - @Test(enabled = false, dependsOnMethods = { "testCreateKeyPair", "testCreateSecurityGroupIngressCidr" }) - public void testCreateRunningInstance() throws Exception { - String script = new ScriptBuilder() // lamp install script - .addStatement(exec("runurl run.alestic.com/apt/upgrade"))// - .addStatement(exec("runurl run.alestic.com/install/lamp"))// - .render(OsFamily.UNIX); - - RunningInstance instance = null; - while (instance == null) { - try { - - System.out.printf("%d: running instance%n", System.currentTimeMillis()); - Reservation<? extends RunningInstance> reservation = client.getInstanceApi().get().runInstancesInRegion( - null, null, // allow - // ec2 - // to - // chose - // an - // availability - // zone - "ami-ccf615a5", // alestic ami allows auto-invoke of - // user data scripts - 1, // minimum instances - 1, // maximum instances - asType(InstanceType.M1_SMALL) // smallest instance size - .withKeyName(keyPair.getKeyName()) // key I - // created - // above - .withSecurityGroup(securityGroupName) // group I - // created - // above - .withUserData(script.getBytes())); // script to - // run as root - - instance = Iterables.getOnlyElement(reservation); - - } catch (HttpResponseException htpe) { - if (htpe.getResponse().getStatusCode() == 400) - continue; - throw htpe; - } - } - assertNotNull(instance.getId()); - instanceId = instance.getId(); - assertEquals(instance.getInstanceState(), InstanceState.PENDING); - instance = blockUntilWeCanSshIntoInstance(instance); - - verifyInstanceProperties(script); - tryToChangeStuff(); - sshPing(instance); - System.out.printf("%d: %s ssh connection made%n", System.currentTimeMillis(), instanceId); - - } - - private void verifyInstanceProperties(String script) { - assertEquals(script, client.getInstanceApi().get().getUserDataForInstanceInRegion(null, instanceId)); - - assertEquals(null, client.getInstanceApi().get().getRootDeviceNameForInstanceInRegion(null, instanceId)); - - assert client.getInstanceApi().get().getRamdiskForInstanceInRegion(null, instanceId).startsWith("ari-"); - - assertEquals(false, client.getInstanceApi().get().isApiTerminationDisabledForInstanceInRegion(null, instanceId)); - - assert client.getInstanceApi().get().getKernelForInstanceInRegion(null, instanceId).startsWith("aki-"); - - assertEquals(InstanceType.M1_SMALL, - client.getInstanceApi().get().getInstanceTypeForInstanceInRegion(null, instanceId)); - - assertEquals(InstanceInitiatedShutdownBehavior.TERMINATE, client.getInstanceApi().get() - .getInstanceInitiatedShutdownBehaviorForInstanceInRegion(null, instanceId)); - - assertEquals(ImmutableMap.<String, EbsBlockDevice> of(), client.getInstanceApi().get() - .getBlockDeviceMappingForInstanceInRegion(null, instanceId)); - } - - private void setApiTerminationDisabledForInstanceInRegion() { - client.getInstanceApi().get().setApiTerminationDisabledForInstanceInRegion(null, instanceId, true); - assertEquals(true, client.getInstanceApi().get().isApiTerminationDisabledForInstanceInRegion(null, instanceId)); - client.getInstanceApi().get().setApiTerminationDisabledForInstanceInRegion(null, instanceId, false); - assertEquals(false, client.getInstanceApi().get().isApiTerminationDisabledForInstanceInRegion(null, instanceId)); - } - - private void tryToChangeStuff() { - setApiTerminationDisabledForInstanceInRegion(); - setUserDataForInstanceInRegion(); - setRamdiskForInstanceInRegion(); - setKernelForInstanceInRegion(); - setInstanceTypeForInstanceInRegion(); - setInstanceInitiatedShutdownBehaviorForInstanceInRegion(); - setBlockDeviceMappingForInstanceInRegion(); - } - - private void setUserDataForInstanceInRegion() { - try { - client.getInstanceApi().get().setUserDataForInstanceInRegion(null, instanceId, "test".getBytes()); - fail("shouldn't be allowed, as instance needs to be stopped"); - } catch (AWSResponseException e) { - assertEquals("IncorrectInstanceState", e.getError().getCode()); - } - } - - private void setRamdiskForInstanceInRegion() { - try { - String ramdisk = client.getInstanceApi().get().getRamdiskForInstanceInRegion(null, instanceId); - client.getInstanceApi().get().setRamdiskForInstanceInRegion(null, instanceId, ramdisk); - fail("shouldn't be allowed, as instance needs to be stopped"); - } catch (AWSResponseException e) { - assertEquals("IncorrectInstanceState", e.getError().getCode()); - } - } - - private void setKernelForInstanceInRegion() { - try { - String oldKernel = client.getInstanceApi().get().getKernelForInstanceInRegion(null, instanceId); - client.getInstanceApi().get().setKernelForInstanceInRegion(null, instanceId, oldKernel); - fail("shouldn't be allowed, as instance needs to be stopped"); - } catch (AWSResponseException e) { - assertEquals("IncorrectInstanceState", e.getError().getCode()); - } - } - - private void setInstanceTypeForInstanceInRegion() { - try { - client.getInstanceApi().get().setInstanceTypeForInstanceInRegion(null, instanceId, InstanceType.C1_MEDIUM); - fail("shouldn't be allowed, as instance needs to be stopped"); - } catch (AWSResponseException e) { - assertEquals("IncorrectInstanceState", e.getError().getCode()); - } - } - - private void setBlockDeviceMappingForInstanceInRegion() { - Map<String, BlockDevice> mapping = Maps.newLinkedHashMap(); - try { - client.getInstanceApi().get().setBlockDeviceMappingForInstanceInRegion(null, instanceId, mapping); - fail("shouldn't be allowed, as instance needs to be ebs based-ami"); - } catch (AWSResponseException e) { - assertEquals("InvalidParameterCombination", e.getError().getCode()); - } - } - - private void setInstanceInitiatedShutdownBehaviorForInstanceInRegion() { - try { - client.getInstanceApi().get().setInstanceInitiatedShutdownBehaviorForInstanceInRegion(null, instanceId, - InstanceInitiatedShutdownBehavior.STOP); - fail("shouldn't be allowed, as instance needs to be ebs based-ami"); - } catch (AWSResponseException e) { - assertEquals("UnsupportedInstanceAttribute", e.getError().getCode()); - } - } - - @Test(enabled = false, dependsOnMethods = "testCreateRunningInstance") - void testReboot() throws InterruptedException, ExecutionException, TimeoutException, IOException { - RunningInstance instance = getInstance(instanceId); - System.out.printf("%d: %s rebooting instance %n", System.currentTimeMillis(), instanceId); - client.getInstanceApi().get().rebootInstancesInRegion(null, instanceId); - Thread.sleep(1000); - instance = getInstance(instanceId); - blockUntilWeCanSshIntoInstance(instance); - SshClient ssh = sshFactory.create(HostAndPort.fromParts(instance.getIpAddress(), 22), - LoginCredentials.builder().user("root").privateKey(keyPair.getKeyMaterial()).build()); - try { - ssh.connect(); - ExecResponse uptime = ssh.exec("uptime"); - assert uptime.getOutput().indexOf("0 min") != -1 : "reboot didn't work: " + uptime; - } finally { - if (ssh != null) - ssh.disconnect(); - } - } - - @Test(enabled = false, dependsOnMethods = "testReboot") - void testElasticIpAddress() throws InterruptedException, ExecutionException, TimeoutException, IOException { - address = client.getElasticIPAddressApi().get().allocateAddressInRegion(null); - assertNotNull(address); - - PublicIpInstanceIdPair compare = Iterables.getLast(client.getElasticIPAddressApi().get() - .describeAddressesInRegion(null, address)); - - assertEquals(compare.getPublicIp(), address); - assert compare.getInstanceId() == null; - - client.getElasticIPAddressApi().get().associateAddressInRegion(null, address, instanceId); - - compare = Iterables.getLast(client.getElasticIPAddressApi().get().describeAddressesInRegion(null, address)); - - assertEquals(compare.getPublicIp(), address); - assertEquals(compare.getInstanceId(), instanceId); - - Reservation<? extends RunningInstance> reservation = Iterables.getOnlyElement(client.getInstanceApi().get() - .describeInstancesInRegion(null, instanceId)); - - assertNotNull(Iterables.getOnlyElement(reservation).getIpAddress()); - assertNotEquals(address, Iterables.getOnlyElement(reservation).getIpAddress()); - - doCheckKey(address); - - client.getElasticIPAddressApi().get().disassociateAddressInRegion(null, address); - - compare = Iterables.getLast(client.getElasticIPAddressApi().get().describeAddressesInRegion(null, address)); - - assertEquals(compare.getPublicIp(), address); - assert compare.getInstanceId() == null; - - reservation = Iterables.getOnlyElement(client.getInstanceApi().get().describeInstancesInRegion(null, instanceId)); - // assert reservation.getRunningInstances().last().getIpAddress() == null; - // TODO - } - - private RunningInstance blockUntilWeCanSshIntoInstance(RunningInstance instance) throws UnknownHostException { - System.out.printf("%d: %s awaiting instance to run %n", System.currentTimeMillis(), instance.getId()); - assert runningTester.apply(instance); - - instance = getInstance(instance.getId()); - - System.out - .printf("%d: %s awaiting instance to have ip assigned %n", System.currentTimeMillis(), instance.getId()); - assert hasIpTester.apply(instance); - - System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), instance.getIpAddress()); - assert socketTester.apply(HostAndPort.fromParts(instance.getIpAddress(), 22)); - - System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), instance.getDnsName()); - sshPing(instance); - System.out.printf("%d: %s ssh connection made%n", System.currentTimeMillis(), instance.getId()); - - System.out.printf("%d: %s awaiting http service to start%n", System.currentTimeMillis(), instance.getIpAddress()); - assert socketTester.apply(HostAndPort.fromParts(instance.getIpAddress(), 80)); - System.out.printf("%d: %s http service started%n", System.currentTimeMillis(), instance.getDnsName()); - return instance; - } - - private RunningInstance getInstance(String instanceId) { - // search my identity for the instance I just created - Set<? extends Reservation<? extends RunningInstance>> reservations = client.getInstanceApi().get() - .describeInstancesInRegion(null, instanceId); // last parameter - // (ids) narrows the - // search - - return Iterables.getOnlyElement(Iterables.getOnlyElement(reservations)); - } - - /** - * this tests "personality" as the file looked up was sent during instance creation - * - * @throws UnknownHostException - */ - private void sshPing(RunningInstance newDetails) throws UnknownHostException { - try { - doCheckKey(newDetails); - } catch (SshException e) {// try twice in case there is a network timeout - try { - Thread.sleep(10 * 1000); - } catch (InterruptedException e1) { - } - doCheckKey(newDetails); - } - } - - private void doCheckKey(RunningInstance newDetails) throws UnknownHostException { - doCheckKey(newDetails.getIpAddress()); - } - - private void doCheckKey(String address) { - SshClient ssh = sshFactory.create(HostAndPort.fromParts(address, 22), - LoginCredentials.builder().user("root").privateKey(keyPair.getKeyMaterial()).build()); - try { - ssh.connect(); - ExecResponse hello = ssh.exec("echo hello"); - assertEquals(hello.getOutput().trim(), "hello"); - } finally { - if (ssh != null) - ssh.disconnect(); - } - } - - @AfterTest - void cleanup() throws InterruptedException, ExecutionException, TimeoutException { - if (address != null) - client.getElasticIPAddressApi().get().releaseAddressInRegion(null, address); - if (instanceId != null) - client.getInstanceApi().get().terminateInstancesInRegion(null, instanceId); - if (keyPair != null) - client.getKeyPairApi().get().deleteKeyPairInRegion(null, keyPair.getKeyName()); - if (securityGroupName != null) - client.getSecurityGroupApi().get().deleteSecurityGroupInRegion(null, securityGroupName); - } - -}
