/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.cimadapter.connections.cim; import java.util.ArrayList; import javax.cim.CIMDataType; import javax.cim.CIMInstance; import javax.cim.CIMObjectPath; import javax.cim.CIMProperty; import org.junit.Assert; import org.junit.Test; import com.emc.storageos.cimadapter.connections.ecom.EcomConnection; import com.emc.storageos.cimadapter.consumers.CimIndicationConsumer; import com.emc.storageos.cimadapter.consumers.CimIndicationConsumerList; import com.emc.storageos.cimadapter.processors.CimIndicationProcessor; import com.emc.storageos.services.util.EnvConfig; /** * JUnit test enum for {@link CimListener}. */ public class CimListenerTest { private static final String ALERT_INDICATION_CLASS_NAME = "OSLS_AlertIndication"; private static final String ALERTING_MANGED_ELEMENT_KEY = "AlertingManagedElement"; private static final String ALERTING_MANGED_ELEMENT_VALUE = "//169.254.165.97/root/emc:clar_storagesystem.CreationClassName=\"Clar_StorageSystem\",Name=\"CLARiiON+APM00120400480\""; private static final int LISTENER_QUEUE_SIZE = 1000; private static final String UNIT_TEST_CONFIG_FILE = "sanity"; private static final String providerIP = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.host.ipaddress"); private static final String providerPortStr = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.host.port"); private static final int providerPort = Integer.parseInt(providerPortStr); private static final String providerUser = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.host.username"); private static final String providerPassword = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.host.password"); private static final String providerUseSsl = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.usessl"); private static final String providerNamespace = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.namespace"); private static final String providerInterOpNamespace = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.interop.namespace"); private static boolean isProviderSslEnabled = Boolean.parseBoolean(providerUseSsl); private static final String LISTENER_IP = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.listener.ipaddress"); private static final String LISTENER_PROTOCOL = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.listener.protocol"); private static final String LISTENER_PORT_STR = EnvConfig.get(UNIT_TEST_CONFIG_FILE, "smis.listener.port"); private static final int LISTENER_PORT = Integer.parseInt(LISTENER_PORT_STR); // Connection reference private EcomConnection _connection = null; /** * Tests the testIndicationOccurred method. */ @Test public void testIndicationOccurred() { // Create the listener info. CimListenerInfo listenerInfo = new CimListenerInfo(); listenerInfo.setHostIP(LISTENER_IP); listenerInfo.setPort(LISTENER_PORT); listenerInfo.setProtocol(LISTENER_PROTOCOL); listenerInfo.setQueueSize(LISTENER_QUEUE_SIZE); // Create the consumers list. ArrayList<CimIndicationConsumer> consumers = new ArrayList<CimIndicationConsumer>(); TestIndicationConsumer consumer = new TestIndicationConsumer(); consumer.setUseDefaultProcessor(true); TestIndicationProcessor processor = new TestIndicationProcessor(); consumer.setIndicationProcessor(processor); consumers.add(consumer); // Create the listener. CimListener listener = new CimListener(listenerInfo, new CimIndicationConsumerList(consumers)); // Create and register a connection with the listener. boolean wasException = false; try { _connection = new EcomConnection(createConnectionInfo(), listener, new CimFilterMap()); } catch (Exception e) { wasException = true; } Assert.assertFalse(wasException); listener.register(_connection); // Create an indication to be consumed. CIMInstance instance = createAlertIndication(); // Inform the listener that an indication occurred. String url = "http://foo/" + _connection.getConnectionName(); listener.indicationOccured(url, instance); // Assert that when the indication occurs the indication is processed // and consumed. Assert.assertTrue(processor._indicationProcessed); Assert.assertTrue(consumer._indicationConsumed); } /** * Creates the connection info for the connection. * * @return The connection info for the connection */ private static CimConnectionInfo createConnectionInfo() { CimConnectionInfo connectionInfo = new CimConnectionInfo(); connectionInfo.setType(CimConstants.ECOM_CONNECTION_TYPE); connectionInfo.setHost(providerIP); connectionInfo.setPort(providerPort); connectionInfo.setUser(providerUser); connectionInfo.setPassword(providerPassword); connectionInfo.setInteropNS(providerInterOpNamespace); connectionInfo.setImplNS(providerNamespace); connectionInfo.setUseSSL(isProviderSslEnabled); return connectionInfo; } /** * Creates a CIMInstance representing an alert indication. * * @return A CIMInstance representing an alert indication. */ @SuppressWarnings("rawtypes") private CIMInstance createAlertIndication() { CIMObjectPath objPath = CimObjectPathCreator.createInstance(ALERT_INDICATION_CLASS_NAME); CIMProperty[] properties = new CIMProperty[] { new CIMProperty<String>( ALERTING_MANGED_ELEMENT_KEY, CIMDataType.STRING_T, ALERTING_MANGED_ELEMENT_VALUE) }; CIMInstance indication = new CIMInstance(objPath, properties); return indication; } private class TestIndicationConsumer extends CimIndicationConsumer { private boolean _indicationConsumed = false; public void consumeIndication(Object indication) { _indicationConsumed = true; } } private class TestIndicationProcessor extends CimIndicationProcessor { private boolean _indicationProcessed = false; @Override public Object process(Object indication) { _indicationProcessed = true; return indication; } } }