/*
* Copyright 2012 Nodeable Inc
*
* Licensed 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 com.streamreduce.util;
import com.streamreduce.connections.AuthType;
import com.streamreduce.connections.ConnectionProvidersForTests;
import com.streamreduce.core.model.Account;
import com.streamreduce.core.model.Connection;
import com.streamreduce.core.model.ConnectionCredentials;
import com.streamreduce.core.model.User;
import net.sf.json.JSONObject;
import org.jclouds.aws.domain.Region;
import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.domain.StorageType;
import org.jclouds.compute.domain.ComputeType;
import org.jclouds.domain.LocationBuilder;
import org.jclouds.domain.LocationScope;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.ResourceBundle;
/**
* Tests for {@link AWSClient}.
*/
public class AWSClientIT {
private ResourceBundle cloudProperties = ResourceBundle.getBundle("cloud");
private String awsAccessKeyId = cloudProperties.getString("nodeable.aws.accessKeyId");
private String awsSecretKey = cloudProperties.getString("nodeable.aws.secretKey");
private Connection connection;
AWSClient awsClient;
@Before
public void setUp() throws Exception {
Account testAccount = new Account.Builder()
.url("http://nodeable.com")
.description("Nodeable Test Account")
.name("Nodeable Testing")
.build();
User testUser = new User.Builder()
.account(testAccount)
.accountLocked(false)
.accountOriginator(true)
.fullname("Nodeable Test User")
.username("test_user_" + new Date().getTime() + "@nodeable.com")
.build();
connection = new Connection.Builder()
.provider(ConnectionProvidersForTests.AWS_CLOUD_PROVIDER)
.credentials(new ConnectionCredentials(awsAccessKeyId, awsSecretKey))
.alias("Test AWS Connection")
.user(testUser)
.authType(AuthType.USERNAME_PASSWORD)
.build();
awsClient = new AWSClient(connection);
try {
awsClient.validateConnection();
}
catch (Exception e) {
Assert.fail("Failed to validate the AWS connection");
}
}
/**
* Simple test that ensures that getting the AWS EC2 instances works as expected.
*
* @throws Exception if anything goes wrong
*/
@Test
public void testGetEC2Instances() throws Exception {
for (JSONObject instance : awsClient.getEC2Instances()) {
Assert.assertEquals(ComputeType.NODE.toString(), instance.getString("type"));
}
}
/**
* Simple test that ensures that getting the AWS S3 buckets works as expected.
*
* @throws Exception if anything goes wrong
*/
@Test
public void testGetS3Buckets() throws Exception {
for (JSONObject bucket : awsClient.getS3BucketsAsJson()) {
Assert.assertEquals(StorageType.CONTAINER.toString(), bucket.getString("type"));
}
}
/**
* Tests that S3's eu-west-1 support in jclouds works as expected.
*
* @see <a href="https://nodeable.jira.com/browse/SOBA-1876" />
* @see <a href="http://code.google.com/p/jclouds/issues/detail?id=1008" />
*
* @throws Exception if anything goes wrong
*/
@Test
public void testBucketsInEURegion() throws Exception {
BlobStore store = awsClient.getBlobStoreContext().getBlobStore();
LocationBuilder lb = new LocationBuilder();
String bucketName = "euregiontest" + new Date().getTime();
StorageMetadata bucket = null;
try {
lb.id(Region.EU_WEST_1)
.scope(LocationScope.REGION)
.description("Superfluous description to appease jclouds.");
store.createContainerInLocation(lb.build(), bucketName);
for (StorageMetadata sm : store.list()) {
if (sm.getName().equals(bucketName)) {
bucket = sm;
break;
}
}
} finally {
store.deleteContainer(bucketName);
}
Assert.assertNotNull(bucket);
}
}