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 jakarta.annotation.Nullable;
10 import org.junit.jupiter.api.AfterEach;
11 import org.junit.jupiter.api.BeforeEach;
12 import org.junit.jupiter.api.Test;
13 import org.junit.jupiter.api.io.TempDir;
14
15 import java.io.ByteArrayOutputStream;
16 import java.io.IOException;
17 import java.nio.file.Files;
18 import java.nio.file.Path;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
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 }