/*
* ALMA - Atacama Large Millimiter Array (c) European Southern Observatory, 2006
*
* This library 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 2.1 of the License, or (at your option)
* any later version.
*
* This library 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 library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package alma.acs.lasercore.test;
import java.io.File;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
import org.omg.CosPropertyService.Property;
import alma.acs.component.client.ComponentClientTestCase;
import alma.acs.container.ContainerServices;
import alma.acs.lasercore.test.stress.CategoryClient;
import alma.acs.lasercore.test.stress.category.AlarmView;
import alma.acs.lasercore.test.stress.category.CategoryListener;
import alma.acs.util.UTCUtility;
import alma.alarmsystem.AlarmService;
import alma.alarmsystem.CERNAlarmService;
import alma.alarmsystem.CERNAlarmServiceHelper;
import alma.alarmsystem.Timestamp;
import alma.alarmsystem.Triplet;
import alma.alarmsystem.corbaservice.CernAlarmServiceUtils;
import alma.alarmsystem.core.alarms.LaserCoreFaultState;
import alma.alarmsystem.core.alarms.LaserCoreFaultState.LaserCoreFaultCodes;
/**
* Test the sending of alarms through the <code>submitAlarm</code> IDL method
*
* @author acaproni
*
*/
public class IDLSendAlarmTest extends ComponentClientTestCase implements CategoryListener {
/**
* The fault family of the test alarm
*/
private static final String IDLTestFF="IDLFamily";
/**
* The fault member of the test alarm
*/
private static final String IDLTestFM="IDLMember";
/**
* The fault code of the test alarm
*/
private static final int IDLTestFC=1;
/**
* The category client
*/
private CategoryClient categoryClient;
/**
* Container services
*/
private ContainerServices contSvcs;
/**
* The logger
*/
private Logger logger;
/**
* The alarm service
*/
private CERNAlarmService alarmService=null;
/**
* The vector with the alarms received from the categories.
* The key is the alarm ID
*/
private final List<AlarmView> alarms = Collections.synchronizedList(new LinkedList<AlarmView>());
/**
* Constructor
*
* @throws Exception
*/
public IDLSendAlarmTest() throws Exception {
super(IDLSendAlarmTest.class.getName());
}
/**
* @see alma.acs.lasercore.test.stress.category.CategoryListener#alarmReceived(alma.acs.lasercore.test.stress.category.AlarmView)
*/
@Override
public void alarmReceived(AlarmView alarm) {
if (alarm.alarmID.equals(
IDLTestFF+":"+
IDLTestFM+":"+
IDLTestFC)) {
alarms.add(alarm);
}
System.out.println("Alarm received: "+alarm.alarmID+", state "+alarm.active);
}
/**
* @see alma.acs.component.client.ComponentClientTestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
contSvcs = getContainerServices();
assertNotNull(contSvcs);
logger=contSvcs.getLogger();
assertNotNull(logger);
// Get the alarm service
CernAlarmServiceUtils utils = new CernAlarmServiceUtils(contSvcs);
assertNotNull(utils);
alarmService = CERNAlarmServiceHelper.narrow(utils.getAlarmService());
assertNotNull(alarmService);
assertFalse(alarmService.isACSAlarmService());
alarms.clear();
// Connect the categories
categoryClient= new CategoryClient(contSvcs);
assertNotNull(categoryClient);
categoryClient.addAlarmListener(this);
categoryClient.connect();
}
/**
* @see alma.acs.component.client.ComponentClientTestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
alarms.clear();
categoryClient.disconnect();
super.tearDown();
}
/**
* Send an alarm with the IDL method
*
* @throws Exception
*/
public void testSendAlarmThroughIDL() throws Exception {
// Build the alarm
Triplet triplet = new Triplet(IDLTestFF, IDLTestFM, IDLTestFC);
long timestamp = UTCUtility.utcJavaToOmg(System.currentTimeMillis());
org.omg.CosPropertyService.Property[] props = new org.omg.CosPropertyService.Property[0];
alarmService.submitAlarm(
triplet,
true,
"ThisHostName",
this.getClass().getName(),
timestamp,
props);
logger.info("Alarm sent. Now waiting for alarms");
long timeout=System.currentTimeMillis()+60*1000;
do {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
continue;
}
if (alarms.size()>0) {
break;
}
} while (System.currentTimeMillis()<timeout);
assertEquals(1, alarms.size());
}
}