package org.ovirt.engine.core.bll.profiles;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
import static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.ValidationResult;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.profiles.CpuProfile;
import org.ovirt.engine.core.common.businessentities.profiles.ProfileType;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.PermissionDao;
import org.ovirt.engine.core.dao.profiles.CpuProfileDao;
@RunWith(MockitoJUnitRunner.class)
public class CpuProfileHelperTest {
private static final Guid CLUSTER_ID = Guid.newGuid();
private static final String CLUSTER_NAME = "ClusterName";
private static final Guid USER_1_ID = Guid.newGuid();
@Mock
private CpuProfileDao cpuProfileDao;
@Mock
private PermissionDao permissionDao;
@InjectMocks
private CpuProfileHelper cpuProfileHelper;
private CpuProfile cpuProfile1 = new CpuProfile();
private CpuProfile cpuProfile2 = new CpuProfile();
@Before
public void setUp() {
cpuProfile1.setId(Guid.newGuid());
cpuProfile1.setClusterId(CLUSTER_ID);
cpuProfile1.setName("CpuProfile 1");
cpuProfile2.setId(Guid.newGuid());
cpuProfile2.setClusterId(CLUSTER_ID);
cpuProfile2.setName("CpuProfile 2");
when(cpuProfileDao.get(cpuProfile1.getId())).thenReturn(cpuProfile1);
when(cpuProfileDao.get(cpuProfile2.getId())).thenReturn(cpuProfile2);
}
@Test
public void createCpuProfileTest() {
CpuProfile cpuProfile = CpuProfileHelper.createCpuProfile(CLUSTER_ID, CLUSTER_NAME);
assertEquals(CLUSTER_NAME, cpuProfile.getName());
assertEquals(CLUSTER_ID, cpuProfile.getClusterId());
assertNotNull(cpuProfile.getId());
assertEquals(ProfileType.CPU, cpuProfile.getProfileType());
}
@Test
public void testNullClusterId() {
VmBase vmBase = createVmBase(cpuProfile1.getId());
vmBase.setClusterId(null);
ValidationResult res = cpuProfileHelper.setAndValidateCpuProfile(vmBase, USER_1_ID);
assertThat(res, failsWith(EngineMessage.ACTION_TYPE_CPU_PROFILE_CLUSTER_NOT_PROVIDED));
}
@Test
public void testNonExistingCpuProfile() {
VmBase vmBase = createVmBase(Guid.newGuid());
ValidationResult res = cpuProfileHelper.setAndValidateCpuProfile(vmBase, USER_1_ID);
assertThat(res, failsWith(EngineMessage.ACTION_TYPE_FAILED_CPU_PROFILE_NOT_FOUND));
}
@Test
public void testDifferentClusters() {
VmBase vmBase = createVmBase(cpuProfile1.getId());
vmBase.setClusterId(Guid.newGuid());
ValidationResult res = cpuProfileHelper.setAndValidateCpuProfile(vmBase, USER_1_ID);
assertThat(res, failsWith(EngineMessage.ACTION_TYPE_CPU_PROFILE_NOT_MATCH_CLUSTER));
}
@Test
public void testNoPermission() {
VmBase vmBase = createVmBase(cpuProfile2.getId());
ValidationResult res = cpuProfileHelper.setAndValidateCpuProfile(vmBase, USER_1_ID);
assertThat(res, failsWith(EngineMessage.ACTION_TYPE_NO_PERMISSION_TO_ASSIGN_CPU_PROFILE));
}
private VmBase createVmBase(Guid cpuProfileId) {
VmBase vmBase = new VmBase();
vmBase.setId(Guid.newGuid());
vmBase.setClusterId(CLUSTER_ID);
vmBase.setCpuProfileId(cpuProfileId);
return vmBase;
}
}