blob: cec048344f7509364f4a5feec8af765c550e7669 [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.azurecompute.arm.features;
import static com.google.common.collect.Iterables.isEmpty;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.List;
import org.jclouds.azurecompute.arm.domain.DataDisk;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.Image;
import org.jclouds.azurecompute.arm.domain.ImageProperties;
import org.jclouds.azurecompute.arm.domain.OSDisk;
import org.jclouds.azurecompute.arm.domain.StorageProfile;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
@Test(groups = "unit", testName = "ImageApiMockTest", singleThreaded = true)
public class ImageApiMockTest extends BaseAzureComputeApiMockTest {
private static final String subscriptionid = "SUBSCRIPTIONID";
private static final String resourcegroup = "myresourcegroup";
private static final String apiVersion = "api-version=2016-04-30-preview";
private static final String imageName = "testVirtualMachineImage";
private static final String location = "canadaeast";
private static final String PATH = String
.format("/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/images/%s?%s", subscriptionid,
resourcegroup, imageName, apiVersion);
public void createVirtualMachineImage() throws InterruptedException {
server.enqueue(jsonResponse("/virtualmachineimagecreate.json"));
ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
Image result = imageApi.createOrUpdate(imageName, location, newVirtualMachineImage().properties());
assertSent(server, "PUT", PATH, "{\"location\":\"" + location + "\","
+ "\"properties\":{\"sourceVirtualMachine\":{\"id\":\"vmId\"},"
+ "\"storageProfile\":{\"osDisk\":{\"osType\":\"Linux\",\"name\":\"Ubuntu\"},\"dataDisks\":[]},"
+ "\"provisioningState\":\"Succeeded\"}}");
assertEquals(result.name(), imageName);
assertEquals(result.location(), location);
}
public void getVirtualMachineImage() throws InterruptedException {
server.enqueue(jsonResponse("/virtualmachineimageget.json"));
ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
Image result = imageApi.get(imageName);
assertSent(server, "GET", PATH);
assertEquals(result.name(), imageName);
assertEquals(result.location(), location);
assertNotNull(result.properties().sourceVirtualMachine());
assertNotNull(result.properties().storageProfile());
}
public void getVirtualMachineImageReturns404() throws InterruptedException {
server.enqueue(response404());
final ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
Image result = imageApi.get(imageName);
assertSent(server, "GET", PATH);
assertNull(result);
}
public void listVirtualMachineImages() throws InterruptedException {
server.enqueue(jsonResponse("/virtualmachineimagelist.json"));
final ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
List<Image> result = imageApi.list();
assertSent(server, "GET", String
.format("/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/images?%s", subscriptionid,
resourcegroup, apiVersion));
assertNotNull(result);
assertTrue(result.size() > 0);
}
public void listVirtualMachineImagesReturns404() throws InterruptedException {
server.enqueue(response404());
final ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
List<Image> result = imageApi.list();
assertSent(server, "GET", String
.format("/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/images?%s", subscriptionid,
resourcegroup, apiVersion));
assertTrue(isEmpty(result));
}
public void deleteVirtualMachineImage() throws InterruptedException {
server.enqueue(response202WithHeader());
final ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
URI uri = imageApi.delete(imageName);
assertSent(server, "DELETE", PATH);
assertNotNull(uri);
assertTrue(uri.toString().contains("api-version"));
assertTrue(uri.toString().contains("operationresults"));
}
public void deleteVirtualMachineImageDoesNotExist() throws InterruptedException {
server.enqueue(response404());
final ImageApi imageApi = api.getVirtualMachineImageApi(resourcegroup);
URI uri = imageApi.delete(imageName);
assertNull(uri);
assertSent(server, "DELETE", PATH);
}
private Image newVirtualMachineImage() {
return Image
.builder()
.name(imageName)
.location(location)
.properties(
ImageProperties
.builder()
.sourceVirtualMachine(IdReference.create("vmId"))
.storageProfile(
StorageProfile.create(null, OSDisk.builder().osType("Linux").name("Ubuntu").build(),
ImmutableList.<DataDisk> of())).provisioningState("Succeeded").build()).build();
}
}