-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
CeTasksMBeanImplTest.java
157 lines (131 loc) · 4.68 KB
/
CeTasksMBeanImplTest.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
* SonarQube
* Copyright (C) 2009-2017 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.ce.monitoring;
import java.lang.management.ManagementFactory;
import javax.annotation.CheckForNull;
import javax.management.InstanceNotFoundException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import org.junit.Test;
import org.sonar.ce.configuration.CeConfiguration;
import org.sonar.process.systeminfo.protobuf.ProtobufSystemInfo;
import static org.assertj.core.api.Assertions.assertThat;
public class CeTasksMBeanImplTest {
private static final long PENDING_COUNT = 2;
private static final long IN_PROGRESS_COUNT = 5;
private static final long ERROR_COUNT = 10;
private static final long SUCCESS_COUNT = 13;
private static final long PROCESSING_TIME = 987;
private static final int WORKER_COUNT = 56;
private CeTasksMBeanImpl underTest = new CeTasksMBeanImpl(new DumbCEQueueStatus(), new DumbCeConfiguration());
@Test
public void register_and_unregister() throws Exception {
assertThat(getMBean()).isNull();
underTest.start();
assertThat(getMBean()).isNotNull();
underTest.stop();
assertThat(getMBean()).isNull();
}
@Test
public void get_methods_delegate_to_the_CEQueueStatus_instance() {
assertThat(underTest.getPendingCount()).isEqualTo(PENDING_COUNT);
assertThat(underTest.getInProgressCount()).isEqualTo(IN_PROGRESS_COUNT);
assertThat(underTest.getErrorCount()).isEqualTo(ERROR_COUNT);
assertThat(underTest.getSuccessCount()).isEqualTo(SUCCESS_COUNT);
assertThat(underTest.getProcessingTime()).isEqualTo(PROCESSING_TIME);
}
@Test
public void getWorkerCount_delegates_to_the_CEConfiguration_instance() {
assertThat(underTest.getWorkerCount()).isEqualTo(WORKER_COUNT);
}
@Test
public void export_system_info() {
ProtobufSystemInfo.Section section = underTest.toProtobuf();
assertThat(section.getName()).isEqualTo("Compute Engine Tasks");
assertThat(section.getAttributesCount()).isEqualTo(6);
}
/**
* Dumb implementation of CEQueueStatus which returns constant values for get methods and throws UnsupportedOperationException
* for other methods.
*/
private static class DumbCEQueueStatus implements CEQueueStatus {
@Override
public long getPendingCount() {
return PENDING_COUNT;
}
@Override
public long addInProgress() {
return methodNotImplemented();
}
@Override
public long getInProgressCount() {
return IN_PROGRESS_COUNT;
}
@Override
public long addError(long processingTime) {
return methodNotImplemented();
}
@Override
public long getErrorCount() {
return ERROR_COUNT;
}
@Override
public long addSuccess(long processingTime) {
return methodNotImplemented();
}
@Override
public long getSuccessCount() {
return SUCCESS_COUNT;
}
@Override
public long getProcessingTime() {
return PROCESSING_TIME;
}
private long methodNotImplemented() {
throw new UnsupportedOperationException("Not Implemented");
}
}
private static class DumbCeConfiguration implements CeConfiguration {
@Override
public int getWorkerCount() {
return WORKER_COUNT;
}
@Override
public long getQueuePollingDelay() {
throw new UnsupportedOperationException("getQueuePollingDelay is not implemented");
}
@Override
public long getCleanCeTasksInitialDelay() {
throw new UnsupportedOperationException("getCleanCeTasksInitialDelay is not implemented");
}
@Override
public long getCleanCeTasksDelay() {
throw new UnsupportedOperationException("getCleanCeTasksDelay is not implemented");
}
}
@CheckForNull
private ObjectInstance getMBean() throws Exception {
try {
return ManagementFactory.getPlatformMBeanServer().getObjectInstance(new ObjectName(CeTasksMBean.OBJECT_NAME));
} catch (InstanceNotFoundException e) {
return null;
}
}
}