-
Notifications
You must be signed in to change notification settings - Fork 775
/
SimpleLogRecordProcessorTest.java
129 lines (103 loc) · 4.56 KB
/
SimpleLogRecordProcessorTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.logs.export;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyCollection;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import io.opentelemetry.context.Context;
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
import io.opentelemetry.sdk.common.CompletableResultCode;
import io.opentelemetry.sdk.logs.LogRecordProcessor;
import io.opentelemetry.sdk.logs.ReadWriteLogRecord;
import io.opentelemetry.sdk.logs.data.LogRecordData;
import io.opentelemetry.sdk.testing.logs.TestLogRecordData;
import java.util.Collections;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class SimpleLogRecordProcessorTest {
private static final LogRecordData LOG_RECORD_DATA = TestLogRecordData.builder().build();
@Mock private LogRecordExporter logRecordExporter;
@Mock private ReadWriteLogRecord readWriteLogRecord;
private LogRecordProcessor logRecordProcessor;
@BeforeEach
void setUp() {
logRecordProcessor = SimpleLogRecordProcessor.create(logRecordExporter);
when(logRecordExporter.export(anyCollection())).thenReturn(CompletableResultCode.ofSuccess());
when(logRecordExporter.shutdown()).thenReturn(CompletableResultCode.ofSuccess());
when(readWriteLogRecord.toLogRecordData()).thenReturn(LOG_RECORD_DATA);
}
@Test
void create_NullExporter() {
assertThatThrownBy(() -> SimpleLogRecordProcessor.create(null))
.isInstanceOf(NullPointerException.class)
.hasMessage("exporter");
}
@Test
void onEmit() {
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
verify(logRecordExporter).export(Collections.singletonList(LOG_RECORD_DATA));
}
@Test
@SuppressLogger(SimpleLogRecordProcessor.class)
void onEmit_ExporterError() {
when(logRecordExporter.export(any())).thenThrow(new RuntimeException("Exporter error!"));
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
verify(logRecordExporter, times(2)).export(anyList());
}
@Test
void forceFlush() {
CompletableResultCode export1 = new CompletableResultCode();
CompletableResultCode export2 = new CompletableResultCode();
when(logRecordExporter.export(any())).thenReturn(export1, export2);
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
verify(logRecordExporter, times(2)).export(Collections.singletonList(LOG_RECORD_DATA));
CompletableResultCode flush = logRecordProcessor.forceFlush();
assertThat(flush.isDone()).isFalse();
export1.succeed();
assertThat(flush.isDone()).isFalse();
export2.succeed();
assertThat(flush.isDone()).isTrue();
assertThat(flush.isSuccess()).isTrue();
}
@Test
void shutdown() {
CompletableResultCode export1 = new CompletableResultCode();
CompletableResultCode export2 = new CompletableResultCode();
when(logRecordExporter.export(any())).thenReturn(export1, export2);
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
logRecordProcessor.onEmit(Context.current(), readWriteLogRecord);
verify(logRecordExporter, times(2)).export(Collections.singletonList(LOG_RECORD_DATA));
CompletableResultCode shutdown = logRecordProcessor.shutdown();
assertThat(shutdown.isDone()).isFalse();
export1.succeed();
assertThat(shutdown.isDone()).isFalse();
verify(logRecordExporter, never()).shutdown();
export2.succeed();
assertThat(shutdown.isDone()).isTrue();
assertThat(shutdown.isSuccess()).isTrue();
verify(logRecordExporter).shutdown();
}
@Test
void toString_Valid() {
when(logRecordExporter.toString()).thenReturn("MockLogRecordExporter");
assertThat(logRecordProcessor.toString())
.isEqualTo("SimpleLogRecordProcessor{logRecordExporter=MockLogRecordExporter}");
}
}