Moving and Renaming eexisting subscription impl
[cps.git] / cps-service / src / test / groovy / org / onap / cps / notification / NotificationErrorHandlerSpec.groovy
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2022-2023 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  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.cps.notification
21
22 import ch.qos.logback.classic.Logger
23 import ch.qos.logback.classic.spi.ILoggingEvent
24 import ch.qos.logback.core.read.ListAppender
25 import org.junit.jupiter.api.AfterEach
26 import org.junit.jupiter.api.BeforeEach
27 import org.slf4j.LoggerFactory
28
29 import spock.lang.Specification
30
31 class NotificationErrorHandlerSpec extends Specification{
32
33     NotificationErrorHandler objectUnderTest = new NotificationErrorHandler()
34     def logWatcher = Spy(ListAppender<ILoggingEvent>)
35
36     @BeforeEach
37     void setup() {
38         ((Logger) LoggerFactory.getLogger(NotificationErrorHandler.class)).addAppender(logWatcher);
39         logWatcher.start();
40     }
41
42     @AfterEach
43     void teardown() {
44         ((Logger) LoggerFactory.getLogger(NotificationErrorHandler.class)).detachAndStopAllAppenders();
45     }
46
47     def 'Logging exception via notification error handler #scenario'() {
48         when: 'exception #scenario occurs'
49             objectUnderTest.onException(exception, 'some context')
50         then: 'log output results contains the correct error details'
51             def logMessage = logWatcher.list[0].getFormattedMessage()
52             assert logMessage.contains('Failed to process')
53             assert logMessage.contains("Error cause: ${exptectedCauseString}")
54             assert logMessage.contains("Error context: [some context]")
55         where:
56             scenario        | exception                                               || exptectedCauseString
57             'with cause'    | new Exception('message')                                || 'message'
58             'without cause' | new Exception('message', new RuntimeException('cause')) || 'java.lang.RuntimeException: cause'
59     }
60 }