12555965851f22937989e36d48549a05e30e465c
[dcaegen2/collectors/hv-ves.git] / sources / hv-collector-ct / src / test / kotlin / org / onap / dcae / collectors / veshv / tests / fakes / metrics.kt
1 /*
2  * ============LICENSE_START=======================================================
3  * dcaegen2-collectors-veshv
4  * ================================================================================
5  * Copyright (C) 2018-2020 NOKIA
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dcae.collectors.veshv.tests.fakes
21
22 import org.onap.dcae.collectors.veshv.boundary.Metrics
23 import org.onap.dcae.collectors.veshv.domain.WireFrameMessage
24 import org.onap.dcae.collectors.veshv.model.ClientRejectionCause
25 import org.onap.dcae.collectors.veshv.model.MessageDropCause
26 import org.onap.dcae.collectors.veshv.domain.RoutedMessage
27 import org.onap.dcae.collectors.veshv.domain.VesMessage
28 import org.onap.dcae.collectors.veshv.utils.TimeUtils
29 import java.time.Duration
30 import java.time.Instant
31 import kotlin.test.fail
32
33 /**
34  * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
35  * @since June 2018
36  */
37 class FakeMetrics : Metrics {
38
39     var bytesReceived: Int = 0; private set
40     var messageBytesReceived: Int = 0; private set
41     var messagesDroppedCount: Int = 0; private set
42     var lastProcessingTimeMicros: Double = -1.0; private set
43     var lastProcessingTimeWithoutRoutingMicros: Double = -1.0; private set
44     var lastToCollectorTravelTime: Double = -1.0; private set
45     var messagesSentCount: Int = 0; private set
46     var clientRejectionCause = mutableMapOf<ClientRejectionCause, Int>(); private set
47
48     private val messagesSentToTopic = mutableMapOf<String, Int>()
49     private val messagesDroppedCause = mutableMapOf<MessageDropCause, Int>()
50
51     override fun notifyBytesReceived(size: Int) {
52         bytesReceived += size
53     }
54
55     override fun notifyMessageReceived(msg: WireFrameMessage) {
56         messageBytesReceived += msg.payloadSize
57     }
58
59     override fun notifyMessageReceived(msg: VesMessage) {
60         lastToCollectorTravelTime = Duration.between(TimeUtils.epochMicroToInstant(msg.header.lastEpochMicrosec),
61                 Instant.now()).toNanos() / 1000.0
62     }
63
64     override fun notifyMessageReadyForRouting(msg: VesMessage) {
65         lastProcessingTimeWithoutRoutingMicros = Duration.between(msg.wtpFrame.receivedAt, Instant.now()).toNanos() / 1000.0
66     }
67
68     override fun notifyMessageSent(msg: RoutedMessage) {
69         messagesSentCount++
70         messagesSentToTopic.compute(msg.targetTopic) { k, _ ->
71             messagesSentToTopic[k]?.inc() ?: 1
72         }
73         lastProcessingTimeMicros = Duration.between(msg.message.wtpFrame.receivedAt, Instant.now()).toNanos() / 1000.0
74     }
75
76     override fun notifyMessageDropped(cause: MessageDropCause) {
77         messagesDroppedCount++
78         messagesDroppedCause.compute(cause) { k, _ -> messagesDroppedCause[k]?.inc() ?: 1 }
79     }
80
81     override fun notifyClientRejected(cause: ClientRejectionCause) {
82         clientRejectionCause.compute(cause) { k, _ -> clientRejectionCause[k]?.inc() ?: 1 }
83     }
84
85     override fun notifyClientDisconnected() {
86     }
87
88     override fun notifyClientConnected() {
89     }
90
91     fun messagesOnTopic(topic: String) =
92             messagesSentToTopic[topic] ?: fail("No messages were sent to topic $topic")
93
94     fun messagesDropped(cause: MessageDropCause) =
95             messagesDroppedCause[cause]
96                     ?: fail("No messages were dropped due to cause: ${cause.name}")
97 }