/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.support.ca; import java.util.concurrent.atomic.AtomicInteger; import org.diirt.datasource.PVReader; import org.diirt.datasource.PVManager; import org.diirt.datasource.PVReaderListener; import org.junit.Test; import static org.diirt.datasource.ExpressionLanguage.*; import org.diirt.datasource.PVReaderEvent; import static org.diirt.util.time.TimeDuration.*; /** * * @author carcassi */ public class JCACloseIT extends JCABase { AtomicInteger counter = new AtomicInteger(); public JCACloseIT() { } @Test public void testSingleOpenAndClose() throws Exception{ final PVReader<Object> pv =PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); Thread.sleep(1000); assertJCAOn(); pv.close(); Thread.sleep(1500); assertJCAOff(); } @Test public void testMultipleOpenAndClose() throws Exception{ final PVReader<Object> pv1 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv2 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv3 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv4 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); Thread.sleep(1000); assertJCAOn(); pv1.close(); pv2.close(); pv3.close(); pv4.close(); Thread.sleep(1500); assertJCAOff(); } @Test public void testMultipleDifferentOpenAndClose() throws Exception{ final PVReader<Object> pv1 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv2 = PVManager.read(channel("carcassi2")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv3 = PVManager.read(channel("carcassi")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); final PVReader<Object> pv4 = PVManager.read(channel("carcassi2")) .readListener(new PVReaderListener<Object>() { @Override public void pvChanged(PVReaderEvent<Object> event) { counter.incrementAndGet(); } }) .maxRate(ofHertz(10)); Thread.sleep(1000); assertJCAOn(); pv1.close(); pv2.close(); pv3.close(); pv4.close(); Thread.sleep(1500); assertJCAOff(); } }