blob: 88239d4e3c1941d67679a087c1e16eb5bb7e3550 [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.aws.ec2.services;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.getOnlyElement;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import java.util.Properties;
import java.util.Set;
import org.jclouds.Constants;
import org.jclouds.aws.ec2.AWSEC2AsyncClient;
import org.jclouds.aws.ec2.AWSEC2Client;
import org.jclouds.aws.ec2.domain.AWSRunningInstance;
import org.jclouds.aws.ec2.domain.Tag;
import org.jclouds.aws.ec2.util.TagFilters;
import org.jclouds.aws.ec2.util.TagFilters.ResourceType;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.rest.RestContext;
import org.jclouds.sshj.config.SshjSshClientModule;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.inject.Module;
/**
* Tests live behavior of {@code TagClient}
*
* @author grkvlt@apache.org
*/
@Test(groups = "live", singleThreaded = true)
public class TagClientLiveTest {
private TagClient client;
private RestContext<AWSEC2Client, AWSEC2AsyncClient> context;
protected String provider = "aws-ec2";
protected String identity;
protected String credential;
protected String endpoint;
protected String apiversion;
protected String testGroup;
private ComputeServiceContext computeContext;
protected void setupCredentials() {
identity = checkNotNull(System.getProperty("test." + provider + ".identity"), "test." + provider + ".identity");
credential = checkNotNull(System.getProperty("test." + provider + ".credential"), "test." + provider + ".credential");
endpoint = System.getProperty("test." + provider + ".endpoint", null);
apiversion = System.getProperty("test." + provider + ".apiversion", null);
}
protected Properties setupProperties() {
Properties overrides = new Properties();
overrides.setProperty(Constants.PROPERTY_TRUST_ALL_CERTS, "true");
overrides.setProperty(Constants.PROPERTY_RELAX_HOSTNAME, "true");
overrides.setProperty(provider + ".identity", identity);
overrides.setProperty(provider + ".credential", credential);
if (endpoint != null)
overrides.setProperty(provider + ".endpoint", endpoint);
if (apiversion != null)
overrides.setProperty(provider + ".apiversion", apiversion);
return overrides;
}
@BeforeGroups(groups = { "live" })
public void setupClientAndSecurityGroup() {
setupCredentials();
Properties overrides = setupProperties();
computeContext = new ComputeServiceContextFactory().createContext(provider, ImmutableSet.<Module> of(
new Log4JLoggingModule(), new SshjSshClientModule()), overrides);
context = computeContext.getProviderSpecificContext();
client = context.getApi().getTagServices();
try {
testGroup = context.getApi().getSecurityGroupServices().createSecurityGroupInRegionAndReturnId(null,
"test-group", "test-group");
} catch (IllegalStateException e) {
// already exists
testGroup = Iterables.get(
context.getApi().getSecurityGroupServices().describeSecurityGroupsInRegion(null, "test-group"), 0)
.getId();
}
}
@AfterGroups(groups = { "live" })
public void deleteSecurityGroup() {
context.getApi().getSecurityGroupServices().deleteSecurityGroupInRegionById(null, testGroup);
}
public static final String PREFIX = System.getProperty("user.name") + "-ec2";
@Test
void test() {
cleanupTag(testGroup, "test-key");
cleanupTag(testGroup, "empty-key");
try {
client.createTagsInRegion(null, ImmutableList.<String>builder().add(testGroup).build(), ImmutableMap.<String, String>builder().put("test-key", "test-value").build());
checkTag(testGroup, ResourceType.SECURITY_GROUP, "test-key", "test-value");
client.createTagsInRegion(null, ImmutableList.<String>builder().add(testGroup).build(), ImmutableMap.<String, String>builder().put("empty-key", "").build());
checkTag(testGroup, ResourceType.SECURITY_GROUP, "empty-key", "");
} finally {
cleanupTag(testGroup, "test-key");
cleanupTag(testGroup, "empty-key");
}
}
protected void cleanupTag(String resourceId, String key) {
try {
client.deleteTagsInRegion(null, ImmutableList.<String>builder().add(resourceId).build(), ImmutableMap.<String, String>builder().put(key, null).build());
} catch (Exception e) {
// Ignore
}
}
protected void checkTag(String resourceId, ResourceType resourceType, String key, String value) {
Set<Tag> results = client.describeTagsInRegion(null, TagFilters.filters().resourceId(resourceId).resourceType(resourceType).keyValuePair(key, value).build());
assertNotNull(results);
assertEquals(results.size(), 1);
Tag tag = Iterables.getOnlyElement(results);
assertEquals(tag.getResourceId(), resourceId);
assertEquals(tag.getResourceType(), resourceType);
assertEquals(tag.getKey(), key);
assertEquals(tag.getValue(), value);
}
protected AWSRunningInstance getInstance(AWSInstanceClient instanceClient, String id) {
return getOnlyElement(getOnlyElement(instanceClient.describeInstancesInRegion(null, id)));
}
@AfterTest
public void shutdown() {
context.close();
}
}