package org.ovirt.engine.core.bll.network.cluster;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
import org.ovirt.engine.core.common.businessentities.network.NetworkClusterId;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.network.NetworkClusterDao;
import org.ovirt.engine.core.dao.network.NetworkDao;
import org.ovirt.engine.core.utils.MockConfigRule;
@RunWith(MockitoJUnitRunner.class)
public class ManagementNetworkUtilImplTest {
private static final String TEST_NETWORK_NAME = "test network name";
private static final Guid TEST_CLUSTER_ID = Guid.newGuid();
private static final Guid TEST_NETWORK_ID = Guid.newGuid();
private static final NetworkClusterId TEST_NETWORK_CLUSTER_ID =
new NetworkClusterId(TEST_CLUSTER_ID, TEST_NETWORK_ID);
private ManagementNetworkUtilImpl underTest;
@Mock
private NetworkDao mockNetworkDao;
@Mock
private NetworkClusterDao mockNetworkClusterDao;
@Mock
private Network mockNetwork;
@Mock
private NetworkCluster mockNetworkCluster;
@Rule
public MockConfigRule mcr = new MockConfigRule(
MockConfigRule.mockConfig(ConfigValues.DefaultManagementNetwork, TEST_NETWORK_NAME));
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void setUp() {
underTest = new ManagementNetworkUtilImpl(mockNetworkDao, mockNetworkClusterDao);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#getManagementNetwork(Guid)} .
*/
@Test
public void testGetManagementNetwork() {
when(mockNetworkDao.getManagementNetwork(TEST_CLUSTER_ID)).thenReturn(mockNetwork);
final Network actual = underTest.getManagementNetwork(TEST_CLUSTER_ID);
assertSame(mockNetwork, actual);
verify(mockNetworkDao).getManagementNetwork(TEST_CLUSTER_ID);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(Guid)} .
*/
@Test
public void testIsManagementNetworkInAClusterPositive() throws Exception {
testIsManagementNetworkInAClusterCommon(true);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(Guid)} .
*/
@Test
public void testIsManagementNetworkInAClusterNegative() throws Exception {
testIsManagementNetworkInAClusterCommon(false);
}
private void testIsManagementNetworkInAClusterCommon(boolean expectedResult) {
when(mockNetworkCluster.isManagement()).thenReturn(expectedResult);
when(mockNetworkClusterDao.getAllForNetwork(TEST_NETWORK_ID)).thenReturn(Collections.singletonList(mockNetworkCluster));
final boolean actual = underTest.isManagementNetwork(TEST_NETWORK_ID);
assertEquals(expectedResult, actual);
verify(mockNetworkClusterDao).getAllForNetwork(TEST_NETWORK_ID);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(Guid, Guid)} .
*/
@Test
public void testIsManagementNetworkInGivenClusterPositive() throws Exception {
testIsManagementNetworkInGivenClusterCommon(true);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(Guid, Guid)} .
*/
@Test
public void testIsManagementNetworkInGivenClusterNegative() throws Exception {
testIsManagementNetworkInGivenClusterCommon(false);
}
private void testIsManagementNetworkInGivenClusterCommon(boolean expectedResult) {
when(mockNetworkClusterDao.get(TEST_NETWORK_CLUSTER_ID)).thenReturn(mockNetworkCluster);
when(mockNetworkCluster.isManagement()).thenReturn(expectedResult);
final boolean actual = underTest.isManagementNetwork(TEST_NETWORK_ID, TEST_CLUSTER_ID);
assertEquals(expectedResult, actual);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(String, Guid)} .
*/
@Test
public void testIsManagementNetworkNameInGivenClusterPositive() throws Exception {
testIsManagementNetworkNameInGivenClusterCommon(TEST_NETWORK_NAME, TEST_CLUSTER_ID, true);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(String, Guid)} .
*/
@Test
public void testIsManagementNetworkNameInGivenClusterNegative() throws Exception {
testIsManagementNetworkNameInGivenClusterCommon("not" + TEST_NETWORK_NAME, TEST_CLUSTER_ID, false);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(String, Guid)} .
*/
@Test
public void testIsManagementNetworkNameInGivenClusterNull() throws Exception {
testIsManagementNetworkNameInGivenClusterCommon(TEST_NETWORK_NAME, null, false);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#isManagementNetwork(String, Guid)} .
*/
@Test
public void testIsManagementNetworkNameNullInGivenCluster() throws Exception {
testIsManagementNetworkNameInGivenClusterCommon(null, TEST_CLUSTER_ID, false);
}
private void testIsManagementNetworkNameInGivenClusterCommon(String networkName,
Guid clusterId,
boolean expected) {
when(mockNetworkDao.getManagementNetwork(TEST_CLUSTER_ID)).thenReturn(mockNetwork);
when(mockNetwork.getName()).thenReturn(TEST_NETWORK_NAME);
final boolean actual = underTest.isManagementNetwork(networkName, clusterId);
verify(mockNetworkDao).getManagementNetwork(clusterId);
assertEquals(expected, actual);
}
/**
* Test method for {@link ManagementNetworkUtilImpl#getDefaultManagementNetworkName()}.
*/
@Test
public void testGetDefaultManagementNetworkName() throws Exception {
assertEquals(TEST_NETWORK_NAME, underTest.getDefaultManagementNetworkName());
}
@Test
public void testGetManagementNetworkWhenInstancesDoesNotContainOne() throws Exception {
List<Network> networks = Arrays.asList(createNetwork(false, "a"), createNetwork(false, "b"));
Guid clusterId = Guid.newGuid();
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage(underTest.createFailureMessage(clusterId, networks));
underTest.getManagementNetwork(networks, clusterId);
}
@Test
public void testGetManagementNetworkWhenInstancesContainMultipleOnes() throws Exception {
List<Network> networks = Arrays.asList(createNetwork(true, "a"), createNetwork(true, "b"));
Guid clusterId = Guid.newGuid();
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage(underTest.createFailureMessage(clusterId, networks));
underTest.getManagementNetwork(networks, clusterId);
}
@Test
public void testGetManagementNetworkWhenInstancesContainOne() throws Exception {
Network network = createNetwork(true, "a");
List<Network> networks = Arrays.asList(network, createNetwork(false, "b"));
assertThat(underTest.getManagementNetwork(networks, Guid.newGuid()), is(network));
}
private Network createNetwork(boolean isManagementNetwork, String name) {
NetworkCluster networkCluster = new NetworkCluster();
networkCluster.setManagement(isManagementNetwork);
Network network = new Network();
network.setName(name);
network.setCluster(networkCluster);
return network;
}
}