Skip to content

Commit c3eb733

Browse files
committed
add tests
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 3ae4bcf commit c3eb733

File tree

2 files changed

+89
-4
lines changed

2 files changed

+89
-4
lines changed

server/src/main/java/com/cloud/alert/AlertManagerImpl.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.cloudstack.utils.mailing.SMTPMailProperties;
4949
import org.apache.cloudstack.utils.mailing.SMTPMailSender;
5050
import org.apache.commons.lang3.ArrayUtils;
51+
import org.apache.commons.lang3.StringUtils;
5152
import org.apache.commons.lang3.math.NumberUtils;
5253
import org.apache.logging.log4j.LogManager;
5354
import org.apache.logging.log4j.Logger;
@@ -233,14 +234,17 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
233234
return true;
234235
}
235236

236-
private void setupRepetitiveAlertTypes() {
237+
protected void setupRepetitiveAlertTypes() {
237238
allowedRepetitiveAlertTypes.clear();
238239
String allowedRepetitiveAlertsStr = AllowedRepetitiveAlertTypes.value();
239240
logger.trace("Allowed repetitive alert types specified by {}: {} ", AllowedRepetitiveAlertTypes.key(),
240241
allowedRepetitiveAlertsStr);
242+
if (StringUtils.isBlank(allowedRepetitiveAlertsStr)) {
243+
return;
244+
}
241245
String[] allowedRepetitiveAlertTypesArray = allowedRepetitiveAlertsStr.split(",");
242246
for (String alertTypeName : allowedRepetitiveAlertTypesArray) {
243-
AlertType type = AlertType.getAlertTypeByName(alertTypeName);
247+
AlertType type = AlertType.getAlertTypeByName(alertTypeName.trim());
244248
if (type == null) {
245249
logger.warn("Unknown alert type name: {}, skipping it.", alertTypeName);
246250
continue;
@@ -875,13 +879,12 @@ public boolean generateAlert(AlertType alertType, long dataCenterId, Long podId,
875879
}
876880

877881
@SuppressWarnings("unchecked")
878-
private void initMessageBusListener() {
882+
protected void initMessageBusListener() {
879883
messageBus.subscribe(EventTypes.EVENT_CONFIGURATION_VALUE_EDIT, (senderAddress, subject, args) -> {
880884
Ternary<String, ConfigKey.Scope, Long> updatedSetting = (Ternary<String, ConfigKey.Scope, Long>) args;
881885
String updatedSettingName = updatedSetting.first();
882886
if (!AllowedRepetitiveAlertTypes.key().equals(updatedSettingName)) {
883887
return;
884-
885888
}
886889
setupRepetitiveAlertTypes();
887890
});

server/src/test/java/com/cloud/alert/AlertManagerImplTest.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121

2222
import javax.mail.MessagingException;
2323

24+
import org.apache.cloudstack.alert.AlertService;
25+
import org.apache.cloudstack.framework.config.ConfigKey;
26+
import org.apache.cloudstack.framework.messagebus.MessageBus;
27+
import org.apache.cloudstack.framework.messagebus.MessageSubscriber;
2428
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
2529
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
2630
import org.apache.cloudstack.utils.mailing.SMTPMailSender;
@@ -35,6 +39,7 @@
3539
import org.mockito.Mockito;
3640
import org.mockito.Spy;
3741
import org.mockito.junit.MockitoJUnitRunner;
42+
import org.springframework.test.util.ReflectionTestUtils;
3843

3944
import com.cloud.alert.dao.AlertDao;
4045
import com.cloud.capacity.Capacity;
@@ -45,10 +50,12 @@
4550
import com.cloud.dc.dao.ClusterDao;
4651
import com.cloud.dc.dao.DataCenterDao;
4752
import com.cloud.dc.dao.HostPodDao;
53+
import com.cloud.event.EventTypes;
4854
import com.cloud.host.Host;
4955
import com.cloud.host.HostVO;
5056
import com.cloud.host.dao.HostDao;
5157
import com.cloud.storage.StorageManager;
58+
import com.cloud.utils.Ternary;
5259

5360
import static org.junit.Assert.assertEquals;
5461
import static org.junit.Assert.assertNotNull;
@@ -219,4 +226,79 @@ public void testRecalculateStorageCapacities() {
219226
Mockito.verify(storageManager, Mockito.times(2)).createCapacityEntry(sharedPool, Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED, 10L);
220227
Mockito.verify(storageManager, Mockito.times(1)).createCapacityEntry(nonSharedPool, Capacity.CAPACITY_TYPE_LOCAL_STORAGE, 20L);
221228
}
229+
230+
@Test
231+
public void initMessageBusListenerSubscribesToConfigurationEditEvent() {
232+
MessageBus messageBusMock = Mockito.mock(MessageBus.class);
233+
alertManagerImplMock.messageBus = messageBusMock;
234+
alertManagerImplMock.initMessageBusListener();
235+
Mockito.verify(messageBusMock).subscribe(Mockito.eq(EventTypes.EVENT_CONFIGURATION_VALUE_EDIT), Mockito.any());
236+
}
237+
238+
@Test
239+
public void initMessageBusListenerTriggersSetupRepetitiveAlertTypesOnAllowedKeyEdit() {
240+
MessageBus messageBusMock = Mockito.mock(MessageBus.class);
241+
alertManagerImplMock.messageBus = messageBusMock;
242+
alertManagerImplMock.initMessageBusListener();
243+
ArgumentCaptor<MessageSubscriber> captor = ArgumentCaptor.forClass(MessageSubscriber.class);
244+
Mockito.verify(messageBusMock).subscribe(Mockito.eq(EventTypes.EVENT_CONFIGURATION_VALUE_EDIT), captor.capture());
245+
Ternary<String, ConfigKey.Scope, Long> args = new Ternary<>(AlertManager.AllowedRepetitiveAlertTypes.key(), ConfigKey.Scope.Global, 1L);
246+
captor.getValue().onPublishMessage(null, null, args);
247+
Mockito.verify(alertManagerImplMock).setupRepetitiveAlertTypes();
248+
}
249+
250+
@Test
251+
public void initMessageBusListenerDoesNotTriggerSetupRepetitiveAlertTypesOnOtherKeyEdit() {
252+
MessageBus messageBusMock = Mockito.mock(MessageBus.class);
253+
alertManagerImplMock.messageBus = messageBusMock;
254+
alertManagerImplMock.initMessageBusListener();
255+
ArgumentCaptor<MessageSubscriber> captor = ArgumentCaptor.forClass(MessageSubscriber.class);
256+
Mockito.verify(messageBusMock).subscribe(Mockito.eq(EventTypes.EVENT_CONFIGURATION_VALUE_EDIT), captor.capture());
257+
Ternary<String, ConfigKey.Scope, Long> args = new Ternary<>("some.other.key", ConfigKey.Scope.Global, 1L);
258+
captor.getValue().onPublishMessage(null, null, args);
259+
Mockito.verify(alertManagerImplMock, Mockito.never()).setupRepetitiveAlertTypes();
260+
}
261+
262+
private void mockAllowedRepetitiveAlertTypesConfigKey(String value) {
263+
ReflectionTestUtils.setField(AlertManager.AllowedRepetitiveAlertTypes, "_defaultValue", value);
264+
}
265+
266+
@Test
267+
public void setupRepetitiveAlertTypesParsesValidAlertTypesCorrectly() {
268+
mockAllowedRepetitiveAlertTypesConfigKey("ALERT.CPU,ALERT.MEMORY");
269+
alertManagerImplMock.setupRepetitiveAlertTypes();
270+
List<AlertService.AlertType> expectedTypes = (List<AlertService.AlertType>)ReflectionTestUtils.getField(alertManagerImplMock, "allowedRepetitiveAlertTypes");
271+
Assert.assertNotNull(expectedTypes);
272+
Assert.assertEquals(2, expectedTypes.size());
273+
Assert.assertTrue(expectedTypes.contains(AlertManager.AlertType.ALERT_TYPE_CPU));
274+
Assert.assertTrue(expectedTypes.contains(AlertManager.AlertType.ALERT_TYPE_MEMORY));
275+
}
276+
277+
@Test
278+
public void setupRepetitiveAlertTypesHandlesEmptyConfigValue() {
279+
mockAllowedRepetitiveAlertTypesConfigKey("");
280+
alertManagerImplMock.setupRepetitiveAlertTypes();
281+
List<AlertService.AlertType> expectedTypes = (List<AlertService.AlertType>)ReflectionTestUtils.getField(alertManagerImplMock, "allowedRepetitiveAlertTypes");
282+
Assert.assertNotNull(expectedTypes);
283+
Assert.assertTrue(expectedTypes.isEmpty());
284+
}
285+
286+
@Test
287+
public void setupRepetitiveAlertTypesIgnoresUnknownAlertTypes() {
288+
mockAllowedRepetitiveAlertTypesConfigKey("ALERT.CPU,UNKNOWN_ALERT_TYPE");
289+
alertManagerImplMock.setupRepetitiveAlertTypes();
290+
List<AlertService.AlertType> expectedTypes = (List<AlertService.AlertType>)ReflectionTestUtils.getField(alertManagerImplMock, "allowedRepetitiveAlertTypes");
291+
Assert.assertNotNull(expectedTypes);
292+
Assert.assertEquals(1, expectedTypes.size());
293+
Assert.assertTrue(expectedTypes.contains(AlertManager.AlertType.ALERT_TYPE_CPU));
294+
}
295+
296+
@Test
297+
public void setupRepetitiveAlertTypesHandlesNullConfigValue() {
298+
mockAllowedRepetitiveAlertTypesConfigKey(null);
299+
alertManagerImplMock.setupRepetitiveAlertTypes();
300+
List<AlertService.AlertType> expectedTypes = (List<AlertService.AlertType>)ReflectionTestUtils.getField(alertManagerImplMock, "allowedRepetitiveAlertTypes");
301+
Assert.assertNotNull(expectedTypes);
302+
Assert.assertTrue(expectedTypes.isEmpty());
303+
}
222304
}

0 commit comments

Comments
 (0)