Merge "Make assertions of log messages better"
[nonrtric.git] / policy-agent / src / test / java / org / oransc / policyagent / aspect / LogAspectTest.java
1 package org.oransc.policyagent.aspect;
2
3 import static ch.qos.logback.classic.Level.TRACE;
4 import static org.assertj.core.api.Assertions.assertThat;
5 import static org.mockito.Mockito.never;
6 import static org.mockito.Mockito.times;
7 import static org.mockito.Mockito.verify;
8 import static org.mockito.Mockito.when;
9
10 import ch.qos.logback.classic.spi.ILoggingEvent;
11 import ch.qos.logback.core.read.ListAppender;
12
13 import org.aspectj.lang.ProceedingJoinPoint;
14 import org.aspectj.lang.reflect.MethodSignature;
15 import org.junit.Rule;
16 import org.junit.jupiter.api.Test;
17 import org.junit.jupiter.api.extension.ExtendWith;
18 import org.mockito.Mock;
19 import org.mockito.junit.MockitoJUnit;
20 import org.mockito.junit.MockitoRule;
21 import org.mockito.junit.jupiter.MockitoExtension;
22 import org.oransc.policyagent.utils.LoggingUtils;
23
24 @ExtendWith(MockitoExtension.class)
25 class LogAspectTest {
26     @Rule
27     MockitoRule mockitoRule = MockitoJUnit.rule();
28
29     @Mock
30     private ProceedingJoinPoint proceedingJoinPoint;
31
32     @Mock
33     private MethodSignature methodSignature;
34
35     private LogAspect sampleAspect = new LogAspect();
36
37     @Test
38     void testExecutetimeTime_shouldLogTime() throws Throwable {
39         when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
40         when(methodSignature.getDeclaringType()).thenReturn(this.getClass());
41
42         final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
43
44         sampleAspect.executimeTime(proceedingJoinPoint);
45         // 'proceed()' is called exactly once
46         verify(proceedingJoinPoint, times(1)).proceed();
47         // 'proceed(Object[])' is never called
48         verify(proceedingJoinPoint, never()).proceed(null);
49
50         assertThat(logAppender.list.get(0).getFormattedMessage()).startsWith("Execution time of");
51     }
52
53     @Test
54     void testEntryLog_shouldLogEntry() throws Throwable {
55         when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
56         String signature = "signature";
57         when(methodSignature.getName()).thenReturn(signature);
58
59         final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
60
61         sampleAspect.entryLog(proceedingJoinPoint);
62
63         assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("Entering method: " + signature);
64     }
65
66     @Test
67     void testExitLog_shouldLogExit() throws Throwable {
68         when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
69         String signature = "signature";
70         when(methodSignature.getName()).thenReturn(signature);
71
72         final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
73
74         sampleAspect.exitLog(proceedingJoinPoint);
75
76         assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("Exiting method: " + signature);
77     }
78 }