javatests/com/google/cloud/deploymentmanager/autogen/SpecDefaultsTest.java (649 lines of code) (raw):
// Copyright 2018 Google LLC
//
// Licensed 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 com.google.cloud.deploymentmanager.autogen;
import static com.google.cloud.deploymentmanager.autogen.SpecDefaults.fillInMissingDefaults;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.extensions.proto.ProtoTruth.assertThat;
import com.google.cloud.deploymentmanager.autogen.proto.AcceleratorSpec;
import com.google.cloud.deploymentmanager.autogen.proto.ApplicationStatusSpec;
import com.google.cloud.deploymentmanager.autogen.proto.ApplicationStatusSpec.WaiterSpec;
import com.google.cloud.deploymentmanager.autogen.proto.ApplicationStatusSpec.WaiterSpec.ScriptSpec;
import com.google.cloud.deploymentmanager.autogen.proto.DeployInputField;
import com.google.cloud.deploymentmanager.autogen.proto.DeployInputField.EmailBox;
import com.google.cloud.deploymentmanager.autogen.proto.DeployInputField.EmailBox.Validation;
import com.google.cloud.deploymentmanager.autogen.proto.DeployInputSection;
import com.google.cloud.deploymentmanager.autogen.proto.DiskSpec;
import com.google.cloud.deploymentmanager.autogen.proto.ExternalIpSpec;
import com.google.cloud.deploymentmanager.autogen.proto.FirewallRuleSpec;
import com.google.cloud.deploymentmanager.autogen.proto.FirewallRuleSpec.Protocol;
import com.google.cloud.deploymentmanager.autogen.proto.FirewallRuleSpec.TrafficSource;
import com.google.cloud.deploymentmanager.autogen.proto.ImageSpec;
import com.google.cloud.deploymentmanager.autogen.proto.MachineTypeSpec;
import com.google.cloud.deploymentmanager.autogen.proto.MachineTypeSpec.MachineType;
import com.google.cloud.deploymentmanager.autogen.proto.MultiVmDeploymentPackageSpec;
import com.google.cloud.deploymentmanager.autogen.proto.NetworkInterfacesSpec;
import com.google.cloud.deploymentmanager.autogen.proto.PasswordSpec;
import com.google.cloud.deploymentmanager.autogen.proto.SingleVmDeploymentPackageSpec;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Tests {@link SpecDefaults}. */
@RunWith(JUnit4.class)
public class SpecDefaultsTest {
@Test
public void shouldUseDefaultsAndReturnTheSameBuilder_single() {
SingleVmDeploymentPackageSpec.Builder builder = newSingleSpec();
SingleVmDeploymentPackageSpec.Builder returned = fillInMissingDefaults(builder);
assertThat(returned).isSameInstanceAs(builder);
assertThat(builder.hasMachineType()).isTrue();
assertThat(builder.hasBootDisk()).isTrue();
assertThat(builder.hasNetworkInterfaces()).isTrue();
}
@Test
public void shouldUseDefaultsAndReturnTheSameBuilder_multi() {
MultiVmDeploymentPackageSpec.Builder builder = newMultiSpec();
MultiVmDeploymentPackageSpec.Builder returned = fillInMissingDefaults(builder);
assertThat(returned).isSameInstanceAs(builder);
assertThat(builder.getTiersList()).hasSize(2);
assertThat(builder.getTiers(0).hasMachineType()).isTrue();
assertThat(builder.getTiers(0).hasBootDisk()).isTrue();
assertThat(builder.getTiers(0).hasNetworkInterfaces()).isTrue();
assertThat(builder.getTiers(1).hasMachineType()).isTrue();
assertThat(builder.getTiers(1).hasBootDisk()).isTrue();
assertThat(builder.getTiers(1).hasNetworkInterfaces()).isTrue();
}
@Test
public void shouldNotOverwriteInputMachineType() {
MachineTypeSpec machineTypeSpec =
MachineTypeSpec.newBuilder()
.setDefaultMachineType(MachineType.newBuilder().setGceMachineType("boom-boom-boom"))
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setMachineType(machineTypeSpec));
assertThat(single.getMachineType()).isEqualTo(machineTypeSpec);
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setMachineType(machineTypeSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getMachineType()).isEqualTo(machineTypeSpec);
}
@Test
public void shouldSetMachineTypeForGpuSupport() {
MachineTypeSpec machineTypeSpec =
MachineTypeSpec.newBuilder()
.setDefaultMachineType(MachineType.getDefaultInstance())
.build();
AcceleratorSpec gpuSpec = AcceleratorSpec.newBuilder().addTypes("nvidia-gpu").build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(
newSingleSpec().setMachineType(machineTypeSpec).addAccelerators(gpuSpec));
assertThat(single.getMachineType().getDefaultMachineType().getGceMachineType())
.startsWith("e2");
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setMachineType(machineTypeSpec).addAccelerators(gpuSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getMachineType().getDefaultMachineType().getGceMachineType())
.startsWith("e2");
}
@Test
public void shouldSetE2AsDefaultMachineType() {
MachineTypeSpec machineTypeSpec =
MachineTypeSpec.newBuilder()
.setDefaultMachineType(MachineType.getDefaultInstance())
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setMachineType(machineTypeSpec));
assertThat(single.getMachineType().getDefaultMachineType().getGceMachineType())
.startsWith("e2");
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setMachineType(machineTypeSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getMachineType().getDefaultMachineType().getGceMachineType())
.startsWith("e2");
}
@Test
public void shouldNotOverwriteBootDisk() {
DiskSpec diskSpec =
DiskSpec.newBuilder()
.setDiskType(DiskSpec.DiskType.newBuilder().setDefaultType("pd-boom-boom"))
.setDiskSize(DiskSpec.DiskSize.newBuilder().setDefaultSizeGb(100))
.setDisplayLabel("The Booter")
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setBootDisk(diskSpec));
assertThat(single.getBootDisk()).isEqualTo(diskSpec);
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setBootDisk(diskSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getBootDisk()).isEqualTo(diskSpec);
}
@Test
public void shouldAssignDefaultNameForAdditionalDisk_single() {
DiskSpec diskSpec = DiskSpec.newBuilder().build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().addAdditionalDisks(diskSpec));
assertThat(single.getAdditionalDisks(0).getDeviceNameSuffix().getName()).isNotEmpty();
}
@Test
public void shouldAssignDefaultNameForAdditionalDisk_multi() {
DiskSpec diskSpec = DiskSpec.newBuilder().build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).addAdditionalDisks(diskSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0)
.getAdditionalDisks(0)
.getDeviceNameSuffix()
.getName())
.isNotEmpty();
}
@Test
public void shouldAssignUniqueDefaultNamesForAdditionalDisks_single() {
DiskSpec diskSpec1 = DiskSpec.newBuilder().build();
DiskSpec diskSpec2 = DiskSpec.newBuilder().build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec()
.addAdditionalDisks(diskSpec1)
.addAdditionalDisks(diskSpec2));
assertThat(single.getAdditionalDisks(0).getDeviceNameSuffix().getName())
.isNotEqualTo(single.getAdditionalDisks(1).getDeviceNameSuffix().getName());
}
@Test
public void shouldAssignUniqueDefaultNamesForAdditionalDisks_multi() {
DiskSpec diskSpec1 = DiskSpec.newBuilder().build();
DiskSpec diskSpec2 = DiskSpec.newBuilder().build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0)
.addAdditionalDisks(diskSpec1)
.addAdditionalDisks(diskSpec2);
fillInMissingDefaults(multi);
assertThat(
multi.getTiers(0).getAdditionalDisks(0).getDeviceNameSuffix().getName())
.isNotEqualTo(
multi.getTiers(0).getAdditionalDisks(1).getDeviceNameSuffix().getName());
}
@Test
public void shouldAssignDefaultBootDiskDisplayLabel_single() {
DiskSpec diskSpec =
DiskSpec.newBuilder()
.setDiskType(DiskSpec.DiskType.newBuilder().setDefaultType("pd-boom-boom"))
.setDiskSize(DiskSpec.DiskSize.newBuilder().setDefaultSizeGb(100))
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setBootDisk(diskSpec));
assertThat(single.getBootDisk().getDisplayLabel()).isNotEmpty();
}
@Test
public void shouldAssignDefaultBootDiskDisplayLabel_multi() {
DiskSpec diskSpec =
DiskSpec.newBuilder()
.setDiskType(DiskSpec.DiskType.newBuilder().setDefaultType("pd-boom-boom"))
.setDiskSize(DiskSpec.DiskSize.newBuilder().setDefaultSizeGb(100))
.build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setBootDisk(diskSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getBootDisk().getDisplayLabel()).isNotEmpty();
}
@Test
public void shouldAssignDefaultDisplayNameForSingleAdditionalDisk_single() {
DiskSpec diskSpec = DiskSpec.newBuilder().build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().addAdditionalDisks(diskSpec));
assertThat(single.getAdditionalDisks(0).getDisplayLabel()).isNotEmpty();
}
@Test
public void shouldAssignDefaultDisplayNameForSingleAdditionalDisk_multi() {
DiskSpec diskSpec = DiskSpec.newBuilder().build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).addAdditionalDisks(diskSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getAdditionalDisks(0).getDisplayLabel())
.isNotEmpty();
}
@Test
public void shouldNotAssignDefaultDisplayLabelsForMoreThanOneAdditionalDisks_single() {
DiskSpec diskSpec1 = DiskSpec.newBuilder().build();
DiskSpec diskSpec2 = DiskSpec.newBuilder().build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec()
.addAdditionalDisks(diskSpec1)
.addAdditionalDisks(diskSpec2));
assertThat(single.getAdditionalDisks(0).getDisplayLabel()).isEmpty();
assertThat(single.getAdditionalDisks(1).getDisplayLabel()).isEmpty();
}
@Test
public void shouldNotAssignDefaultDisplayLabelsForMoreThanOneAdditionalDisks_multi() {
DiskSpec diskSpec1 = DiskSpec.newBuilder().build();
DiskSpec diskSpec2 = DiskSpec.newBuilder().build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0)
.addAdditionalDisks(diskSpec1)
.addAdditionalDisks(diskSpec2);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getAdditionalDisks(0).getDisplayLabel()).isEmpty();
assertThat(multi.getTiers(0).getAdditionalDisks(0).getDisplayLabel()).isEmpty();
}
@Test
public void shouldDefaultToEphemeralExternalIp() {
SingleVmDeploymentPackageSpec.Builder single = fillInMissingDefaults(newSingleSpec());
NetworkInterfacesSpec nicSpec = single.getNetworkInterfaces();
assertThat(nicSpec.hasExternalIp()).isTrue();
assertThat(nicSpec.getExternalIp().getDefaultType()).isEqualTo(ExternalIpSpec.Type.EPHEMERAL);
MultiVmDeploymentPackageSpec.Builder multi = fillInMissingDefaults(newMultiSpec());
NetworkInterfacesSpec tier0NicSpec = multi.getTiers(0).getNetworkInterfaces();
assertThat(tier0NicSpec.hasExternalIp()).isTrue();
assertThat(tier0NicSpec.getExternalIp().getDefaultType())
.isEqualTo(ExternalIpSpec.Type.EPHEMERAL);
NetworkInterfacesSpec tier1NicSpec = multi.getTiers(1).getNetworkInterfaces();
assertThat(tier1NicSpec.hasExternalIp()).isTrue();
assertThat(tier1NicSpec.getExternalIp().getDefaultType())
.isEqualTo(ExternalIpSpec.Type.EPHEMERAL);
}
@Test
public void shouldNotOverwriteExternalIp() {
ExternalIpSpec externalIpSpec =
ExternalIpSpec.newBuilder().setDefaultType(ExternalIpSpec.Type.NONE).build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(
newSingleSpec()
.setNetworkInterfaces(
NetworkInterfacesSpec.newBuilder().setExternalIp(externalIpSpec)));
NetworkInterfacesSpec nicSpec = single.getNetworkInterfaces();
assertThat(nicSpec.getExternalIp()).isEqualTo(externalIpSpec);
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
NetworkInterfacesSpec.Builder tier0NicSpecBuilder =
multi.getTiersBuilder(0).getNetworkInterfacesBuilder();
tier0NicSpecBuilder.setExternalIp(externalIpSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getNetworkInterfaces().getExternalIp()).isEqualTo(externalIpSpec);
}
@Test
public void shouldSetDeprecatedExternalIpSpecInNetworkInterfaceSpec() {
ExternalIpSpec deprecatedExternalIpSpec =
ExternalIpSpec.newBuilder().setDefaultType(ExternalIpSpec.Type.NONE).build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setExternalIp(deprecatedExternalIpSpec));
assertThat(single.getNetworkInterfaces().getExternalIp()).isEqualTo(deprecatedExternalIpSpec);
}
@Test
public void shouldNotOverrideExternalIpSpecInNetworkInterfaceSpec() {
ExternalIpSpec deprecatedExternalIpSpec =
ExternalIpSpec.newBuilder().setNotConfigurable(true).build();
ExternalIpSpec expected =
ExternalIpSpec.newBuilder().setDefaultType(ExternalIpSpec.Type.NONE).build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(
newSingleSpec()
.setExternalIp(deprecatedExternalIpSpec)
.setNetworkInterfaces(NetworkInterfacesSpec.newBuilder().setExternalIp(expected)));
assertThat(single.getNetworkInterfaces().getExternalIp()).isEqualTo(expected);
}
@Test
public void shouldSetDeprecatedExternalIpSpecInNetworkInterfaceSpecMultiVm() {
ExternalIpSpec deprecatedExternalIpSpec =
ExternalIpSpec.newBuilder().setDefaultType(ExternalIpSpec.Type.NONE).build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setExternalIp(deprecatedExternalIpSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getNetworkInterfaces().getExternalIp())
.isEqualTo(deprecatedExternalIpSpec);
}
@Test
public void shouldNotOverrideExternalIpSpecInNetworkInterfaceSpecMultiVm() {
ExternalIpSpec deprecatedExternalIpSpec =
ExternalIpSpec.newBuilder()
.setDefaultType(ExternalIpSpec.Type.EPHEMERAL)
.setNotConfigurable(true)
.build();
ExternalIpSpec expected =
ExternalIpSpec.newBuilder().setDefaultType(ExternalIpSpec.Type.NONE).build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setExternalIp(deprecatedExternalIpSpec);
multi.getTiersBuilder(1).setExternalIp(deprecatedExternalIpSpec);
multi.getTiersBuilder(1).getNetworkInterfacesBuilder().setExternalIp(expected);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getNetworkInterfaces().getExternalIp())
.isEqualTo(deprecatedExternalIpSpec);
assertThat(multi.getTiers(1).getNetworkInterfaces().getExternalIp()).isEqualTo(expected);
}
@Test
public void shouldFillMinCount_networkInterfacesSingleVm() {
SingleVmDeploymentPackageSpec.Builder single = fillInMissingDefaults(newSingleSpec());
NetworkInterfacesSpec nicSpec = single.getNetworkInterfaces();
assertThat(nicSpec.getMinCount()).isEqualTo(1);
}
@Test
public void shouldFillMaxCount_networkInterfacesSingleVm() {
int min = 3;
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(
newSingleSpec()
.setNetworkInterfaces(NetworkInterfacesSpec.newBuilder().setMinCount(min)));
NetworkInterfacesSpec nicSpec = single.getNetworkInterfaces();
assertThat(nicSpec.getMaxCount()).isEqualTo(min);
}
@Test
public void shouldNotOverwriteMinAndMaxCount_networkInterfacesSingleVm() {
int min = 2;
int max = 4;
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(
newSingleSpec()
.setNetworkInterfaces(
NetworkInterfacesSpec.newBuilder().setMinCount(min).setMaxCount(max)));
NetworkInterfacesSpec expected =
NetworkInterfacesSpec.newBuilder().setMinCount(min).setMaxCount(max).build();
assertThat(single.getNetworkInterfaces()).comparingExpectedFieldsOnly().isEqualTo(expected);
}
@Test
public void shouldNotOverwriteMinAndMaxCount_networkInterfacesMultiVm() {
int min = 3;
int max = 3;
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).getNetworkInterfacesBuilder().setMinCount(min).setMaxCount(max);
fillInMissingDefaults(multi);
NetworkInterfacesSpec expected =
NetworkInterfacesSpec.newBuilder().setMinCount(min).setMaxCount(max).build();
assertThat(multi.getTiers(0).getNetworkInterfaces())
.comparingExpectedFieldsOnly()
.isEqualTo(expected);
}
@Test
public void shouldFillMinCount_networkInterfacesMultiVm() {
MultiVmDeploymentPackageSpec.Builder multi = fillInMissingDefaults(newMultiSpec());
NetworkInterfacesSpec nicSpec = multi.getTiers(0).getNetworkInterfaces();
assertThat(nicSpec.getMinCount()).isEqualTo(1);
}
@Test
public void shouldFillMaxCount_networkInterfacesMultiVm() {
int min = 4;
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi
.getTiersBuilder(0)
.setNetworkInterfaces(NetworkInterfacesSpec.newBuilder().setMinCount(min));
fillInMissingDefaults(multi);
NetworkInterfacesSpec nicSpec = multi.getTiers(0).getNetworkInterfaces();
assertThat(nicSpec.getMaxCount()).isEqualTo(min);
}
@Test
public void waiterScriptTimeoutShouldUseWaiterTimeoutIfNotSet() {
ApplicationStatusSpec.Builder appStatus =
ApplicationStatusSpec.newBuilder()
.setType(ApplicationStatusSpec.StatusType.WAITER)
.setWaiter(
WaiterSpec.newBuilder()
.setWaiterTimeoutSecs(300)
.setScript(ScriptSpec.getDefaultInstance()));
ApplicationStatusSpec.Builder expectedAppStatusBuilder = appStatus.clone();
expectedAppStatusBuilder.getWaiterBuilder().getScriptBuilder().setCheckTimeoutSecs(300);
ApplicationStatusSpec expectedAppStatus = expectedAppStatusBuilder.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setApplicationStatus(appStatus));
assertThat(single.getApplicationStatus()).isEqualTo(expectedAppStatus);
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setApplicationStatus(appStatus);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getApplicationStatus()).isEqualTo(expectedAppStatus);
}
@Test
public void waiterScriptTimeoutShouldBePreserved() {
ApplicationStatusSpec appStatus =
ApplicationStatusSpec.newBuilder()
.setType(ApplicationStatusSpec.StatusType.WAITER)
.setWaiter(
WaiterSpec.newBuilder()
.setWaiterTimeoutSecs(300)
.setScript(ScriptSpec.newBuilder().setCheckTimeoutSecs(200)))
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().setApplicationStatus(appStatus));
assertThat(single.getApplicationStatus()).isEqualTo(appStatus);
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).setApplicationStatus(appStatus);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getApplicationStatus()).isEqualTo(appStatus);
}
@Test
public void defaultLabelShouldApplyForASinglePassword() {
PasswordSpec password =
PasswordSpec.newBuilder()
.setMetadataKey("metadata-pw-key")
.setLength(10)
.setUsername("admin")
.build();
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().addPasswords(password));
assertThat(single.getPasswordsList()).hasSize(1);
assertThat(single.getPasswords(0)).isEqualTo(
password.toBuilder().setDisplayLabel("Admin").build());
MultiVmDeploymentPackageSpec.Builder multi =
fillInMissingDefaults(newMultiSpec().addPasswords(password));
assertThat(multi.getPasswordsList()).hasSize(1);
assertThat(multi.getPasswords(0)).isEqualTo(
password.toBuilder().setDisplayLabel("Admin").build());
}
@Test
public void defaultLabelShouldNotApplyForMoreThanOnePasswords() {
ImmutableList<PasswordSpec> passwords =
ImmutableList.of(
PasswordSpec.newBuilder()
.setMetadataKey("metadata-pw-key-0")
.setLength(10)
.setUsername("admin")
.build(),
PasswordSpec.newBuilder()
.setMetadataKey("metadata-pw-key-1")
.setLength(8)
.setUsername("user")
.build());
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().addAllPasswords(passwords));
assertThat(single.getPasswordsList()).hasSize(2);
assertThat(single.getPasswordsList()).containsAtLeastElementsIn(passwords).inOrder();
MultiVmDeploymentPackageSpec.Builder multi =
fillInMissingDefaults(newMultiSpec().addAllPasswords(passwords));
assertThat(multi.getPasswordsList()).hasSize(2);
assertThat(multi.getPasswordsList()).containsAtLeastElementsIn(passwords).inOrder();
}
@Test
public void defaultLabelShouldNotApplyForNoPasswords() {
SingleVmDeploymentPackageSpec.Builder single = fillInMissingDefaults(newSingleSpec());
assertThat(single.getPasswordsList()).isEmpty();
MultiVmDeploymentPackageSpec.Builder multi = fillInMissingDefaults(newMultiSpec());
assertThat(multi.getPasswordsList()).isEmpty();
}
private EmailBox newSingleVmEmailBox(DeployInputSection section) {
SingleVmDeploymentPackageSpec.Builder single = newSingleSpec();
single.getDeployInputBuilder().addSections(section);
fillInMissingDefaults(single);
return single.getDeployInput()
.getSections(0)
.getFields(0)
.getEmailBox();
}
private EmailBox newMultiVmEmailBox(DeployInputSection section) {
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getDeployInputBuilder().addSections(section);
fillInMissingDefaults(multi);
return multi.getDeployInput()
.getSections(0)
.getFields(0)
.getEmailBox();
}
@Test
public void shouldAssignDefaultTestDefaultValueForDeployInputEmailBox() {
EmailBox emailBox = EmailBox.newBuilder().build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setRequired(true).setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getTestDefaultValue())
.isEqualTo("default-user@example.com");
assertThat(newMultiVmEmailBox(section).getTestDefaultValue())
.isEqualTo("default-user@example.com");
}
@Test
public void shouldAssignDefaultPlaceholderForDeployInputEmailBox() {
EmailBox emailBox = EmailBox.newBuilder().build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getPlaceholder())
.isEqualTo("user@example.com");
assertThat(newMultiVmEmailBox(section).getPlaceholder())
.isEqualTo("user@example.com");
}
@Test
public void shouldAssignDefaultDescriptionForDeployInputEmailBox() {
EmailBox emailBox = EmailBox.newBuilder().build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getValidation().getDescription())
.isEqualTo("Please enter a valid email address");
assertThat(newMultiVmEmailBox(section).getValidation().getDescription())
.isEqualTo("Please enter a valid email address");
}
@Test
public void shouldOverwritenTestDefaultValueWithDefaultValueForDeployInputEmailBox() {
EmailBox emailBox = EmailBox.newBuilder()
.setDefaultValue("qd68mj2y8n@example.com")
.build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setRequired(true).setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getTestDefaultValue())
.isEqualTo("qd68mj2y8n@example.com");
assertThat(newMultiVmEmailBox(section).getTestDefaultValue())
.isEqualTo("qd68mj2y8n@example.com");
}
@Test
public void shouldNotOverwritenPlaceholderWithDefaultValueForDeployInputEmailBox() {
EmailBox emailBox = EmailBox.newBuilder()
.setPlaceholder("pruvkvewoq@example.com")
.build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getPlaceholder())
.isEqualTo("pruvkvewoq@example.com");
assertThat(newMultiVmEmailBox(section).getPlaceholder())
.isEqualTo("pruvkvewoq@example.com");
}
@Test
public void shouldNotOverwritenDescriptionWithDefaultValueForDeployInputEmailBox() {
Validation validation = Validation.newBuilder()
.setDescription("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.build();
EmailBox emailBox = EmailBox.newBuilder()
.setValidation(validation)
.build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getValidation().getDescription())
.isEqualTo("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
assertThat(newMultiVmEmailBox(section).getValidation().getDescription())
.isEqualTo("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
}
@Test
public void shouldAssignRegexForDeployInputEmailBox() {
Validation validation = Validation.newBuilder()
.setRegex(".?")
.build();
EmailBox emailBox = EmailBox.newBuilder()
.setValidation(validation)
.build();
DeployInputSection section = DeployInputSection
.newBuilder()
.addFields(DeployInputField.newBuilder().setEmailBox(emailBox))
.build();
assertThat(newSingleVmEmailBox(section).getValidation().getRegex())
.isEqualTo(".?");
assertThat(newMultiVmEmailBox(section).getValidation().getRegex())
.isEqualTo(".?");
}
private SingleVmDeploymentPackageSpec.Builder newSingleSpec() {
return SingleVmDeploymentPackageSpec.newBuilder()
.addImages(ImageSpec.newBuilder().setProject("image-project").setName("image-name"));
}
private MultiVmDeploymentPackageSpec.Builder newMultiSpec() {
MultiVmDeploymentPackageSpec.Builder builder = MultiVmDeploymentPackageSpec.newBuilder();
builder
.addTiersBuilder()
.setName("tier0")
.addImages(ImageSpec.newBuilder().setProject("image-project").setName("image-name-0"));
builder
.addTiersBuilder()
.setName("tier1")
.addImages(ImageSpec.newBuilder().setProject("image-project").setName("image-name-1"));
return builder;
}
@Test
public void defaultFirewallShouldBePublic() {
ImmutableList<FirewallRuleSpec> firewallRules =
ImmutableList.of(
FirewallRuleSpec.newBuilder()
.setProtocol(Protocol.TCP)
.setPort("80")
.build(),
FirewallRuleSpec.newBuilder()
.setProtocol(Protocol.ICMP)
.build());
SingleVmDeploymentPackageSpec.Builder single =
fillInMissingDefaults(newSingleSpec().addAllFirewallRules(firewallRules));
assertThat(
single.getFirewallRulesList().stream()
.filter(f -> TrafficSource.PUBLIC.equals(f.getAllowedSource())).count() == 2).isTrue();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).addAllFirewallRules(firewallRules);
fillInMissingDefaults(multi);
assertThat(
multi.getTiers(0).getFirewallRulesList().stream()
.filter(f -> TrafficSource.PUBLIC.equals(f.getAllowedSource())).count() == 2).isTrue();
}
@Test
public void defaultAccelatorTypeMultiVmIsFirstInList() {
List<String> types = Arrays.asList("nvidia-tesla-p100", "nvidia-tesla-k80");
AcceleratorSpec acceleratorSpec = AcceleratorSpec.newBuilder().addAllTypes(types).build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).addAccelerators(acceleratorSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getAccelerators(0).getDefaultType()).isEqualTo(types.get(0));
}
@Test
public void defaultAccelatorTypeMultiVmIsDefaultType() {
final String defaultType = "nvidia-tesla-k80";
List<String> types = Arrays.asList("nvidia-tesla-p100", defaultType);
AcceleratorSpec acceleratorSpec =
AcceleratorSpec.newBuilder().addAllTypes(types).setDefaultType(defaultType).build();
MultiVmDeploymentPackageSpec.Builder multi = newMultiSpec();
multi.getTiersBuilder(0).addAccelerators(acceleratorSpec);
fillInMissingDefaults(multi);
assertThat(multi.getTiers(0).getAccelerators(0).getDefaultType()).isEqualTo(defaultType);
}
@Test
public void defaultAccelatorTypeSingleVmIsFirstInList() {
List<String> types = Arrays.asList("nvidia-tesla-p100", "nvidia-tesla-k80");
AcceleratorSpec acceleratorSpec = AcceleratorSpec.newBuilder().addAllTypes(types).build();
SingleVmDeploymentPackageSpec.Builder single = newSingleSpec();
single.addAccelerators(acceleratorSpec);
fillInMissingDefaults(single);
assertThat(single.getAccelerators(0).getDefaultType()).isEqualTo(types.get(0));
}
@Test
public void defaultAccelatorTypeSingleVmIsDefaultType() {
final String defaultType = "nvidia-tesla-k80";
List<String> types = Arrays.asList("nvidia-tesla-p100", defaultType);
AcceleratorSpec acceleratorSpec =
AcceleratorSpec.newBuilder().addAllTypes(types).setDefaultType(defaultType).build();
SingleVmDeploymentPackageSpec.Builder single = newSingleSpec();
single.addAccelerators(acceleratorSpec);
fillInMissingDefaults(single);
assertThat(single.getAccelerators(0).getDefaultType()).isEqualTo(defaultType);
}
}