/** * 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 static java.time.Duration.ofMillis; import static org.diirt.datasource.ExpressionLanguage.channel; import static org.diirt.datasource.ExpressionLanguage.latestValueOf; import static org.diirt.datasource.ExpressionLanguage.readMapOf; import static org.diirt.datasource.ExpressionLanguage.writeMapOf; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.diirt.datasource.expression.ReadMap; import org.diirt.datasource.expression.WriteMap; import org.diirt.datasource.test.MockDataSource; import org.diirt.datasource.test.WriteRecipeUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Tests map expression with a full pipeline. * * @author carcassi */ public class MapExpressionTest { public MapExpressionTest() { } @Before public void setUp() { pvReader = null; dataSource = new MockDataSource(); } @After public void tearDown() throws InterruptedException { if (pvReader != null) { pvReader.close(); pvReader = null; } if (pvWriter != null) { pvWriter.close(); pvWriter = null; } Thread.sleep(400); assertThat(dataSource.getConnectedReadRecipes(), equalTo(Collections.<ChannelReadRecipe>emptyList())); assertThat(dataSource.getConnectedWriteRecipes(), equalTo(Collections.<ChannelWriteRecipe>emptyList())); } private PVReader<?> pvReader; private PVWriter<Map<String, Object>> pvWriter; private MockDataSource dataSource; @Test public void map1() { ReadMap<Object> map = readMapOf(Object.class); pvReader = PVManager.read(map).from(dataSource).maxRate(ofMillis(100)); map.add(latestValueOf(channel("test1"))); assertThat(dataSource.getReadRecipe(), not(equalTo(null))); assertThat(dataSource.getConnectedReadRecipes(), hasSize(1)); map.add(latestValueOf(channel("test2"))); assertThat(dataSource.getReadRecipe(), not(equalTo(null))); assertThat(dataSource.getConnectedReadRecipes(), hasSize(2)); } @Test public void map2() { ReadMap<Object> map = readMapOf(Object.class); pvReader = PVManager.read(map).from(dataSource).maxRate(ofMillis(100)); map.add(latestValueOf(channel("test1"))); map.add(latestValueOf(channel("test2"))); assertThat(dataSource.getReadRecipe(), not(equalTo(null))); assertThat(dataSource.getConnectedReadRecipes(), hasSize(2)); map.remove("test2"); assertThat(dataSource.getConnectedReadRecipes(), hasSize(1)); } @Test public void map3() throws Exception { WriteMap<Object> map = writeMapOf(Object.class); pvWriter = PVManager.write(map).from(dataSource).async(); map.add(latestValueOf(channel("test1"))); map.add(latestValueOf(channel("test2"))); assertThat(dataSource.getWriteRecipe(), not(equalTo(null))); assertThat(dataSource.getConnectedWriteRecipes(), hasSize(2)); Map<String, Object> values = new HashMap<>(); values.put("test1", "testing1"); values.put("test2", "testing2"); pvWriter.write(values); Thread.sleep(100); assertThat(dataSource.getWriteRecipeForWrite(), not(equalTo(null))); assertThat(WriteRecipeUtil.valueFor(dataSource.getWriteRecipeForWrite(), "test1"), equalTo((Object) "testing1")); assertThat(WriteRecipeUtil.valueFor(dataSource.getWriteRecipeForWrite(), "test1"), equalTo((Object) "testing1")); map.remove("test2"); assertThat(dataSource.getConnectedWriteRecipes(), hasSize(1)); } }