/******************************************************************************* * Copyright (c) 2011 The Board of Trustees of the Leland Stanford Junior University * as Operator of the SLAC National Accelerator Laboratory. * Copyright (c) 2011 Brookhaven National Laboratory. * EPICS archiver appliance is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. *******************************************************************************/ package org.epics.archiverappliance.engine.test; import java.io.File; import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; import org.epics.archiverappliance.SIOCSetup; import org.epics.archiverappliance.config.ArchDBRTypes; import org.epics.archiverappliance.config.ConfigServiceForTests; import org.epics.archiverappliance.config.PVTypeInfo; import org.epics.archiverappliance.engine.ArchiveEngine; import org.epics.archiverappliance.engine.model.ArchiveChannel; import org.epics.archiverappliance.mgmt.policy.PolicyConfig.SamplingMethod; import org.junit.After; import org.junit.Before; import org.junit.Test; import junit.framework.TestCase; /** * test of conditional archiving * @author Luofeng Li * */ public class ControlledPVTest extends TestCase{ private static Logger logger = Logger.getLogger(ControlledPVTest.class.getName()); private SIOCSetup ioc=null; private ConfigServiceForTests testConfigService; private WriterTest writer= new WriterTest(); @Before public void setUp() throws Exception { ioc=new SIOCSetup(); ioc.startSIOCWithDefaultDB(); testConfigService=new ConfigServiceForTests(new File("./bin")); Thread.sleep(10000); } @After public void tearDown() throws Exception { testConfigService.shutdownNow(); ioc.stopSIOC(); } @Test public void testAll() { controlledPV1000pvs(); } /** * test of creating channels for 1000 pvs , controlled by one pv, to start archiving or stop */ private void controlledPV1000pvs() { try { SIOCSetup.caput("test:enable0", 0); Thread.sleep(2000); SIOCSetup.caput("test:enable1", 1); Thread.sleep(2000); for(int i=0;i<1000;i++) { String pvnameenable=""; if(i<600) { pvnameenable="test:enable0"; } else { pvnameenable="test:enable1"; } String pvName = "test_"+i; ArchiveEngine.archivePV(pvName, 2, SamplingMethod.SCAN, 60, writer, testConfigService, ArchDBRTypes.DBR_SCALAR_DOUBLE, null,pvnameenable, false, false); testConfigService.updateTypeInfoForPV(pvName, new PVTypeInfo(pvName, ArchDBRTypes.DBR_SCALAR_DOUBLE, true, 1)); } Thread.sleep(5000); ConcurrentHashMap<String, ArchiveChannel> channelList=testConfigService.getEngineContext().getChannelList(); int enablePVs=0; for(String pvName:channelList.keySet()) { ArchiveChannel tempChannel=channelList.get(pvName); if (tempChannel.isEnabled()) enablePVs++; } assertTrue("400 channels should be started ,but only "+enablePVs+" were started",enablePVs==400); assertTrue("test_0 should be unconnected but it is connected",!channelList.get("test_0").getPVMetrics().isConnected()); assertTrue("test_500 should be unconnected but it is connected",!channelList.get("test_500").getPVMetrics().isConnected()); assertTrue("test_700 should be connected but it is unconnected",channelList.get("test_700").getPVMetrics().isConnected()); assertTrue("test_900 should be connected but it is unconnected",channelList.get("test_900").getPVMetrics().isConnected()); SIOCSetup.caput("test:enable0", 1); Thread.sleep(2000); int enablePVs2=0; for(String pvName:channelList.keySet()) { ArchiveChannel tempChannel=channelList.get(pvName); if (tempChannel.isEnabled()) enablePVs2++; } assertTrue("1000 channels should be started ,but only "+enablePVs2+" were started",enablePVs2==1000); assertTrue("test_0 should be connected but it is unconnected",channelList.get("test_0").getPVMetrics().isConnected()); assertTrue("test_500 should be connected but it is unconnected",channelList.get("test_500").getPVMetrics().isConnected()); assertTrue("test_700 should be connected but it is unconnected",channelList.get("test_700").getPVMetrics().isConnected()); assertTrue("test_900 should be connected but it is unconnected",channelList.get("test_900").getPVMetrics().isConnected()); SIOCSetup.caput("test:enable1", 0); Thread.sleep(2000); int disablePVs3=0; for(String pvName:channelList.keySet()) { ArchiveChannel tempChannel=channelList.get(pvName); if (!tempChannel.isEnabled()) disablePVs3++; } assertTrue("400 channels should be stopped ,but only "+disablePVs3+" were stopeed",disablePVs3==400); assertTrue("test_0 should be connected but it is unconnected",channelList.get("test_0").getPVMetrics().isConnected()); assertTrue("test_500 should be connected but it is unconnected",channelList.get("test_500").getPVMetrics().isConnected()); assertTrue("test_700 should be unconnected but it is connected",!channelList.get("test_700").getPVMetrics().isConnected()); assertTrue("test_900 should be unconnected but it is connected",!channelList.get("test_900").getPVMetrics().isConnected()); SIOCSetup.caput("test:enable0", 0); Thread.sleep(2000); int disablePVs4=0; for(String pvName:channelList.keySet()) { ArchiveChannel tempChannel=channelList.get(pvName); if (!tempChannel.isEnabled()) disablePVs4++; } assertTrue("1000 channels should be stopped ,but only "+disablePVs4+" were stopeed",disablePVs4==1000); assertTrue("test_0 should be unconnected but it is connected",!channelList.get("test_0").getPVMetrics().isConnected()); assertTrue("test_500 should be unconnected but it is connected",!channelList.get("test_500").getPVMetrics().isConnected()); assertTrue("test_700 should be unconnected but it is connected",!channelList.get("test_700").getPVMetrics().isConnected()); assertTrue("test_900 should be unconnected but it is connected",!channelList.get("test_900").getPVMetrics().isConnected()); } catch (Exception e) { // logger.error("Exception", e); } } }