package org.ovirt.engine.core.vdsbroker.vdsbroker;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.SerialNumberPolicy;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.MockConfigRule;
@RunWith(MockitoJUnitRunner.class)
public class VmSerialNumberBuilderTest {
private static final Guid VM_ID = Guid.newGuid();
private static final String CUSTOM_VM_SERIAL = "custom VM serial";
private static final String CUSTOM_CUSTER_SERIAL = "custom CLUSTER serial";
private static final String CUSTOM_CONFIG_SERIAL = "custom CONFIG serial";
VM vm;
Cluster cluster;
Map<String, Object> creationInfo;
@Rule
public MockConfigRule mockConfigRule = new MockConfigRule();
@Before
public void setUp() {
vm = new VM();
vm.setId(VM_ID);
cluster = new Cluster();
creationInfo = new HashMap<>();
}
@Test
public void testVmHostPolicy() {
setupVmWithSerialNumber(SerialNumberPolicy.HOST_ID, null);
assertSerialNumber(null);
}
@Test
public void testVmIdPolicy() {
setupVmWithSerialNumber(SerialNumberPolicy.VM_ID, null);
assertSerialNumber(VM_ID.toString());
}
@Test
public void testVmCustomPolicy() {
setupVmWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_VM_SERIAL);
assertSerialNumber(CUSTOM_VM_SERIAL);
}
@Test
public void testClusterHostPolicy() {
setupClusterWithSerialNumber(SerialNumberPolicy.HOST_ID, null);
assertSerialNumber(null);
}
@Test
public void testClusterVmIdPolicy() {
setupClusterWithSerialNumber(SerialNumberPolicy.VM_ID, null);
assertSerialNumber(VM_ID.toString());
}
@Test
public void testClusterCustomPolicy() {
setupClusterWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_CUSTER_SERIAL);
assertSerialNumber(CUSTOM_CUSTER_SERIAL);
}
@Test
public void testConfigHostPolicy() {
setupConfigWithSerialNumber(SerialNumberPolicy.HOST_ID, null);
assertSerialNumber(null);
}
@Test
public void testConfigVmIdPolicy() {
setupConfigWithSerialNumber(SerialNumberPolicy.VM_ID, null);
assertSerialNumber(VM_ID.toString());
}
@Test
public void testConfigCustomPolicy() {
setupConfigWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_CONFIG_SERIAL);
assertSerialNumber(CUSTOM_CONFIG_SERIAL);
}
@Test
public void testVmAppliedBeforeCluster() {
setupVmWithSerialNumber(SerialNumberPolicy.HOST_ID, null);
setupClusterWithSerialNumber(SerialNumberPolicy.VM_ID, null);
assertSerialNumber(null);
}
@Test
public void testVmAppliedBeforeConfig() {
setupVmWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_VM_SERIAL);
setupConfigWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_CONFIG_SERIAL);
assertSerialNumber(CUSTOM_VM_SERIAL);
}
@Test
public void testClusterAppliedBeforeConfig() {
setupClusterWithSerialNumber(SerialNumberPolicy.VM_ID, null);
setupConfigWithSerialNumber(SerialNumberPolicy.CUSTOM, CUSTOM_CONFIG_SERIAL);
assertSerialNumber(VM_ID.toString());
}
private void assertSerialNumber(String serialNumber) {
new VmSerialNumberBuilder(vm, cluster, creationInfo).buildVmSerialNumber();
assertEquals(serialNumber, creationInfo.get(VdsProperties.SERIAL_NUMBER));
}
private void setupVmWithSerialNumber(SerialNumberPolicy serialNumberPolicy, String customSerialNumber) {
vm.setSerialNumberPolicy(serialNumberPolicy);
vm.setCustomSerialNumber(customSerialNumber);
}
private void setupClusterWithSerialNumber(SerialNumberPolicy serialNumberPolicy, String customSerialNumber) {
cluster.setSerialNumberPolicy(serialNumberPolicy);
cluster.setCustomSerialNumber(customSerialNumber);
}
private void setupConfigWithSerialNumber(SerialNumberPolicy serialNumberPolicy, String customSerialNumber) {
mockConfigRule.mockConfigValue(ConfigValues.DefaultSerialNumberPolicy, serialNumberPolicy);
mockConfigRule.mockConfigValue(ConfigValues.DefaultCustomSerialNumber, customSerialNumber);
}
}