View Javadoc
1   package emissary.util;
2   
3   import emissary.core.BaseDataObject;
4   import emissary.core.EmissaryRuntimeException;
5   import emissary.core.IBaseDataObject;
6   import emissary.test.core.junit5.UnitTest;
7   
8   import ch.qos.logback.classic.Level;
9   import ch.qos.logback.classic.Logger;
10  import ch.qos.logback.classic.spi.ILoggingEvent;
11  import ch.qos.logback.core.read.ListAppender;
12  import org.junit.jupiter.api.AfterEach;
13  import org.junit.jupiter.api.BeforeEach;
14  import org.junit.jupiter.api.Test;
15  import org.slf4j.LoggerFactory;
16  
17  import java.util.ArrayList;
18  import java.util.Collections;
19  import java.util.List;
20  import javax.annotation.Nullable;
21  
22  import static org.junit.jupiter.api.Assertions.assertEquals;
23  import static org.junit.jupiter.api.Assertions.assertNotNull;
24  import static org.junit.jupiter.api.Assertions.assertThrows;
25  import static org.junit.jupiter.api.Assertions.assertTrue;
26  
27  @SuppressWarnings("UnnecessaryLambda")
28  class DisposeHelperTest extends UnitTest {
29  
30      private static final Runnable FIRST = () -> LoggerFactory.getLogger("DisposeHelperRunnable").warn("DisposeHelperTestFirstRunnable");
31      private static final Runnable SECOND = () -> LoggerFactory.getLogger("DisposeHelperRunnable").warn("DisposeHelperTestSecondRunnable");
32      private static final Runnable THIRD = () -> LoggerFactory.getLogger("DisposeHelperRunnable").warn("DisposeHelperTestThirdRunnable");
33  
34      private static final Runnable THROWS = () -> {
35          throw new EmissaryRuntimeException("DisposeHelperTest");
36      };
37  
38      @Nullable
39      private ListAppender<ILoggingEvent> appender = null;
40      @SuppressWarnings("HidingField")
41      private final Logger logger = (Logger) LoggerFactory.getLogger(DisposeHelper.class);
42      private final Logger rLogger = (Logger) LoggerFactory.getLogger("DisposeHelperRunnable");
43  
44      private IBaseDataObject bdo;
45      private static final String TEST_BDO_NAME = "DisposeHelperTestBdo";
46  
47      @BeforeEach
48      void setup() {
49          appender = new ListAppender<>();
50          appender.start();
51          logger.addAppender(appender);
52          rLogger.addAppender(appender);
53          bdo = new BaseDataObject(new byte[0], TEST_BDO_NAME);
54      }
55  
56      @AfterEach
57      void detach() {
58          logger.detachAppender(appender);
59          rLogger.detachAppender(appender);
60      }
61  
62      @Test
63      void testInvalidRunnable() {
64          final List<Object> objectList = new ArrayList<>();
65          objectList.add(FIRST);
66          objectList.add("InvalidRunnable");
67          bdo.setParameter(DisposeHelper.KEY, objectList);
68  
69          DisposeHelper.execute(bdo);
70          assertNotNull(appender);
71          assertTrue(appender.list.stream()
72                  .anyMatch(i -> i.getLevel().equals(Level.WARN) &&
73                          i.getFormattedMessage().contains("Not a valid Runnable on object DisposeHelperTestBdo")));
74      }
75  
76      @Test
77      void testExecuteDisposable() {
78          DisposeHelper.set(bdo, FIRST);
79          DisposeHelper.execute(bdo);
80          assertNotNull(appender);
81          assertTrue(appender.list.stream()
82                  .anyMatch(i -> i.getFormattedMessage().contains("DisposeHelperTestFirstRunnable")));
83      }
84  
85      @Test
86      void testThrowsDisposable() {
87          DisposeHelper.set(bdo, THROWS);
88          DisposeHelper.execute(bdo);
89          assertNotNull(appender);
90          assertTrue(appender.list.stream()
91                  .anyMatch(i -> i.getLevel().equals(Level.WARN) &&
92                          i.getFormattedMessage().contains("Exception while executing Runnable for " + TEST_BDO_NAME)));
93      }
94  
95      @Test
96      void testSetNullDisposable() {
97          assertThrows(NullPointerException.class, () -> DisposeHelper.set(bdo, null));
98      }
99  
100     @Test
101     void testSetDisposable() {
102         assertEquals(0, DisposeHelper.get(bdo).size());
103         DisposeHelper.set(bdo, FIRST);
104         assertEquals(1, DisposeHelper.get(bdo).size());
105         assertEquals(FIRST, DisposeHelper.get(bdo).get(0));
106         DisposeHelper.set(bdo, SECOND);
107         assertEquals(1, DisposeHelper.get(bdo).size());
108         assertEquals(SECOND, DisposeHelper.get(bdo).get(0));
109     }
110 
111     @Test
112     void testAddDisposable() {
113         DisposeHelper.add(bdo, FIRST);
114         List<Runnable> lr = DisposeHelper.get(bdo);
115         assertEquals(1, lr.size());
116         assertEquals(FIRST, lr.get(0));
117 
118         DisposeHelper.add(bdo, SECOND);
119         lr = DisposeHelper.get(bdo);
120         assertEquals(2, lr.size());
121         assertEquals(SECOND, lr.get(1));
122     }
123 
124     @Test
125     void testAddListOfDisposable() {
126         final List<Runnable> runnableList = new ArrayList<>();
127         runnableList.add(FIRST);
128         runnableList.add(SECOND);
129         DisposeHelper.add(bdo, runnableList);
130         final List<Runnable> lr = DisposeHelper.get(bdo);
131         assertEquals(2, lr.size());
132         assertEquals(FIRST, lr.get(0));
133         assertEquals(SECOND, lr.get(1));
134     }
135 
136     @Test
137     void testAddToListOfDisposable() {
138         final List<Runnable> runnableList = new ArrayList<>();
139         runnableList.add(FIRST);
140         runnableList.add(SECOND);
141         DisposeHelper.add(bdo, runnableList);
142         List<Runnable> lr = DisposeHelper.get(bdo);
143         assertEquals(2, lr.size());
144         assertEquals(FIRST, lr.get(0));
145         assertEquals(SECOND, lr.get(1));
146 
147         DisposeHelper.add(bdo, THIRD);
148         lr = DisposeHelper.get(bdo);
149         assertEquals(3, DisposeHelper.get(bdo).size());
150         assertEquals(FIRST, lr.get(0));
151         assertEquals(SECOND, lr.get(1));
152         assertEquals(THIRD, lr.get(2));
153     }
154 
155     @Test
156     void testAddListToListOfDisposable() {
157         final List<Runnable> runnableList = new ArrayList<>();
158         runnableList.add(FIRST);
159         runnableList.add(SECOND);
160         DisposeHelper.add(bdo, runnableList);
161         List<Runnable> lr = DisposeHelper.get(bdo);
162         assertEquals(2, lr.size());
163         assertEquals(FIRST, lr.get(0));
164         assertEquals(SECOND, lr.get(1));
165 
166         DisposeHelper.add(bdo, Collections.singletonList(THIRD));
167         lr = DisposeHelper.get(bdo);
168         assertEquals(3, lr.size());
169         assertEquals(FIRST, lr.get(0));
170         assertEquals(SECOND, lr.get(1));
171         assertEquals(THIRD, lr.get(2));
172     }
173 }