package org.jenkinsci.plugins.xunit.service; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Stage; import hudson.model.TaskListener; import hudson.remoting.VirtualChannel; import org.jenkinsci.lib.dtkit.model.InputMetricType; import org.jenkinsci.lib.dtkit.model.InputMetricXSL; import org.jenkinsci.lib.dtkit.model.InputType; import org.jenkinsci.lib.dtkit.model.OutputMetric; import org.jenkinsci.plugins.xunit.NoFoundTestException; import org.jenkinsci.plugins.xunit.types.model.JUnitModel; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.*; import java.util.Arrays; import java.util.List; import static org.mockito.Mockito.*; public class XUnitTransformerTest { @Mock @SuppressWarnings("unused") private TaskListener buildListenerMock; @Mock @SuppressWarnings("unused") private XUnitReportProcessorService xUnitReportProcessorServiceMock; @Mock @SuppressWarnings("unused") private XUnitConversionService xUnitConversionServiceMock; @Mock @SuppressWarnings("unused") private XUnitValidationService xUnitValidationServiceMock; @Mock @SuppressWarnings("unused") private XUnitToolInfo xUnitToolInfoMock; @Rule public TempWorkspace tempWorkspace = new TempWorkspace(); private XUnitTransformer xUnitTransformer; @Before public void beforeTest() throws IOException { MockitoAnnotations.initMocks(this); when(buildListenerMock.getLogger()).thenReturn(new PrintStream(new ByteArrayOutputStream())); when(xUnitToolInfoMock.getInputMetric()).thenReturn(new MyInputMetric()); xUnitTransformer = Guice.createInjector(Stage.DEVELOPMENT, new AbstractModule() { @Override protected void configure() { bind(TaskListener.class).toInstance(buildListenerMock); bind(XUnitToolInfo.class).toInstance(xUnitToolInfoMock); bind(XUnitConversionService.class).toInstance(xUnitConversionServiceMock); bind(XUnitValidationService.class).toInstance(xUnitValidationServiceMock); bind(XUnitReportProcessorService.class).toInstance(xUnitReportProcessorServiceMock); } }).getInstance(XUnitTransformer.class); } public static class MyInputMetric extends InputMetricXSL { @Override public String getToolName() { return "testTool"; } @Override public String getToolVersion() { return "testVersion"; } @Override public InputMetricType getInputMetricType() { return InputMetricType.XSL; } @Override public InputType getToolType() { return InputType.TEST; } @Override public String getXslName() { return null; } @Override public String[] getInputXsdNameList() { return null; } @Override public OutputMetric getOutputFormatType() { return JUnitModel.LATEST; } } @Test(expected = NoFoundTestException.class) public void emptyResultFiles() throws Exception { //Test result Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); verify(xUnitValidationServiceMock, never()).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkFailedNewFiles() throws Exception { //Recording behaviour : testing not empty result files found and a false check String fileName = "a.txt"; File fileReport = new File(fileName); List<String> resultFiles = Arrays.asList(fileName); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(fileReport); //Test result Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying verify(xUnitValidationServiceMock, never()).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); } @Test public void oneFileEmptyWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Wants to call the real method checkFileIsNotEmpty when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenCallRealMethod(); //Create a empty file //Test the process continues and prints a message File myInputFile = new File(tempWorkspace.getDir(), "a.txt"); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); // Theses methods are never call verify(xUnitValidationServiceMock, never()).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void oneFileEmptyWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Wants to call the real method checkFileIsNotEmpty when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenCallRealMethod(); //Create an empty file //Test the process continues and prints a message File myInputFile = new File(tempWorkspace.getDir(), "a.txt"); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //The process exits on true Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); // Theses methods are never call verify(xUnitValidationServiceMock, never()).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void oneFileNotEmptyStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "a.txt"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on true Assert.assertTrue(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrderReport = inOrder(xUnitReportProcessorServiceMock); inOrderReport.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrderReport.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrderReport.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void oneFileNotEmptyStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "a.txt"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on true Assert.assertTrue(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrderReport = inOrder(xUnitReportProcessorServiceMock); inOrderReport.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrderReport.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrderReport.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).checkFileIsNotEmpty(any(File.class)); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void oneFileNotEmptyWithOneFileEmptyWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Wants to call the real method checkFileIsNotEmpty when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenCallRealMethod(); //Create a non empty file File myInputFileNotEmpty = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFileNotEmpty); fos.write("bidon".getBytes()); fos.close(); File myInputFileEmpty = new File(tempWorkspace.getDir(), "b.txt"); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("a.txt"))).thenReturn(myInputFileNotEmpty); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("b.txt"))).thenReturn(myInputFileEmpty); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock, times(2)).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void oneFileNotEmptyAndOneFileEmptyAndStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Wants to call the real method checkFileIsNotEmpty when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenCallRealMethod(); //Create a non empty file File myInputFileNotEmpty = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFileNotEmpty); fos.write("bidon".getBytes()); fos.close(); File myInputFileEmpty = new File(tempWorkspace.getDir(), "b.txt"); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("a.txt"))).thenReturn(myInputFileNotEmpty); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("b.txt"))).thenReturn(myInputFileEmpty); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock, times(2)).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void twoFilesNotEmptyWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a dummy non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on true Assert.assertTrue(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock, times(2)).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock, times(2)).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, times(2)).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, times(2)).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void twoFilesNotEmptyWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a dummy non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation, conversion and right output validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process exits on true Assert.assertTrue(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock, times(2)).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock, times(2)).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, times(2)).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, times(2)).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationInputWihOneFileWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Wrong input validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(false); //The process must exit on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationInputWihOneFileWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Wrong input validation when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(false); //The process must exit on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationInputWihOneFileFollowedByOneValidFileWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a non empty file File myInputFile1 = new File(tempWorkspace.getDir(), "a.txt"); FileOutputStream fos1 = new FileOutputStream(myInputFile1); fos1.write("bidon1".getBytes()); fos1.close(); File myInputFile2 = new File(tempWorkspace.getDir(), "b.txt"); FileOutputStream fos2 = new FileOutputStream(myInputFile2); fos2.write("bidon2".getBytes()); fos2.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("a.txt"))).thenReturn(myInputFile1); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("b.txt"))).thenReturn(myInputFile2); //Case: Wrong input validation on first file and right on second when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), eq(myInputFile1))).thenReturn(false); when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), eq(myInputFile2))).thenReturn(true); //Right conversion and output validation when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process must exit on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions // The method for the second must never be called verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, never()).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, never()).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationInputWihOneFileFollowedByOneValidFileWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a non empty file File myInputFile1 = new File(tempWorkspace.getDir(), "a.txt"); FileOutputStream fos1 = new FileOutputStream(myInputFile1); fos1.write("bidon1".getBytes()); fos1.close(); File myInputFile2 = new File(tempWorkspace.getDir(), "b.txt"); FileOutputStream fos2 = new FileOutputStream(myInputFile2); fos2.write("bidon2".getBytes()); fos2.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("a.txt"))).thenReturn(myInputFile1); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), eq("b.txt"))).thenReturn(myInputFile2); //Case: Wrong input validation on first file and right on second when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), eq(myInputFile1))).thenReturn(false); when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), eq(myInputFile2))).thenReturn(true); //Right conversion and output validation when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(true); //The process must exit on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions // The method for the second must never be called verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); verify(xUnitReportProcessorServiceMock, times(2)).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock, times(2)).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationOutputWihOneFileWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation and conversion when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); //Wrong output validation when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(false); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationOutputWihOneFileWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation and conversion when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); //Wrong output validation when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(false); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationOutputWihTwoFilesWithStopActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(true); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation and conversion when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); //Wrong output validation when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(false); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions //Exit at the first validation output error InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } @Test public void checkedFailedValidationOutputWihTwoFilesWithStopNotActivated() throws Exception { //One result file List<String> resultFiles = Arrays.asList("a.txt", "b.txt"); when(xUnitReportProcessorServiceMock.findReports(any(XUnitToolInfo.class), any(File.class), anyString())).thenReturn(resultFiles); //Check OK when(xUnitValidationServiceMock.checkFileIsNotEmpty(any(File.class))).thenReturn(true); //Stop processing when there is an error when(xUnitReportProcessorServiceMock.isStopProcessingIfError(any(XUnitToolInfo.class))).thenReturn(false); //Create a non empty file File myInputFile = new File(tempWorkspace.getDir(), "dummyFile"); FileOutputStream fos = new FileOutputStream(myInputFile); fos.write("bidon".getBytes()); fos.close(); when(xUnitReportProcessorServiceMock.getCurrentReport(any(File.class), anyString())).thenReturn(myInputFile); //Case: Right input validation and conversion when(xUnitValidationServiceMock.validateInputFile(any(XUnitToolInfo.class), any(File.class))).thenReturn(true); when(xUnitConversionServiceMock.convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class))).thenReturn(new File(tempWorkspace.getDir(), "output")); //Wrong output validation when(xUnitValidationServiceMock.validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class))).thenReturn(false); //The process exits on false Assert.assertFalse(xUnitTransformer.invoke(tempWorkspace.getDir(), mock(VirtualChannel.class))); //Verifying mock interactions //Exit at the first validation output error InOrder inOrder = inOrder(xUnitReportProcessorServiceMock); inOrder.verify(xUnitReportProcessorServiceMock).findReports(any(XUnitToolInfo.class), any(File.class), anyString()); inOrder.verify(xUnitReportProcessorServiceMock).checkIfFindsFilesNewFiles(any(XUnitToolInfo.class), eq(resultFiles), any(File.class)); inOrder.verify(xUnitReportProcessorServiceMock).getCurrentReport(any(File.class), anyString()); verify(xUnitValidationServiceMock, times(2)).validateInputFile(any(XUnitToolInfo.class), any(File.class)); verify(xUnitConversionServiceMock, times(2)).convert(any(XUnitToolInfo.class), any(File.class), any(File.class), any(File.class)); verify(xUnitValidationServiceMock, times(2)).validateOutputFile(any(XUnitToolInfo.class), any(File.class), any(File.class)); } }