/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource; import org.diirt.datasource.test.MockExecutor; import org.diirt.datasource.test.MockDataSource; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.diirt.datasource.ExpressionLanguage.*; import static org.diirt.util.concurrent.Executors.*; import static org.diirt.util.time.TimeDuration.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** * Tests PVManager defaults are overrides are honored. * * @author carcassi */ public class PVManagerTest { public PVManagerTest() { } @Before @After public void restoreDefaults() { PVManager.setDefaultDataSource(null); PVManager.setDefaultNotificationExecutor(localThread()); } private PV<?, ?> pv; private PVReader<?> pvReader; @After public void closePVs() { if (pv != null) { pv.close(); pv = null; } if (pvReader != null) { pvReader.close(); pvReader = null; } } @Test(expected=IllegalStateException.class) public void lackDataSource() { pvReader = PVManager.read(channel("test")).maxRate(ofHertz(10)); } @Test(expected=IllegalStateException.class) public void lackNotificationExecutor() { PVManager.setDefaultDataSource(new MockDataSource()); PVManager.setDefaultNotificationExecutor(null); pvReader = PVManager.read(channel("test")).maxRate(ofHertz(10)); } @Test public void defaultDataSource() { MockDataSource defaultDataSource = new MockDataSource(); PVManager.setDefaultDataSource(defaultDataSource); pv = PVManager.readAndWrite(channel("test")).asynchWriteAndMaxReadRate(ofHertz(10)); assertThat(defaultDataSource.getReadRecipe(), not(equalTo(null))); assertThat(defaultDataSource.getWriteRecipe(), not(equalTo(null))); } @Test public void defaultThreadSwitch() throws Exception { PVManager.setDefaultDataSource(new MockDataSource()); MockExecutor defaultExecutor = new MockExecutor(); PVManager.setDefaultNotificationExecutor(defaultExecutor); pvReader = PVManager.read(constant("Test")).maxRate(ofHertz(10)); Thread.sleep(100); assertThat(defaultExecutor.getCommand(), not(equalTo(null))); } @Test public void overrideDataSource() { MockDataSource defaultDataSource = new MockDataSource(); MockDataSource overrideDataSource = new MockDataSource(); PVManager.setDefaultDataSource(defaultDataSource); pvReader = PVManager.readAndWrite(channel("test")).from(overrideDataSource).asynchWriteAndMaxReadRate(ofHertz(10)); assertThat(defaultDataSource.getReadRecipe(), equalTo(null)); assertThat(defaultDataSource.getWriteRecipe(), equalTo(null)); assertThat(overrideDataSource.getReadRecipe(), not(equalTo(null))); assertThat(overrideDataSource.getWriteRecipe(), not(equalTo(null))); } @Test public void overrideThreadSwitch() throws Exception { PVManager.setDefaultDataSource(new MockDataSource()); MockExecutor defaultExecutor = new MockExecutor(); MockExecutor overrideExecutor = new MockExecutor(); PVManager.setDefaultNotificationExecutor(defaultExecutor); pvReader = PVManager.read(constant("Test")).notifyOn(overrideExecutor).maxRate(ofHertz(10)); Thread.sleep(100); assertThat(defaultExecutor.getCommand(), equalTo(null)); assertThat(overrideExecutor.getCommand(), not(equalTo(null))); } }