package eu.dnetlib.iis.common.report;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.mockito.Mockito.when;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import eu.dnetlib.iis.common.counter.PigCounters;
import eu.dnetlib.iis.common.counter.PigCountersParser;
import eu.dnetlib.iis.common.java.PortBindings;
import eu.dnetlib.iis.common.schemas.ReportEntry;
import eu.dnetlib.iis.common.schemas.ReportEntryType;
import eu.dnetlib.iis.common.utils.AvroTestUtils;
/**
* @author madryk
*/
@RunWith(MockitoJUnitRunner.class)
public class PigCountersReportGeneratorTest {
@InjectMocks
private PigCountersReportGenerator pigCountersReportGenerator = new PigCountersReportGenerator();
@Mock
private PigCountersParser pigCountersParser;
@Mock
private ReportPigCounterMappingParser reportPigCounterMappingParser;
@Mock
private ReportPigCountersResolver reportPigCountersResolver;
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
//------------------------ TESTS --------------------------
@Test
public void run() throws Exception {
// given
Path outputDirPath = new Path(tempFolder.getRoot().getPath());
PortBindings portBindings = new PortBindings(ImmutableMap.of(), ImmutableMap.of("report", outputDirPath));
Configuration conf = new Configuration(false);
Map<String, String> parameters = ImmutableMap.of(
"pigCounters", "counters",
"report.group.param1", "pigCounterName1",
"report.group.param2", "pigCounterName2");
PigCounters pigCounters = Mockito.mock(PigCounters.class);
when(pigCountersParser.parse("counters")).thenReturn(pigCounters);
ReportPigCounterMapping counterMapping1 = new ReportPigCounterMapping("counterName1", "jobAlias1", "group.param1");
ReportPigCounterMapping counterMapping2 = new ReportPigCounterMapping("counterName2", "jobAlias2", "group.param2");
when(reportPigCounterMappingParser.parse("group.param1", "pigCounterName1")).thenReturn(counterMapping1);
when(reportPigCounterMappingParser.parse("group.param2", "pigCounterName2")).thenReturn(counterMapping2);
ReportEntry reportCounter1 = new ReportEntry("group.param1", ReportEntryType.COUNTER, "2");
ReportEntry reportCounter2 = new ReportEntry("group.param2", ReportEntryType.COUNTER, "8");
when(reportPigCountersResolver.resolveReportCounters(pigCounters, Lists.newArrayList(counterMapping1, counterMapping2)))
.thenReturn(Lists.newArrayList(reportCounter1, reportCounter2));
// execute
pigCountersReportGenerator.run(portBindings, conf, parameters);
// assert
List<ReportEntry> actualReportCounters = AvroTestUtils.readLocalAvroDataStore(tempFolder.getRoot().getPath());
assertThat(actualReportCounters, containsInAnyOrder(reportCounter1, reportCounter2));
}
}