/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ambari.server.notifications.dispatchers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.apache.ambari.server.notifications.DispatchCallback; import org.apache.ambari.server.notifications.Notification; import org.apache.ambari.server.notifications.NotificationDispatcher; import org.apache.ambari.server.notifications.Recipient; import org.apache.ambari.server.notifications.TargetConfigurationResult; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.Target; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.VariableBinding; public class SNMPDispatcherTest { private static final int DEFAULT_SNMP_PORT = 31444; @Test public void testDispatch_nullProperties() throws Exception { SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatchUdpTransportMappingCrash() throws Exception { SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT)); SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv1; Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = Arrays.asList(new Recipient()); doThrow(new IOException()).when(dispatcher).sendTraps(notification, snmpVersion); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); assertNull(dispatcher.getTransportMapping()); } @Test public void testDispatch_notDefinedProperties() throws Exception { SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); notification.DispatchProperties = new HashMap<>(); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatch_nullRecipients() throws Exception { SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatch_noRecipients() throws Exception { SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = new ArrayList<>(); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatch_sendTrapError() throws Exception { SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT)); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = Arrays.asList(new Recipient()); doThrow(new RuntimeException()).when(dispatcher).sendTraps(eq(notification), any(SNMPDispatcher.SnmpVersion.class)); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatch_incorrectSnmpVersion() throws Exception { SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT)); Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv11"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = Arrays.asList(new Recipient()); dispatcher.dispatch(notification); verify(notification.Callback).onFailure(notification.CallbackIds); verify(notification.Callback, never()).onSuccess(notification.CallbackIds); } @Test public void testDispatch_successful_v1() throws Exception { SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT)); SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv1; Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = Arrays.asList(new Recipient()); doNothing().when(dispatcher).sendTraps(notification, snmpVersion); dispatcher.dispatch(notification); verify(notification.Callback, never()).onFailure(notification.CallbackIds); verify(notification.Callback).onSuccess(notification.CallbackIds); } @Test public void testDispatch_successful_v2() throws Exception { SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT)); SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv2c; Notification notification = mock(Notification.class); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "3"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv2c"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; notification.Recipients = Arrays.asList(new Recipient()); doNothing().when(dispatcher).sendTraps(notification, snmpVersion); dispatcher.dispatch(notification); verify(notification.Callback, never()).onFailure(notification.CallbackIds); verify(notification.Callback).onSuccess(notification.CallbackIds); } @Test public void testDispatch_successful_v3() throws Exception { SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = new Notification(); notification.Callback = mock(DispatchCallback.class); notification.CallbackIds = new ArrayList<>(); notification.Body = "body"; notification.Subject = "subject"; Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_PRIV_PASSPHRASE_PROPERTY, "PASSPHRASE2"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_NOPRIV"); notification.DispatchProperties = properties; Recipient recipient = new Recipient(); recipient.Identifier = "192.168.0.2"; notification.Recipients = Arrays.asList(recipient); dispatcher.dispatch(notification); verify(notification.Callback, never()).onFailure(notification.CallbackIds); verify(notification.Callback).onSuccess(notification.CallbackIds); } @Test public void testPrepareTrap_v1() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv1; SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "3"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; PDU pdu = dispatcher.prepareTrap(notification, snmpVersion); assertEquals(PDU.V1TRAP, pdu.getType()); Map<String, VariableBinding> variableBindings = new HashMap<>(); for (VariableBinding variableBinding : pdu.toArray()) { variableBindings.put(variableBinding.getOid().toString(), variableBinding); } assertEquals(3, variableBindings.size()); assertEquals("subject", variableBindings.get("1").toValueString()); assertEquals("body", variableBindings.get("2").toValueString()); assertEquals("3", variableBindings.get(SnmpConstants.snmpTrapOID.toString()).toValueString()); } @Test public void testPrepareTrap_v2c() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv2c; SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "4"); notification.DispatchProperties = properties; notification.Body = "body"; notification.Subject = "subject"; PDU pdu = dispatcher.prepareTrap(notification, snmpVersion); assertEquals(PDU.TRAP, pdu.getType()); Map<String, VariableBinding> variableBindings = new HashMap<>(); for (VariableBinding variableBinding : pdu.toArray()) { variableBindings.put(variableBinding.getOid().toString(), variableBinding); } assertEquals(3, variableBindings.size()); assertEquals("subject", variableBindings.get("1").toValueString()); assertEquals("body", variableBindings.get("2").toValueString()); assertEquals("4", variableBindings.get(SnmpConstants.snmpTrapOID.toString()).toValueString()); } @Test public void testSendTraps_v1() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv1; Snmp snmp = mock(Snmp.class); SNMPDispatcher dispatcher = spy(new SNMPDispatcher(snmp)); PDU trap = mock(PDU.class); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); notification.DispatchProperties = properties; Recipient rec1 = new Recipient(); rec1.Identifier = "192.168.0.2"; notification.Recipients = Arrays.asList(rec1); doReturn(trap).when(dispatcher).prepareTrap(notification, snmpVersion); dispatcher.sendTraps(notification, snmpVersion); ArgumentCaptor<Target> argument = ArgumentCaptor.forClass(Target.class); verify(snmp, times(1)).send(eq(trap), argument.capture()); assertEquals("192.168.0.2/162", argument.getValue().getAddress().toString()); assertEquals(SnmpConstants.version1, argument.getValue().getVersion()); } @Test public void testSendTraps_v2() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv2c; Snmp snmp = mock(Snmp.class); SNMPDispatcher dispatcher = spy(new SNMPDispatcher(snmp)); PDU trap = mock(PDU.class); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); notification.DispatchProperties = properties; Recipient rec1 = new Recipient(); rec1.Identifier = "192.168.0.2"; notification.Recipients = Arrays.asList(rec1); doReturn(trap).when(dispatcher).prepareTrap(notification, snmpVersion); dispatcher.sendTraps(notification, snmpVersion); ArgumentCaptor<Target> argument = ArgumentCaptor.forClass(Target.class); verify(snmp, times(1)).send(eq(trap), argument.capture()); assertEquals("192.168.0.2/162", argument.getValue().getAddress().toString()); assertEquals(SnmpConstants.version2c, argument.getValue().getVersion()); } @Test public void testSendTraps_v3() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv3; Snmp snmp = mock(Snmp.class); SNMPDispatcher dispatcher = spy(new SNMPDispatcher(snmp)); PDU trap = mock(PDU.class); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_PRIV_PASSPHRASE_PROPERTY, "PASSPHRASE2"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_NOPRIV"); notification.DispatchProperties = properties; Recipient rec1 = new Recipient(); rec1.Identifier = "192.168.0.2"; notification.Recipients = Arrays.asList(rec1); doReturn(trap).when(dispatcher).prepareTrap(notification, snmpVersion); dispatcher.sendTraps(notification, snmpVersion); ArgumentCaptor<Target> argument = ArgumentCaptor.forClass(Target.class); verify(snmp, times(1)).send(eq(trap), argument.capture()); assertEquals("192.168.0.2/162", argument.getValue().getAddress().toString()); assertEquals(SnmpConstants.version3, argument.getValue().getVersion()); } @Test(expected = SNMPDispatcher.InvalidSnmpConfigurationException.class) public void testSendTraps_v3_incorrectSecurityLevelVersion() throws Exception { SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv3; Snmp snmp = mock(Snmp.class); SNMPDispatcher dispatcher = spy(new SNMPDispatcher(snmp)); PDU trap = mock(PDU.class); Notification notification = new Notification(); Map<String, String> properties = new HashMap<>(); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_PRIV_PASSPHRASE_PROPERTY, "PASSPHRASE2"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "INCORRECT"); notification.DispatchProperties = properties; Recipient rec1 = new Recipient(); rec1.Identifier = "192.168.0.2"; notification.Recipients = Arrays.asList(rec1); doReturn(trap).when(dispatcher).prepareTrap(notification, snmpVersion); dispatcher.sendTraps(notification, snmpVersion); } @Test public void testValidateAlertValidation_SNMPv1() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.VALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_incorrectSNMPversion() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv4"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv1_invalid() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv2c() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv2c"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "public"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.VALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv2c_invalid() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv2c"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_incorrectSecurityLevel() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_PRIV_PASSPHRASE_PROPERTY, "PASSPHRASE2"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "INCORRECT"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_noAuthNoPriv() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "NOAUTH_NOPRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.VALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_AuthNoPriv_valid() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_NOPRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.VALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_AuthNoPriv_invalid() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_NOPRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_AuthPriv_valid() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_PRIV_PASSPHRASE_PROPERTY, "PASSPHRASE2"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_PRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.VALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_AuthPriv_noPassphrases() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_PRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } @Test public void testValidateAlertValidation_SNMPv3_AuthPriv_onlyAuthPassphrase() throws Exception { Map<String, Object> properties = new HashMap<>(); properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1"); properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2"); properties.put(SNMPDispatcher.PORT_PROPERTY, "162"); properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv3"); properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4"); properties.put(SNMPDispatcher.SECURITY_USERNAME_PROPERTY, "USER"); properties.put(SNMPDispatcher.SECURITY_AUTH_PASSPHRASE_PROPERTY, "PASSPHRASE1"); properties.put(SNMPDispatcher.SECURITY_LEVEL_PROPERTY, "AUTH_PRIV"); NotificationDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT); TargetConfigurationResult configValidationResult = dispatcher.validateTargetConfig(properties); assertEquals(TargetConfigurationResult.Status.INVALID, configValidationResult.getStatus()); } }