Improve logging in NCMP
[cps.git] / cps-service / src / test / groovy / org / onap / cps / aop / CpsLoggingAspectServiceSpec.groovy
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2022 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.cps.aop
22
23 import org.aspectj.lang.ProceedingJoinPoint
24 import org.aspectj.lang.reflect.MethodSignature
25 import org.onap.cps.spi.exceptions.DataValidationException
26 import spock.lang.Specification
27 import java.util.logging.Level
28 import java.util.logging.Logger
29
30 class CpsLoggingAspectServiceSpec extends Specification {
31
32     private static final Logger logger = Logger.getLogger("org.onap.cps")
33
34     def mockProceedingJoinPoint = Mock(ProceedingJoinPoint)
35     def mockMethodSignature = Mock(MethodSignature);
36     def objectUnderTest = new CpsLoggingAspectService()
37
38     def setup() {
39         mockMethodSignature.getDeclaringType() >> this.getClass()
40         mockMethodSignature.getDeclaringType().getSimpleName() >> 'CpsLoggingAspectServiceSpec'
41         mockMethodSignature.getName() >> 'logMethodExecutionTime'
42         mockProceedingJoinPoint.getSignature() >> mockMethodSignature
43     }
44
45     def 'Log method execution time for log level : #logLevel.'() {
46         given: 'mock valid pointcut arguments and set log level to #logLevel'
47             mockProceedingJoinPoint.getArgs() >> 'dataspace-name'
48             logger.setLevel(logLevel)
49         when: 'aop intercepts cps method'
50             objectUnderTest.logMethodExecutionTime(mockProceedingJoinPoint)
51         then: 'expected number of method execution'
52             expectedNumberOfMethodExecution * mockMethodSignature.getName()
53         where: 'the following log levels are used'
54             logLevel     || expectedNumberOfMethodExecution
55             Level.INFO   || 0
56             Level.FINE   || 1
57             Level.FINEST || 1
58     }
59
60     def 'Exception thrown during method execution.'() {
61         given: 'some exception is created'
62             mockProceedingJoinPoint.proceed() >> { throw new Exception("some exception") }
63         when: 'aop intercepts cps method and start calculation of time'
64             objectUnderTest.logMethodExecutionTime(mockProceedingJoinPoint)
65         then: 'some exception is thrown'
66             thrown Exception
67     }
68 }