package com.sequenceiq.cloudbreak.cloud.azure;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.sequenceiq.cloudbreak.api.model.ArmAttachedStorageOption;
import com.sequenceiq.cloudbreak.api.model.InstanceGroupType;
import com.sequenceiq.cloudbreak.cloud.azure.view.AzureCredentialView;
import com.sequenceiq.cloudbreak.cloud.azure.view.AzureStackView;
import com.sequenceiq.cloudbreak.cloud.azure.view.AzureStorageView;
import com.sequenceiq.cloudbreak.cloud.context.CloudContext;
import com.sequenceiq.cloudbreak.cloud.model.AvailabilityZone;
import com.sequenceiq.cloudbreak.cloud.model.CloudCredential;
import com.sequenceiq.cloudbreak.cloud.model.CloudInstance;
import com.sequenceiq.cloudbreak.cloud.model.CloudStack;
import com.sequenceiq.cloudbreak.cloud.model.Group;
import com.sequenceiq.cloudbreak.cloud.model.Image;
import com.sequenceiq.cloudbreak.cloud.model.InstanceStatus;
import com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate;
import com.sequenceiq.cloudbreak.cloud.model.Location;
import com.sequenceiq.cloudbreak.cloud.model.Network;
import com.sequenceiq.cloudbreak.cloud.model.PortDefinition;
import com.sequenceiq.cloudbreak.cloud.model.Region;
import com.sequenceiq.cloudbreak.cloud.model.Security;
import com.sequenceiq.cloudbreak.cloud.model.SecurityRule;
import com.sequenceiq.cloudbreak.cloud.model.Subnet;
import com.sequenceiq.cloudbreak.cloud.model.Volume;
import freemarker.template.Configuration;
@RunWith(MockitoJUnitRunner.class)
public class AzureTemplateBuilderTest {
public static final String CORE_CUSTOM_DATA = "CORE";
public static final String GATEWAY_CUSTOM_DATA = "GATEWAY";
@Mock
private AzureUtils azureUtils;
@Mock
private AzureStorage azureStorage;
@Mock
private Configuration freemarkerConfiguration;
@InjectMocks
private AzureTemplateBuilder azureTemplateBuilder = new AzureTemplateBuilder();
private String stackName;
private AzureCredentialView azureCredentialView;
private List<Group> groups;
private String name;
private List<Volume> volumes;
private CloudInstance instance;
private List<SecurityRule> rules;
private Security security;
private Map<InstanceGroupType, String> userData;
private Image image;
private CloudContext cloudContext;
private CloudStack cloudStack;
private AzureStorageView azureStorageView;
private AzureStackView azureStackView;
private Gson gson = new Gson();
private Map<String, String> tags = new HashMap<>();
@Before
public void setUp() throws Exception {
FreeMarkerConfigurationFactoryBean factoryBean = new FreeMarkerConfigurationFactoryBean();
factoryBean.setPreferFileSystemAccess(false);
factoryBean.setTemplateLoaderPath("classpath:/");
factoryBean.afterPropertiesSet();
Configuration configuration = factoryBean.getObject();
ReflectionTestUtils.setField(azureTemplateBuilder, "freemarkerConfiguration", configuration);
ReflectionTestUtils.setField(azureTemplateBuilder, "armTemplatePath", "templates/arm-v2.ftl");
ReflectionTestUtils.setField(azureTemplateBuilder, "armTemplateParametersPath", "templates/parameters.ftl");
userData = ImmutableMap.of(
InstanceGroupType.CORE, CORE_CUSTOM_DATA,
InstanceGroupType.GATEWAY, GATEWAY_CUSTOM_DATA
);
groups = new ArrayList<>();
stackName = "testStack";
name = "master";
volumes = Arrays.asList(new Volume("/hadoop/fs1", "HDD", 1), new Volume("/hadoop/fs2", "HDD", 1));
InstanceTemplate instanceTemplate = new InstanceTemplate("m1.medium", name, 0L, volumes, InstanceStatus.CREATE_REQUESTED,
new HashMap<>());
instance = new CloudInstance("SOME_ID", instanceTemplate);
rules = Collections.singletonList(new SecurityRule("0.0.0.0/0",
new PortDefinition[]{new PortDefinition("22", "22"), new PortDefinition("443", "443")}, "tcp"));
security = new Security(rules, null);
image = new Image("cb-centos66-amb200-2015-05-25", userData);
Map<String, String> parameters = new HashMap<>();
cloudContext = new CloudContext(7899L, "thisisaverylongazureresourcenamewhichneedstobeshortened", "dummy1", "dummy2", "test",
Location.location(Region.region("EU"), new AvailabilityZone("availabilityZone")));
azureCredentialView = new AzureCredentialView(cloudCredential("siq-haas"));
azureStorageView = new AzureStorageView(azureCredentialView, cloudContext, azureStorage, null);
reset(azureUtils);
}
@Test
public void buildNoPublicIpNoFirewall() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
when(azureUtils.isPrivateIp(any())).then(invocation -> true);
when(azureUtils.isNoSecurityGroups(any())).then(invocation -> true);
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("publicIPAddress")));
assertThat(templateString, not(containsString("networkSecurityGroups")));
}
@Test
public void buildNoPublicIpNoFirewallWithTags() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
when(azureUtils.isPrivateIp(any())).then(invocation -> true);
when(azureUtils.isNoSecurityGroups(any())).then(invocation -> true);
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
Map<String, String> userDefinedTags = Maps.newHashMap();
userDefinedTags.put("testtagkey1", "testtagvalue1");
userDefinedTags.put("testtagkey2", "testtagvalue2");
cloudStack = new CloudStack(groups, network, image, parameters, userDefinedTags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("publicIPAddress")));
assertThat(templateString, not(containsString("networkSecurityGroups")));
assertThat(templateString, containsString("testtagkey"));
assertThat(templateString, containsString("testtagvalue"));
}
@Test
public void buildNoPublicIpNoFirewallButExistingNetwork() {
//GIVEN
when(azureUtils.isExistingNetwork(any())).thenReturn(true);
when(azureUtils.getCustomNetworkId(any())).thenReturn("existingNetworkName");
when(azureUtils.getCustomResourceGroupName(any())).thenReturn("existingResourceGroup");
when(azureUtils.getCustomSubnetId(any())).thenReturn("existingSubnet");
Network network = new Network(new Subnet("testSubnet"));
when(azureUtils.isPrivateIp(any())).then(invocation -> true);
when(azureUtils.isNoSecurityGroups(any())).then(invocation -> true);
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("publicIPAddress")));
assertThat(templateString, not(containsString("networkSecurityGroups")));
}
@Test
public void buildNoPublicIpButFirewall() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
when(azureUtils.isPrivateIp(any())).then(invocation -> true);
when(azureUtils.isNoSecurityGroups(any())).then(invocation -> false);
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("publicIPAddress")));
assertThat(templateString, containsString("networkSecurityGroups"));
}
@Test
public void buildWithPublicIpAndFirewall() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
when(azureUtils.isPrivateIp(any())).then(invocation -> false);
when(azureUtils.isNoSecurityGroups(any())).then(invocation -> false);
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("publicIPAddress"));
assertThat(templateString, containsString("networkSecurityGroups"));
}
private String base64EncodedUserData(String data) {
return new String(Base64.encodeBase64(String.format("%s", data).getBytes()));
}
@Test
public void buildWithInstanceGroupTypeCore() throws Exception {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("\"customData\": \"" + base64EncodedUserData(CORE_CUSTOM_DATA) + "\""));
}
@Test
public void buildWithInstanceGroupTypeCoreShouldNotContainsGatewayCustomData() throws Exception {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("\"customData\": \"" + base64EncodedUserData(GATEWAY_CUSTOM_DATA) + "\"")));
}
@Test
public void buildWithInstanceGroupTypeGateway() throws Exception {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("\"customData\": \"" + base64EncodedUserData(GATEWAY_CUSTOM_DATA) + "\""));
}
@Test
public void buildWithInstanceGroupTypeGatewayShouldNotContainsCoreCustomData() throws Exception {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("\"customData\": \"" + base64EncodedUserData(CORE_CUSTOM_DATA) + "\"")));
}
@Test
public void buildWithInstanceGroupTypeGatewayAndCore() throws Exception {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("\"customData\": \"" + base64EncodedUserData(CORE_CUSTOM_DATA) + "\""));
assertThat(templateString, containsString("\"customData\": \"" + base64EncodedUserData(GATEWAY_CUSTOM_DATA) + "\""));
}
@Test
public void buildTestResourceGroupName() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("resourceGroupName")));
}
@Test
public void buildTestExistingVNETName() {
//GIVEN
when(azureUtils.isExistingNetwork(any())).thenReturn(true);
when(azureUtils.getCustomNetworkId(any())).thenReturn("existingNetworkName");
when(azureUtils.getCustomResourceGroupName(any())).thenReturn("existingResourceGroup");
when(azureUtils.getCustomSubnetId(any())).thenReturn("existingSubnet");
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("existingVNETName"));
assertThat(templateString, containsString("existingSubnet"));
assertThat(templateString, containsString("existingResourceGroup"));
}
@Test
public void buildTestExistingSubnetNameNotInTemplate() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, not(containsString("existingSubnetName")));
}
@Test
public void buildTestVirtualNetworkNamePrefix() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("virtualNetworkNamePrefix"));
}
@Test
public void buildTestSubnet1Prefix() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("subnet1Prefix"));
}
@Test
public void buildTestDataDisks() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("[concat('datadisk', 'm0', '0')]"));
assertThat(templateString, containsString("[concat('datadisk', 'm0', '1')]"));
}
@Test(expected = AssertionError.class)
public void buildTestDataDisksShouldThrowAssertionError() {
//GIVEN
Network network = new Network(new Subnet("testSubnet"));
Map<String, String> parameters = new HashMap<>();
parameters.put("persistentStorage", "persistentStorageTest");
parameters.put("attachedStorageOption", "attachedStorageOptionTest");
groups.add(new Group(name, InstanceGroupType.GATEWAY, Collections.singletonList(instance), security, null));
groups.add(new Group(name, InstanceGroupType.CORE, Collections.singletonList(instance), security, null));
cloudStack = new CloudStack(groups, network, image, parameters, tags, azureTemplateBuilder.getTemplateString());
azureStackView = new AzureStackView("mystack", 3, groups, azureStorageView);
//WHEN
when(azureStorage.getImageStorageName(any(AzureCredentialView.class), any(CloudContext.class), Mockito.anyString(),
any(ArmAttachedStorageOption.class))).thenReturn("test");
when(azureStorage.getDiskContainerName(any(CloudContext.class))).thenReturn("testStorageContainer");
String templateString = azureTemplateBuilder.build(stackName, azureCredentialView, azureStackView, cloudContext, cloudStack);
//THEN
gson.fromJson(templateString, Map.class);
assertThat(templateString, containsString("[concat('datadisk', 'm0', '0')]"));
assertThat(templateString, containsString("[concat('datadisk', 'm0', '1')]"));
assertThat(templateString, containsString("[concat('datadisk', 'm0', '2')]"));
}
private CloudCredential cloudCredential(String projectId) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("projectId", projectId);
return new CloudCredential(1L, "test", "sshkey", "cloudbreak", parameters);
}
}