package io.airlift.airship.coordinator;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
import com.google.common.io.Files;
import io.airlift.http.server.HttpServerConfig;
import io.airlift.http.server.HttpServerInfo;
import io.airlift.json.JsonCodec;
import io.airlift.node.NodeInfo;
import org.testng.annotations.Test;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import static com.google.common.collect.Lists.newArrayList;
import static io.airlift.airship.coordinator.TestingMavenRepository.MOCK_REPO;
import static io.airlift.testing.ValidationAssertions.assertValidates;
import static org.testng.Assert.assertEquals;
public class TestProvisionAgent
{
@Test(groups = "aws", parameters = "aws-credentials-file")
public void testProvisionAgent(String awsCredentialsFile)
throws Exception
{
String credentialsJson = Files.toString(new File(awsCredentialsFile), Charsets.UTF_8);
Map<String, String> map = JsonCodec.mapJsonCodec(String.class, String.class).fromJson(credentialsJson);
String awsAccessKey = map.get("access-id");
String awsSecretKey = map.get("private-key");
AwsProvisionerConfig awsProvisionerConfig = new AwsProvisionerConfig()
.setAirshipVersion("0.7-SNAPSHOT")
.setAwsAgentAmi("ami-27b7744e")
.setAwsAgentKeypair("keypair")
.setAwsAgentSecurityGroup("default")
.setAwsAgentDefaultInstanceType("t1.micro");
assertValidates(awsProvisionerConfig);
CoordinatorConfig coordinatorConfig = new CoordinatorConfig();
assertValidates(coordinatorConfig);
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
AmazonEC2Client ec2Client = new AmazonEC2Client(awsCredentials);
NodeInfo nodeInfo = createTestNodeInfo();
AwsProvisioner provisioner = new AwsProvisioner(awsCredentials,
ec2Client,
nodeInfo,
new HttpServerInfo(new HttpServerConfig(), nodeInfo),
MOCK_REPO,
coordinatorConfig,
awsProvisionerConfig);
int agentCount = 2;
List<Instance> provisioned = provisioner.provisionAgents(null, agentCount, null, null, null, null, null, null);
assertEquals(provisioned.size(), agentCount);
System.err.println("provisioned instances: " + provisioned);
List<Instance> running = provisioner.listAgents();
assertEquals(running.size(), agentCount);
System.err.println("running agents: " + running);
List<String> instanceIds = newArrayList();
for (Instance instance : provisioned) {
instanceIds.add(instance.getInstanceId());
}
provisioner.terminateAgents(instanceIds);
}
private static NodeInfo createTestNodeInfo()
{
String nodeId = UUID.randomUUID().toString();
return new NodeInfo("test", "foo", nodeId, getTestIp(), null, null, "/test/" + nodeId, "binarySpec", "configSpec");
}
private static InetAddress getTestIp()
{
try {
return InetAddress.getByName("192.0.2.0");
}
catch (UnknownHostException e) {
throw Throwables.propagate(e);
}
}
}