/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.jclouds.glesys.features;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.util.Set;
import org.jclouds.glesys.domain.IpDetails;
import org.jclouds.glesys.internal.BaseGleSYSApiWithAServerLiveTest;
import org.jclouds.glesys.options.ListIpOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
/**
* Tests behavior of {@code IpApi}
*
* @author Adrian Cole, Mattias Holmqvist
*/
@Test(groups = "live", testName = "IpApiLiveTest", singleThreaded = true)
public class IpApiLiveTest extends BaseGleSYSApiWithAServerLiveTest {
public IpApiLiveTest() {
hostName = hostName + "-ip";
}
@BeforeClass(groups = { "integration", "live" })
@Override
public void setup() {
super.setup();
ipApi = api.getIpApi();
}
@AfterClass(groups = { "integration", "live" })
@Override
public void tearDown() {
if (reservedIp != null) {
ipApi.release(reservedIp.getAddress());
}
super.tearDown();
}
private IpApi ipApi;
private IpDetails reservedIp;
@Test
public void testListFree() throws Exception {
FluentIterable<String> freeIps = ipApi.listFree(4, "Falkenberg", "Xen");
assertFalse(freeIps.isEmpty());
}
@Test
public void reserveIp() throws Exception {
FluentIterable<String> openVzIps = ipApi.listFree(4, "Falkenberg", "OpenVZ");
assertFalse(openVzIps.isEmpty());
reservedIp = ipApi.take(Iterables.get(openVzIps, 0));
assertTrue(reservedIp.isReserved());
checkOpenVZDefailsInFalkenberg(reservedIp);
}
@Test(dependsOnMethods = "reserveIp")
public void reserveAndReleaseIp() throws Exception {
IpDetails details = ipApi.release(reservedIp.getAddress());
assertEquals(details.getAddress(), reservedIp.getAddress());
assertFalse(details.isReserved());
// reserve an address again!
reserveIp();
}
@Test(dependsOnMethods = "reserveIp")
public void testList() throws Exception {
FluentIterable<IpDetails> ownIps = ipApi.list();
assertTrue(ownIps.contains(reservedIp));
ownIps = ipApi.list(ListIpOptions.Builder.datacenter(reservedIp.getDatacenter()));
assertTrue(ownIps.contains(reservedIp));
ownIps = ipApi.list(ListIpOptions.Builder.platform(reservedIp.getPlatform()));
assertTrue(ownIps.contains(reservedIp));
ownIps = ipApi.list(ListIpOptions.Builder.ipVersion(reservedIp.getVersion()));
assertTrue(ownIps.contains(reservedIp));
ownIps = ipApi.list(ListIpOptions.Builder.datacenter(reservedIp.getDatacenter()),
ListIpOptions.Builder.platform(reservedIp.getPlatform()),
ListIpOptions.Builder.ipVersion(reservedIp.getVersion()));
assertTrue(ownIps.contains(reservedIp));
ownIps = ipApi.list(ListIpOptions.Builder.serverId("xmthisisnotaserverid"));
assertTrue(ownIps.isEmpty());
}
private void checkOpenVZDefailsInFalkenberg(IpDetails ipDetails) {
assertEquals(ipDetails.getDatacenter(), "Falkenberg");
assertEquals(ipDetails.getPlatform(), "OpenVZ");
assertEquals(ipDetails.getVersion(), 4);
assertFalse(ipDetails.getPtr().isEmpty());
// broadcast, gateway and netmask are null for OpenVZ
assertFalse(ipDetails.getNameServers().isEmpty());
}
@Test
public void testGetOpenVZDetails() throws Exception {
FluentIterable<String> openVzIps = ipApi.listFree(4, "Falkenberg", "OpenVZ");
assertFalse(openVzIps.isEmpty());
String openVzIp = openVzIps.iterator().next();
IpDetails ipDetails = ipApi.get(openVzIp);
checkOpenVZDefailsInFalkenberg(ipDetails);
assertEquals(ipDetails.getAddress(), openVzIp);
}
@Test
public void testGetXenDetails() throws Exception {
FluentIterable<String> xenVzIps = ipApi.listFree(4, "Falkenberg", "Xen");
assertFalse(xenVzIps.isEmpty());
String xenIp = xenVzIps.iterator().next();
IpDetails ipDetails = ipApi.get(xenIp);
assertEquals(ipDetails.getDatacenter(), "Falkenberg");
assertEquals(ipDetails.getPlatform(), "Xen");
assertEquals(ipDetails.getVersion(), 4);
assertEquals(ipDetails.getAddress(), xenIp);
assertFalse(ipDetails.getPtr().isEmpty());
assertNotNull(ipDetails.getBroadcast());
assertNotNull(ipDetails.getGateway());
assertNotNull(ipDetails.getNetmask());
assertFalse(ipDetails.getNameServers().isEmpty());
}
@Test(dependsOnMethods = "reserveIp")
public void testPtrSetReset() throws Exception {
IpDetails original = reservedIp;
IpDetails modified = ipApi.setPtr(reservedIp.getAddress(), "wibble.");
IpDetails modified2 = ipApi.get(reservedIp.getAddress());
assertEquals(modified.getPtr(), "wibble.");
assertEquals(modified2, modified);
reservedIp = ipApi.resetPtr(reservedIp.getAddress());
assertEquals(reservedIp, original);
}
@Test(dependsOnMethods = "reserveIp")
public void testAddRemove() throws Exception {
IpDetails added = ipApi.addToServer(reservedIp.getAddress(), serverId);
assertEquals(added.getAddress(), reservedIp.getAddress());
assertEquals(added.getPtr(), reservedIp.getPtr());
assertEquals(added.getServerId(), serverId);
IpDetails again = ipApi.get(reservedIp.getAddress());
assertEquals(again, added);
IpDetails removed = ipApi.removeFromServer(reservedIp.getAddress(), serverId);
assertEquals(removed, added.toBuilder().serverId(null).build());
assertEquals(removed, reservedIp);
Set<String> openVzIps = Sets.newHashSet(ipApi.listFree(4, "Falkenberg", "OpenVZ"));
openVzIps.remove(reservedIp.getAddress());
assertFalse(openVzIps.isEmpty());
added = ipApi.addToServer(reservedIp.getAddress(), serverId);
assertEquals(added.getServerId(), serverId);
removed = ipApi.removeFromServerAndRelease(reservedIp.getAddress(), serverId);
assertNull(removed.getServerId());
assertFalse(removed.isReserved());
// reserve an address again!
reserveIp();
}
}