package eu.dnetlib.iis.wf.export.actionmanager.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.never; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.SequenceFile; import org.apache.hadoop.io.Writable; 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.Mockito; import org.mockito.runners.MockitoJUnitRunner; import eu.dnetlib.actionmanager.actions.AtomicAction; import eu.dnetlib.actionmanager.common.Agent; import eu.dnetlib.actionmanager.common.Agent.AGENT_TYPE; import eu.dnetlib.data.proto.KindProtos.Kind; import eu.dnetlib.data.proto.OafProtos.Oaf; /** * @author mhorst * */ @RunWith(MockitoJUnitRunner.class) public class SequenceFileActionManagerServiceFacadeTest { @Mock private SequenceFile.Writer writer; @Captor private ArgumentCaptor<Writable> keyCaptor; @Captor private ArgumentCaptor<Writable> valueCaptor; private SequenceFileActionManagerServiceFacade facade; @Before public void init() { facade = new SequenceFileActionManagerServiceFacade(writer); } @Test public void testStoreNullActions() throws Exception { // execute facade.storeActions(null); // assert verify(writer, never()).append(Mockito.any(), Mockito.any()); } @Test public void testStoreActions() throws Exception { // given String rawSet = "rawSet"; Agent agent = new Agent("agentId", "test-agent", AGENT_TYPE.service); String targetRowKey = "rowKey"; String targetColumnFamily = "colFam"; String targetColumn = "col"; Oaf oaf = Oaf.newBuilder().setKind(Kind.entity).build(); AtomicAction action = new AtomicAction(rawSet, agent, targetRowKey, targetColumnFamily, targetColumn, oaf.toByteArray()); List<AtomicAction> actions = new ArrayList<>(); actions.add(action); // execute facade.storeActions(actions); // assert verify(writer).append(keyCaptor.capture(), valueCaptor.capture()); assertEquals(action.getRowKey(), keyCaptor.getValue().toString()); AtomicAction recreatedAction = AtomicAction.fromJSON(valueCaptor.getValue().toString()); assertNotNull(recreatedAction); assertEquals(action.getRawSet(), recreatedAction.getRawSet()); assertNotNull(recreatedAction.getAgent()); assertEquals(agent.getId(), recreatedAction.getAgent().getId()); assertEquals(agent.getName(), recreatedAction.getAgent().getName()); assertEquals(agent.getType(), recreatedAction.getAgent().getType()); assertEquals(action.getTargetColumn(), recreatedAction.getTargetColumn()); assertEquals(action.getTargetColumnFamily(), recreatedAction.getTargetColumnFamily()); assertEquals(action.getTargetRowKey(), recreatedAction.getTargetRowKey()); Oaf recreatedOaf = Oaf.newBuilder().mergeFrom(recreatedAction.getTargetValue()).build(); assertEquals(oaf.getKind(), recreatedOaf.getKind()); } @Test public void testClose() throws Exception { // execute facade.close(); // assert verify(writer, Mockito.times(1)).close(); } }