/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
/*
*/
package test.cloudml.core;
import org.cloudml.core.Component;
import org.cloudml.core.ComponentInstance;
import org.cloudml.core.Deployment;
import org.cloudml.core.ExternalComponent;
import org.cloudml.core.ExternalComponentInstance;
import org.cloudml.core.InternalComponent;
import org.cloudml.core.builders.DeploymentBuilder;
import org.cloudml.core.builders.ExternalComponentBuilder;
import org.cloudml.core.builders.ExternalComponentInstanceBuilder;
import org.cloudml.core.builders.InternalComponentBuilder;
import org.junit.Test;
import static org.cloudml.core.builders.Commons.*;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.cloudml.core.samples.SshClientServer.*;
public class ExternalComponentInstanceTest extends ComponentInstanceTest {
@Override
public ComponentInstance<? extends Component> aSampleComponentInstance(String name) {
return aSampleExternalComponentInstance(name);
}
public ExternalComponentInstance<? extends ExternalComponent> aSampleExternalComponentInstance(String name) {
return anExternalComponentInstance().named(name).build();
}
public ExternalComponentInstance<? extends ExternalComponent> aSampleExternalComponentInstance() {
return aSampleExternalComponentInstance("foo");
}
@Test
public void testPublicIpAddressAccess() {
final String anIp = "127.0.0.1";
final ExternalComponentInstance<? extends ExternalComponent> sut = aSampleExternalComponentInstance();
sut.setPublicAddress(anIp);
assertThat("public IP", sut.getPublicAddress(), is(equalTo(anIp)));
}
@Override
public void detectsComponentsThatCanBeHosted() {
final Deployment deployment = aDeploymentWithOneRunningJetty()
.with(aWarApplication("JSR 154"))
.build();
final ExternalComponentInstance sut = deployment.getComponentInstances().onlyExternals().firstNamed("sut");
final InternalComponent toBeDeployed = deployment.getComponents().onlyInternals().firstNamed("War App");
assertThat("can be hosted", sut.canHost(toBeDeployed));
}
@Override
public void detectsComponentsThatCannotBeHosted() {
final Deployment deployment = aDeploymentWithOneRunningJetty()
.with(aWarApplication("JSR 155"))
.build();
final ExternalComponentInstance sut = deployment.getComponentInstances().onlyExternals().firstNamed("sut");
final InternalComponent toBeDeployed = deployment.getComponents().onlyInternals().firstNamed("War App");
assertThat("cannot be hosted", !sut.canHost(toBeDeployed));
}
private ExternalComponentBuilder jetty() {
return anExternalComponent()
.named("Jetty")
.with(aProvidedExecutionPlatform()
.offering("War Container", "JSR 154"))
.providedBy(AMAZON_EC2);
}
private ExternalComponentInstanceBuilder oneRunningJetty() {
return anExternalComponentInstance()
.named("sut")
.ofType("Jetty");
}
private InternalComponentBuilder aWarApplication(String jsr) {
return anInternalComponent()
.named("War App")
.with(aRequiredExecutionPlatform()
.demanding("War Container", jsr));
}
private DeploymentBuilder aDeploymentWithOneRunningJetty() {
return aDeployment()
.with(amazonEc2())
.with(jetty())
.with(oneRunningJetty());
}
}