package org.ovirt.engine.core.bll.scheduling.utils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.ovirt.engine.core.bll.scheduling.utils.CpuPinningHelper.getAllPinnedPCpus;
import static org.ovirt.engine.core.bll.scheduling.utils.CpuPinningHelper.parseCpuPinning;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.core.bll.scheduling.utils.CpuPinningHelper.PinnedCpu;
public class CpuPinningHelperTest {
@Test
public void shouldFilterExcludes() {
List<PinnedCpu> pinnedCpus = parseCpuPinning("0#1-7,^3,^5");
assertThat(pinnedCpus.get(0).getpCpus()).containsExactly(1, 2, 4, 6, 7);
}
@Test
public void shouldNotCreateSingleElementRange() {
List<PinnedCpu> pinnedCpus = parseCpuPinning("0#2-2");
assertThat(pinnedCpus.get(0).getpCpus()).isEmpty();
}
@Test
public void shouldNotCreateInvertedRange() {
List<PinnedCpu> pinnedCpus = parseCpuPinning("0#3-1");
assertThat(pinnedCpus.get(0).getpCpus()).isEmpty();
}
@Test
public void shouldCreateIndividalCpus() {
List<PinnedCpu> pinnedCpus = parseCpuPinning("0#2,4,7,^4");
assertThat(pinnedCpus.get(0).getpCpus()).containsExactly(2, 7);
}
@Test
public void shouldCreateMultiplePinnedCpus() {
List<PinnedCpu> pinnedCpus = parseCpuPinning("0#2_2#1-2_5#3");
assertThat(pinnedCpus.get(0).getpCpus()).containsExactly(2);
assertThat(pinnedCpus.get(0).getvCpu()).isEqualTo(0);
assertThat(pinnedCpus.get(1).getpCpus()).containsExactly(1, 2);
assertThat(pinnedCpus.get(1).getvCpu()).isEqualTo(2);
assertThat(pinnedCpus.get(2).getpCpus()).containsExactly(3);
assertThat(pinnedCpus.get(2).getvCpu()).isEqualTo(5);
}
@Test
public void shouldGetAllPinnedHostCpus() {
Collection<Integer> pinnedHostCpus = getAllPinnedPCpus("0#3_2#1-2,12_5#3,4,10,^10_6#6-9,^8_9#13-15");
assertThat(pinnedHostCpus).containsOnly(1, 2, 3, 4, 6, 7, 9, 12, 13, 14, 15);
}
}