blob: 0e858ce3992c11fdf4ca3b01ed3559959fcb4765 [file] [log] [blame]
/*
* 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.jclouds.openstack.nova.v2_0.extensions;
import com.google.common.base.Optional;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.domain.regionscoped.Hypervisor;
import org.jclouds.openstack.nova.v2_0.domain.regionscoped.HypervisorDetails;
import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
@Test(groups = "unit", testName = "HypervisorApiMockTest")
public class HypervisorApiMockTest extends BaseOpenStackMockTest<NovaApi> {
private static Map<String, MockWebServer> servers = new ConcurrentHashMap<String, MockWebServer>();
@BeforeMethod
public void setupMockServer(Method method) throws IOException {
servers.put(method.getName(), mockOpenStackServer());
servers.get(method.getName()).enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
}
@AfterMethod
public void tearDownMockServer(Method method) throws IOException {
servers.get(method.getName()).shutdown();
}
public void testWhenNamespaceInExtensionsListHypervisorPresent(Method method) throws Exception {
MockWebServer server = servers.get(method.getName());
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list_full.json"))));
NovaApi novaApi = api(server.url("/").toString(), "openstack-nova");
assertEquals(novaApi.getConfiguredRegions(), ImmutableSet.of("RegionOne", "RegionTwo", "RegionThree"));
Optional<HypervisorApi> hypervisorApi = novaApi.getHypervisorApi("RegionOne");
assertTrue(hypervisorApi.isPresent());
assertRequests(server, 2, null);
}
public void testWhenNamespaceNotInExtensionsListHypervisorPresent(Method method) throws Exception {
MockWebServer server = servers.get(method.getName());
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list.json"))));
NovaApi novaApi = api(server.url("/").toString(), "openstack-nova");
assertEquals(novaApi.getConfiguredRegions(), ImmutableSet.of("RegionOne", "RegionTwo", "RegionThree"));
Optional<HypervisorApi> hypervisorApi = novaApi.getHypervisorApi("RegionOne");
assertFalse(hypervisorApi.isPresent());
assertRequests(server, 2, null);
}
public void testListHypervisor(Method method) throws Exception {
MockWebServer server = servers.get(method.getName());
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list_full.json"))));
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/hypervisor_list.json"))));
NovaApi novaApi = api(server.url("/").toString(), "openstack-nova");
assertEquals(novaApi.getConfiguredRegions(), ImmutableSet.of("RegionOne", "RegionTwo", "RegionThree"));
FluentIterable<? extends Hypervisor> hypervisors = novaApi.getHypervisorApi("RegionOne").get().list();
Optional<? extends Hypervisor> hypervisor = hypervisors.first();
assertTrue(hypervisor.isPresent(), "Couldn't find hypervisor");
assertEquals(hypervisor.get().getId(), "1", "Expected hypervisor id to be 1 but it was: " + hypervisor.get().getId());
assertEquals(hypervisor.get().getName(), "os-compute1", "Expected hypervisor name to be os-compute1 but it was: " + hypervisor.get().getName());
assertRequests(server, 3, "/os-hypervisors");
}
public void testListInDetail(Method method) throws Exception {
MockWebServer server = servers.get(method.getName());
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/extension_list_full.json"))));
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/hypervisor_details.json"))));
NovaApi novaApi = api(server.url("/").toString(), "openstack-nova");
assertEquals(novaApi.getConfiguredRegions(), ImmutableSet.of("RegionOne", "RegionTwo", "RegionThree"));
FluentIterable<? extends HypervisorDetails> hypervisors = novaApi.getHypervisorApi("RegionOne").get().listInDetail();
Optional<? extends HypervisorDetails> hypervisorDetailsOptional = hypervisors.first();
assertTrue(hypervisorDetailsOptional.isPresent(), "Couldn't find Hypervisor Details");
HypervisorDetails hypervisorDetails = hypervisorDetailsOptional.get();
assertEquals(hypervisorDetails.getId(), "1", "Expected hypervisor id to be 1 but it was: " + hypervisorDetails.getId());
assertEquals(hypervisorDetails.getName(), "os-compute1",
"Expected hypervisor name to be os-compute1 but it was: " + hypervisorDetails.getName());
assertEquals(hypervisorDetails.getCurrentWorkload(), Integer.valueOf(0),
"Expected CurrentWorkload to be 0 but it was: " + hypervisorDetails.getCurrentWorkload());
assertEquals(hypervisorDetails.getDiskAvailableLeast(), Integer.valueOf(131),
"Expected Disk Available Least to be 131 but it was: " + hypervisorDetails.getDiskAvailableLeast());
assertEquals(hypervisorDetails.getFreeDiskGb(), Integer.valueOf(144),
"Expected Free Disk Gb to be 144 but it was: " + hypervisorDetails.getFreeDiskGb());
assertEquals(hypervisorDetails.getFreeRamMb(), Integer.valueOf(12911),
"Expected Free Ram Mb to be 12911 but it was: " + hypervisorDetails.getFreeRamMb());
assertEquals(hypervisorDetails.getHypervisorType(), "QEMU",
"Expected Hypervisor Type to be QEMU but it was: " + hypervisorDetails.getHypervisorType());
assertEquals(hypervisorDetails.getHypervisorVersion(), 2000000,
"Expected Hypervisor Version to be 2000000 but it was: " + hypervisorDetails.getHypervisorVersion());
assertEquals(hypervisorDetails.getLocalGb(), 195, "Expected Local Gb to be 195 but it was: " + hypervisorDetails.getLocalGb());
assertEquals(hypervisorDetails.getLocalGbUsed(), 51, "Expected Local Gb Used to be 51 but it was: " + hypervisorDetails.getLocalGbUsed());
assertEquals(hypervisorDetails.getMemoryMb(), 20079, "Expected Memory Mb to be 20079 but it was: " + hypervisorDetails.getMemoryMb());
assertEquals(hypervisorDetails.getMemoryMbUsed(), 7168,
"Expected Memory Mb Used to be 7168 but it was: " + hypervisorDetails.getMemoryMbUsed());
assertEquals(hypervisorDetails.getRunningVms(), Integer.valueOf(2),
"Expected Running Vms to be 2 but it was: " + hypervisorDetails.getRunningVms());
assertEquals(hypervisorDetails.getVcpus(), 16, "Expected Vcpus to be 16 but it was: " + hypervisorDetails.getVcpus());
assertEquals(hypervisorDetails.getVcpusUsed(), 5, "Expected Vcpus Used to be 5 but it was: " + hypervisorDetails.getVcpusUsed());
assertEquals(hypervisorDetails.getCpuInfo(),
"{\"vendor\": \"Intel\", \"model\": \"Westmere\", \"arch\": \"x86_64\", \"features\": [\"pge\", \"avx\", \"clflush\", \"sep\", "
+ "\"syscall\", \"vme\", \"tsc\", \"xsave\", \"vmx\", \"cmov\", \"ssse3\", \"pat\", \"lm\", \"msr\", \"nx\", \"fxsr\", \"sse4.1\", "
+ "\"pae\", \"sse4.2\", \"pclmuldq\", \"mmx\", \"osxsave\", \"cx8\", \"mce\", \"de\", \"aes\", \"ht\", \"pse\", \"lahf_lm\","
+ " \"popcnt\", \"mca\", \"apic\", \"sse\", \"ds\", \"pni\", \"rdtscp\", \"sse2\", \"ss\", \"hypervisor\", \"pcid\", \"fpu\","
+ " \"cx16\", \"pse36\", \"mtrr\", \"x2apic\"], \"topology\": {\"cores\": 4, \"threads\": 1, \"sockets\": 1}}",
"Unexpected Cpu Info it was: " + hypervisorDetails.getCpuInfo());
assertRequests(server, 3, "/os-hypervisors/detail");
}
private void assertRequests(MockWebServer server, int requestCount, String requestPath) throws InterruptedException {
assertEquals(server.getRequestCount(), requestCount);
assertAuthentication(server);
assertExtensions(server, "/v2/da0d12be20394afb851716e10a49e4a7");
if (requestPath != null) {
assertRequest(server.takeRequest(), "GET", "/v2/da0d12be20394afb851716e10a49e4a7" + requestPath);
}
}
}