1 package emissary.output.filter; 2 3 import emissary.config.ServiceConfigGuide; 4 import emissary.core.DataObjectFactory; 5 import emissary.core.IBaseDataObject; 6 import emissary.test.core.junit5.UnitTest; 7 8 import com.google.common.collect.Lists; 9 import org.junit.jupiter.api.AfterEach; 10 import org.junit.jupiter.api.BeforeEach; 11 import org.junit.jupiter.api.Test; 12 import org.junit.jupiter.api.io.TempDir; 13 14 import java.io.ByteArrayOutputStream; 15 import java.io.IOException; 16 import java.nio.file.Files; 17 import java.nio.file.Path; 18 import java.util.HashMap; 19 import java.util.List; 20 import java.util.Map; 21 import javax.annotation.Nullable; 22 23 import static org.junit.jupiter.api.Assertions.assertEquals; 24 import static org.junit.jupiter.api.Assertions.assertTrue; 25 26 class XmlOutputFilterTest extends UnitTest { 27 28 @Nullable 29 private ServiceConfigGuide config; 30 private IBaseDataObject payload; 31 private IDropOffFilter f; 32 private Path tmpDir; 33 34 @BeforeEach 35 public void setup(@TempDir final Path tmpDir) throws IOException { 36 this.tmpDir = tmpDir; 37 38 config = new ServiceConfigGuide(); 39 config.removeAllEntries("OUTPUT_PATH"); 40 config.addEntry("OUTPUT_SPEC_FOO", "/tmp/%S%.%F%"); 41 config.addEntry("OUTPUT_SPEC_BAR", "/xyzzy/%S%.%F%"); 42 config.addEntry("OUTPUT_PATH", tmpDir.toAbsolutePath().toString()); 43 44 f = new XmlOutputFilter(); 45 46 payload = DataObjectFactory.getInstance(); 47 payload.setData("This is the data".getBytes()); 48 payload.setFileType("FTYPE"); 49 payload.setFilename("/this/is/a/testfile"); 50 } 51 52 @Override 53 @AfterEach 54 public void tearDown() throws IOException { 55 Files.deleteIfExists(tmpDir); 56 config = null; 57 } 58 59 @Test 60 void testFilterSetup() { 61 f.initialize(config, "FOO"); 62 assertEquals("FOO", f.getFilterName(), "Filter name should be set"); 63 assertEquals("/tmp/%S%.%F%", f.getOutputSpec(), "Output spec should be build based on name"); 64 } 65 66 @Test 67 void testOutputFromFilter() { 68 f.initialize(config, "FOO", config); 69 List<IBaseDataObject> payloadList = Lists.newArrayList(payload); 70 71 Map<String, Object> params = new HashMap<>(); 72 73 assertTrue(f.isOutputtable(payload, params), "Payload should be outputtable"); 74 assertTrue(f.isOutputtable(payloadList, params), "Payload list should be outputtable"); 75 76 ByteArrayOutputStream output = new ByteArrayOutputStream(); 77 int status = f.filter(payloadList, params, output); 78 79 assertEquals(IDropOffFilter.STATUS_SUCCESS, status, "Status of filter should be success"); 80 assertTrue(output.toString().contains("<name>/this/is/a/testfile</name>"), "Output must contain name field '" + output + "'"); 81 } 82 83 }