1 package org.oransc.policyagent.aspect;
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;
10 import ch.qos.logback.classic.spi.ILoggingEvent;
11 import ch.qos.logback.core.read.ListAppender;
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;
24 @ExtendWith(MockitoExtension.class)
27 MockitoRule mockitoRule = MockitoJUnit.rule();
30 private ProceedingJoinPoint proceedingJoinPoint;
33 private MethodSignature methodSignature;
35 private LogAspect sampleAspect = new LogAspect();
38 void testExecutetimeTime_shouldLogTime() throws Throwable {
39 when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
40 when(methodSignature.getDeclaringType()).thenReturn(this.getClass());
42 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
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);
50 assertThat(logAppender.list.get(0).getFormattedMessage()).startsWith("Execution time of");
54 void testEntryLog_shouldLogEntry() throws Throwable {
55 when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
56 String signature = "signature";
57 when(methodSignature.getName()).thenReturn(signature);
59 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
61 sampleAspect.entryLog(proceedingJoinPoint);
63 assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("Entering method: " + signature);
67 void testExitLog_shouldLogExit() throws Throwable {
68 when(proceedingJoinPoint.getSignature()).thenReturn(methodSignature);
69 String signature = "signature";
70 when(methodSignature.getName()).thenReturn(signature);
72 final ListAppender<ILoggingEvent> logAppender = LoggingUtils.getLogListAppender(LogAspect.class, TRACE);
74 sampleAspect.exitLog(proceedingJoinPoint);
76 assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("Exiting method: " + signature);