/*
Copyright 2013 Philipp Leitner
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 at.ac.tuwien.infosys.jcloudscale.test.integration.ec2;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.UUID;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import at.ac.tuwien.infosys.jcloudscale.annotations.JCloudScaleShutdown;
import at.ac.tuwien.infosys.jcloudscale.configuration.JCloudScaleConfiguration;
import at.ac.tuwien.infosys.jcloudscale.management.CloudManager;
import at.ac.tuwien.infosys.jcloudscale.policy.AbstractScalingPolicy;
import at.ac.tuwien.infosys.jcloudscale.test.testobject.TestCloudObject1;
import at.ac.tuwien.infosys.jcloudscale.test.util.ConfigurationHelper;
import at.ac.tuwien.infosys.jcloudscale.vm.ClientCloudObject;
import at.ac.tuwien.infosys.jcloudscale.vm.IHostPool;
import at.ac.tuwien.infosys.jcloudscale.vm.IVirtualHost;
import at.ac.tuwien.infosys.jcloudscale.vm.JCloudScaleClient;
import at.ac.tuwien.infosys.jcloudscale.vm.IHost;
import at.ac.tuwien.infosys.jcloudscale.vm.IVirtualHostPool;
import at.ac.tuwien.infosys.jcloudscale.vm.ec2.EC2Wrapper;
// UNSET ignore if you actually want to run EC2 tests
// by default we don't do it because, hey, it's not free :)
//
// (you will also need a correct aws.props
// file in the classpath and an ActiveMQ server)
// @Ignore
public class TestBasicEC2 extends at.ac.tuwien.infosys.jcloudscale.test.integration.base.TestBasic
{
private static EC2Helper staticInstanceManager;
@BeforeClass
public static void setup() throws Exception
{
//
// Initializing JCloudScale
//
JCloudScaleConfiguration cfg = ConfigurationHelper.createDefaultAmazonTestConfiguration();
JCloudScaleClient.setConfiguration(cfg);
//
// Starting one "static" host
//
staticInstanceManager = new EC2Helper(cfg);
staticInstanceManager.startStaticInstances();
// we have to get client prior to using CloudManager instance to initialize JCloudScale infrastructure (partially -- message queue in the cloud).
JCloudScaleClient.getClient();
cs = CloudManager.getInstance();
}
// we just disable this one test specifically for EC2
@Override
@Test
@Ignore
public void testObjectCount10WithRemove() {
}
@Test
public void testStartLargerHost() throws Exception
{
//altering scaling policy configuration to call some methods on cloudObject prior to work
JCloudScaleConfiguration config = JCloudScaleConfiguration.getConfiguration();
final AbstractScalingPolicy oldPolicy = config.common().scalingPolicy();
config.common().setScalingPolicy(new AbstractScalingPolicy() {
@Override
public IHost selectHost(ClientCloudObject newCloudObject, IHostPool hostPool) {
System.out.println("Starting new host");
return hostPool.startNewHost("m1.small");
}
@Override
public boolean scaleDown(IHost scaledHost, IHostPool hostPool) {
return oldPolicy.scaleDown(scaledHost, hostPool);
}
});
IVirtualHost host = null;
try
{
TestCloudObject1 co = new TestCloudObject1();
UUID coId = cs.getClientCloudObject(co).getId();
host = cs.getHost(coId);
assertEquals("m1.small", host.getDeclaredInstanceSize());
assertTrue(staticInstanceManager.verifyWithAWS(host, "m1.small"));
}
finally
{
//restoring previous scaling policy
config.common().setScalingPolicy(oldPolicy);
}
}
@AfterClass
@JCloudScaleShutdown
public static void tearDown() throws Exception
{
staticInstanceManager.shudownStaticInstances();
}
@After
public void cleanup() throws Exception
{
IVirtualHostPool pool = cs.getHostPool();
for(IHost host : pool.getHosts())
pool.shutdownHost(host.getId());
}
}