/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.apache.brooklyn.location.jclouds;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.util.Set;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
public class JcloudsByonLocationResolverSoftlayerLiveTest extends AbstractJcloudsLiveTest {
private static final String SOFTLAYER_REGION = "dal05";
private static final String SOFTLAYER_LOCATION_SPEC = "jclouds:softlayer:"+SOFTLAYER_REGION;
private String slVmUser;
private String slVmInstanceId;
private String slVmIp;
private String slVmHostname;
private LocalManagementContext classManagementContext;
private JcloudsLocation classEc2Loc;
private JcloudsSshMachineLocation classVm;
@BeforeClass(groups="Live")
public void setUpClass() throws Exception {
classManagementContext = newManagementContext();
classEc2Loc = (JcloudsLocation) classManagementContext.getLocationRegistry().resolve(SOFTLAYER_LOCATION_SPEC);
classVm = (JcloudsSshMachineLocation)classEc2Loc.obtain(MutableMap.<String,Object>builder()
.put("inboundPorts", ImmutableList.of(22))
.build());
slVmUser = classVm.getUser();
slVmInstanceId = classVm.getJcloudsId();
slVmIp = classVm.getAddress().getHostAddress();
slVmHostname = classVm.getNode().getHostname();
}
@AfterClass(alwaysRun=true)
public void tearDownClass() throws Exception {
try {
if (classVm != null) {
classEc2Loc.release(classVm);
}
} finally {
if (classManagementContext != null) classManagementContext.terminate();
}
}
@Test(groups={"Live"})
public void testResolvesJcloudsByonSoftlayer() throws Exception {
checkSoftlayer("jcloudsByon:(provider=\"softlayer\",region=\""+SOFTLAYER_REGION+"\",hosts=\""+slVmInstanceId+"\",user=\""+slVmUser+"\")");
checkSoftlayer("jcloudsByon:(provider=\"softlayer\",region=\""+SOFTLAYER_REGION+"\",hosts=\""+slVmHostname+"\")");
checkSoftlayer("jcloudsByon:(provider=\"softlayer\",region=\""+SOFTLAYER_REGION+"\",hosts=\""+slVmIp+"\")");
checkSoftlayer("jcloudsByon:(provider=\"softlayer\",hosts=\""+slVmIp+"\")");
}
private void checkSoftlayer(String spec) {
FixedListMachineProvisioningLocation<JcloudsSshMachineLocation> loc = resolve(spec);
Set<JcloudsSshMachineLocation> machines = loc.getAllMachines();
JcloudsSshMachineLocation machine = Iterables.getOnlyElement(machines);
assertEquals(machine.getParent().getProvider(), "softlayer");
assertEquals(machine.getNode().getId(), slVmInstanceId);
assertEquals(machine.getAddress().getHostAddress(), slVmIp);
assertTrue(slVmHostname.equals(machine.getAddress().getHostName()) || slVmIp.equals(machine.getAddress().getHostName()),
"address hostname is: "+machine.getAddress().getHostName());
assertTrue(slVmHostname.equals(machine.getNode().getHostname()) || slVmIp.equals(machine.getNode().getHostname()),
"node hostname is: "+machine.getNode().getHostname());
// could also assert this, given a user credential, but not currently set up
// assertTrue(machine.isSshable());
}
@SuppressWarnings("unchecked")
private FixedListMachineProvisioningLocation<JcloudsSshMachineLocation> resolve(String spec) {
return (FixedListMachineProvisioningLocation<JcloudsSshMachineLocation>) managementContext.getLocationRegistry().resolve(spec);
}
}