package org.ovirt.engine.core.bll.storage.ovfstore; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StoragePoolDao; @RunWith(MockitoJUnitRunner.class) public class OvfDataUpdaterTest { @InjectMocks @Spy private OvfDataUpdater ovfDataUpdater; private Map<Guid, Map<Guid, Boolean>> map; @Mock private StoragePoolDao storagePoolDao; @Before public void setUp() { map = new HashMap<>(); mockAnswers(); StoragePool pool1 = new StoragePool(); pool1.setId(Guid.newGuid()); StoragePool pool2 = new StoragePool(); pool2.setId(Guid.newGuid()); doReturn(Arrays.asList(pool1, pool2)).when(storagePoolDao).getAllByStatus(StoragePoolStatus.Up); } @Test public void poolUpdateOvfStoreOnAnyDomainSupported() throws Exception { ovfDataUpdater.ovfUpdateTimer(); verify(); } private void mockAnswers() { doAnswer(invocation -> { VdcReturnValueBase returnValueBase = new VdcReturnValueBase(); Map<Guid, Boolean> domains = new HashMap<>(); Set<Guid> domainIds = new HashSet<>(); domainIds.add(Guid.newGuid()); domainIds.add(Guid.newGuid()); for (Guid domainId : domainIds) { domains.put(domainId, Boolean.FALSE); } returnValueBase.setActionReturnValue(domainIds); Guid storagePoolId = (Guid) invocation.getArguments()[0]; map.put(storagePoolId, domains); return returnValueBase; }).when(ovfDataUpdater).performOvfUpdateForStoragePool(any(Guid.class)); doAnswer(invocation -> { Guid storagePoolId = (Guid) invocation.getArguments()[0]; Guid storageDomainId = (Guid) invocation.getArguments()[1]; map.get(storagePoolId).put(storageDomainId, Boolean.TRUE); return null; }).when(ovfDataUpdater).performOvfUpdateForDomain(any(Guid.class), any(Guid.class)); } private void verify() { assertTrue(map.values().stream().flatMap(x -> x.values().stream()).allMatch(x -> x)); } }