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