View Javadoc
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  }