View Javadoc
1   package emissary.core;
2   
3   import emissary.test.core.junit5.UnitTest;
4   
5   import org.junit.jupiter.api.AfterEach;
6   import org.junit.jupiter.api.BeforeEach;
7   import org.junit.jupiter.api.Test;
8   
9   import java.nio.charset.StandardCharsets;
10  
11  import static org.junit.jupiter.api.Assertions.assertEquals;
12  import static org.junit.jupiter.api.Assertions.assertInstanceOf;
13  import static org.junit.jupiter.api.Assertions.assertNotNull;
14  import static org.junit.jupiter.api.Assertions.assertSame;
15  
16  class DataObjectFactoryTest extends UnitTest {
17      private String defaultPayloadClass;
18      private String defaultPayloadExtractClass;
19  
20      @Override
21      @BeforeEach
22      public void setUp() throws Exception {
23          this.defaultPayloadClass = DataObjectFactory.getImplementingClass();
24          this.defaultPayloadExtractClass = DataObjectFactory.getImplementingExtractClass();
25      }
26  
27      @Override
28      @AfterEach
29      public void tearDown() throws Exception {
30          super.tearDown();
31          DataObjectFactory.setImplementingClass(this.defaultPayloadClass);
32          DataObjectFactory.setImplementingExtractClass(this.defaultPayloadExtractClass);
33      }
34  
35      /**
36       * Test configuration
37       */
38      @Test
39      void testFactory() {
40          final IBaseDataObject d = DataObjectFactory.getInstance();
41          assertNotNull(d, "DataObject created");
42          assertInstanceOf(IBaseDataObject.class, d, "Proper class hierarchy");
43  
44          final IExtractedRecord e = DataObjectFactory.getExtractInstance();
45          assertNotNull(e, "DataObject created");
46          assertInstanceOf(ExtractedRecord.class, e, "Proper class hierarchy");
47      }
48  
49      @Test
50      void testSetImpl() {
51          DataObjectFactory.setImplementingClass(MyDataObject.class.getName());
52          assertEquals(MyDataObject.class.getName(), DataObjectFactory.getImplementingClass(), "Impl class set");
53          final IBaseDataObject d = DataObjectFactory.getInstance();
54          assertNotNull(d, "DataObject created");
55          assertInstanceOf(BaseDataObject.class, d, "Proper class hierarchy");
56          assertInstanceOf(MyDataObject.class, d, "Proper class hierarchy");
57  
58          DataObjectFactory.setImplementingExtractClass(MyExtractObject.class.getName());
59          assertEquals(MyExtractObject.class.getName(), DataObjectFactory.getImplementingExtractClass(), "Impl class set");
60          final IExtractedRecord e = DataObjectFactory.getExtractInstance();
61          assertNotNull(e, "DataObject created");
62          assertInstanceOf(BaseDataObject.class, e, "Proper class hierarchy");
63          assertInstanceOf(ExtractedRecord.class, e, "Proper class hierarchy");
64          assertInstanceOf(MyExtractObject.class, e, "Proper class hierarchy");
65      }
66  
67      @Test
68      void testWithArgs() {
69          final Object[] args = new Object[] {"This is a test".getBytes(), "TestItem"};
70          DataObjectFactory.setImplementingClass(MyDataObject.class.getName());
71          final IBaseDataObject d = DataObjectFactory.getInstance(args);
72          assertNotNull(d, "DataObject created");
73  
74          DataObjectFactory.setImplementingExtractClass(MyExtractObject.class.getName());
75          final IExtractedRecord e = DataObjectFactory.getExtractInstance(args);
76          assertNotNull(e, "DataObject created");
77      }
78  
79      @Test
80      void testWtihFullSet() {
81          byte[] testPayload = "This is a test".getBytes();
82          IBaseDataObject ibdo = DataObjectFactory.getInstance(testPayload, "filename", "form", "type");
83          assertEquals("filename", ibdo.getFilename());
84          assertEquals("form", ibdo.currentForm());
85          assertEquals("type", ibdo.getFileType());
86          assertSame(testPayload, ibdo.data());
87  
88          IExtractedRecord extract = DataObjectFactory.getExtractInstance(testPayload, "filename", "form", "type");
89          assertEquals("filename", extract.getFilename());
90          assertEquals("form", extract.currentForm());
91          assertEquals("type", extract.getFileType());
92          assertSame(testPayload, extract.data());
93      }
94  
95      @Test
96      void testFormAndFileType() {
97          byte[] testPayload = "This is a test".getBytes();
98          IBaseDataObject ibdo = DataObjectFactory.getInstance(testPayload, "filename", "formAndFileType");
99          assertEquals("filename", ibdo.getFilename());
100         assertEquals("formAndFileType", ibdo.currentForm());
101         assertEquals("formAndFileType", ibdo.getFileType());
102         assertSame(testPayload, ibdo.data());
103 
104         IExtractedRecord extract = DataObjectFactory.getExtractInstance(testPayload, "filename", "formAndFileType");
105         assertEquals("filename", extract.getFilename());
106         assertEquals("formAndFileType", extract.currentForm());
107         assertEquals("formAndFileType", extract.getFileType());
108         assertSame(testPayload, extract.data());
109     }
110 
111     @Test
112     void testTLD() {
113         BaseDataObject tld = new BaseDataObject();
114         final byte[] data = "content".getBytes(StandardCharsets.UTF_8);
115         final String fileName = "aChild";
116         final String form = "UNKNOWN";
117         IBaseDataObject ibdo = DataObjectFactory.getInstance(data, fileName, form, tld);
118         assertEquals(fileName, ibdo.getFilename());
119         assertEquals(form, ibdo.currentForm());
120         assertNotNull(ibdo.getCreationTimestamp());
121         assertEquals(tld, ibdo.getTld());
122 
123         final String fileType = "TEXT";
124         ibdo = DataObjectFactory.getInstance(data, fileName, form, fileType, tld);
125         assertEquals(fileName, ibdo.getFilename());
126         assertEquals(form, ibdo.currentForm());
127         assertEquals(fileType, ibdo.getFileType());
128         assertNotNull(ibdo.getCreationTimestamp());
129         assertEquals(tld, ibdo.getTld());
130     }
131 
132     @SuppressWarnings("unused")
133     public static class MyDataObject extends BaseDataObject {
134         private static final long serialVersionUID = -2254597461746556210L;
135 
136         public MyDataObject() {
137             super();
138         }
139 
140         public MyDataObject(final byte[] data, final String name) {
141             super(data, name);
142         }
143     }
144 
145     @SuppressWarnings("unused")
146     public static class MyExtractObject extends ExtractedRecord {
147         private static final long serialVersionUID = -579253286374306668L;
148 
149         public MyExtractObject() {
150             super();
151         }
152 
153         public MyExtractObject(final byte[] data, final String name) {
154             super(data, name);
155         }
156     }
157 }