package org.ovirt.engine.core.bll.network.vm;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.hasEntry;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable;
import org.ovirt.engine.core.dao.network.NetworkDao;
@RunWith(MockitoJUnitRunner.class)
public class VnicProfileHelperTest {
private static final AuditLogType AUDIT_LOG_TYPE = AuditLogType.UNASSIGNED;
private static final Guid CLUSTER_ID = Guid.newGuid();
private static final Guid DATA_CENTER_ID = Guid.newGuid();
private static final String ENTITY_NAME = "entity name";
private static final String NETWORK_NAME = "network name";
private static final String VNIC_NAME = "vnic name";
@Mock
private AuditLogDirector auditLogDirector;
@Mock
private NetworkDao networkDao;
@Captor
private ArgumentCaptor<AuditLogable> auditLogableCaptor;
private VnicProfileHelper underTest;
@Before
public void setUp() {
underTest = spy(new VnicProfileHelper(CLUSTER_ID, DATA_CENTER_ID, AUDIT_LOG_TYPE));
doReturn(auditLogDirector).when(underTest).createAuditLogDirector();
doReturn(networkDao).when(underTest).getNetworkDao();
}
private VmNetworkInterface createVnic(String vnicName, String networkName) {
final VmNetworkInterface vmInterface = new VmNetworkInterface();
vmInterface.setName(vnicName);
vmInterface.setNetworkName(networkName);
return vmInterface;
}
@Test
public void testAuditInvalidInterfaces() {
final List<String> vnicNames = new ArrayList<>();
final Set<String> networkNames = new HashSet<>();
for (int i = 1; i < 3; i++) {
final String vnicName = VNIC_NAME + i;
final String networkName = NETWORK_NAME;
underTest.updateNicWithVnicProfileForUser(createVnic(vnicName, networkName), null);
vnicNames.add(vnicName);
networkNames.add(networkName);
}
underTest.auditInvalidInterfaces(ENTITY_NAME);
verify(auditLogDirector).log(auditLogableCaptor.capture(), eq(AUDIT_LOG_TYPE));
final Map<String, String> capturedCustomValues = auditLogableCaptor.getValue().getCustomValues();
assertThat(capturedCustomValues, allOf(
hasEntry("entityname", ENTITY_NAME),
hasEntry("interfaces", vnicNames.stream().collect(Collectors.joining(","))),
hasEntry("networks", networkNames.stream().collect(Collectors.joining(",")))));
}
}