package org.ovirt.engine.core.bll; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.queries.IdQueryParameters; // this class contains only tests for the isDisplayAddressPartiallyOverridden method @RunWith(Theories.class) public class IsDisplayAddressConsistentInClusterQueryTest extends AbstractUserQueryTest<IdQueryParameters, IsDisplayAddressConsistentInClusterQuery<IdQueryParameters>> { // create data point with 1,2,3 and many VDS (all has overridden console address) @DataPoints public static OverriddenConsoleAddress[] overriddens = new OverriddenConsoleAddress[]{ new OverriddenConsoleAddress(1), new OverriddenConsoleAddress(2), new OverriddenConsoleAddress(3), new OverriddenConsoleAddress(20), }; // create data point with 1,2,3 and many VDS (none has overridden console address) @DataPoints public static DefaultConsoleAddress[] defaults = new DefaultConsoleAddress[]{ new DefaultConsoleAddress(1), new DefaultConsoleAddress(2), new DefaultConsoleAddress(3), new DefaultConsoleAddress(20), }; @Test public void nullHostsAreNotMismatched() { assertThat(getQuery().isDisplayAddressPartiallyOverridden(null), is(false)); } @Test public void emptyHostsAreNotMismatched() { assertThat(getQuery().isDisplayAddressPartiallyOverridden(new ArrayList<>()), is(false)); } @Theory public void whenAllHostsAreDefaultTheyAreNotMismatched(DefaultConsoleAddress defaultAddress) { assertThat(getQuery().isDisplayAddressPartiallyOverridden(defaultAddress.getAllVds()), is(false)); } @Theory public void whenAllHostsAreOverriddenTheyAreNotMismatched(OverriddenConsoleAddress overriddenAddress) { assertThat(getQuery().isDisplayAddressPartiallyOverridden(overriddenAddress.getAllVds()), is(false)); } @Theory public void anyCombinationOfDefaulfAndOverriddenHostsAreMismatched(DefaultConsoleAddress defaultAddress, OverriddenConsoleAddress overriddenAddress) { List<VDS> mergedAddresses = new ArrayList<>(); mergedAddresses.addAll(defaultAddress.getAllVds()); mergedAddresses.addAll(overriddenAddress.getAllVds()); assertThat(getQuery().isDisplayAddressPartiallyOverridden(mergedAddresses), is(true)); } } abstract class BaseVdsContainer { private List<VDS> content; public BaseVdsContainer(int numOfVds) { for (int i = 0; i < numOfVds; i++) { addVds(); } } protected abstract void addVds(); public void addVds(String returnValue) { if (content == null) { content = new ArrayList<>(); } VDS vds = mock(VDS.class); when(vds.getConsoleAddress()).thenReturn(returnValue); content.add(vds); } public List<VDS> getAllVds() { return content; } } class OverriddenConsoleAddress extends BaseVdsContainer { public OverriddenConsoleAddress(int numOfVds) { super(numOfVds); } @Override protected void addVds() { super.addVds("some overridden value"); //$NON-NLS-1$ } } class DefaultConsoleAddress extends BaseVdsContainer { public DefaultConsoleAddress(int numOfVds) { super(numOfVds); } @Override protected void addVds() { super.addVds(null); } }