/* * #! * % * Copyright (C) 2014 - 2016 Humboldt-Universität zu Berlin * % * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #_ */ package de.hub.cs.dbis.aeolus.testUtils; import java.util.Random; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.modules.junit4.PowerMockRunner; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.utils.Utils; /** * @author mjsax */ @RunWith(PowerMockRunner.class) public class RandomSpoutTest { private long seed; private Random r; @Before public void prepare() { this.seed = System.currentTimeMillis(); this.r = new Random(this.seed); System.out.println("Test seed: " + this.seed); } @Test public void testDeclareOutputFieldsDefault() { RandomSpout spout = new RandomSpout(1000); TestDeclarer declarer = new TestDeclarer(); spout.declareOutputFields(declarer); Assert.assertEquals(1, declarer.schemaBuffer.size()); Assert.assertEquals(1, declarer.schemaBuffer.get(0).size()); Assert.assertEquals("a", declarer.schemaBuffer.get(0).get(0)); Assert.assertEquals(1, declarer.streamIdBuffer.size()); Assert.assertEquals(Utils.DEFAULT_STREAM_ID, declarer.streamIdBuffer.get(0)); Assert.assertEquals(1, declarer.directBuffer.size()); Assert.assertFalse(declarer.directBuffer.get(0).booleanValue()); } @Test public void testDeclareOutputFields() { int numberOfAttributes = 1 + this.r.nextInt(10); RandomSpout spout = new RandomSpout(numberOfAttributes, 1000); TestDeclarer declarer = new TestDeclarer(); spout.declareOutputFields(declarer); Assert.assertEquals(1, declarer.schemaBuffer.size()); Assert.assertEquals(numberOfAttributes, declarer.schemaBuffer.get(0).size()); for(int i = 0; i < numberOfAttributes; ++i) { Assert.assertEquals("" + (char)(97 + i), declarer.schemaBuffer.get(0).get(i)); } Assert.assertEquals(1, declarer.streamIdBuffer.size()); Assert.assertEquals(Utils.DEFAULT_STREAM_ID, declarer.streamIdBuffer.get(0)); Assert.assertEquals(1, declarer.directBuffer.size()); Assert.assertFalse(declarer.directBuffer.get(0).booleanValue()); } @Test public void testDeclareOutputFieldsMultipleStreams() { int numberOfAttributes = 1 + this.r.nextInt(10); String[] streamIds = new String[] {Utils.DEFAULT_STREAM_ID, "myStreamId"}; RandomSpout spout = new RandomSpout(numberOfAttributes, 1000, streamIds); TestDeclarer declarer = new TestDeclarer(); spout.declareOutputFields(declarer); Assert.assertEquals(streamIds.length, declarer.schemaBuffer.size()); Assert.assertEquals(streamIds.length, declarer.streamIdBuffer.size()); Assert.assertEquals(streamIds.length, declarer.directBuffer.size()); for(int i = 0; i < streamIds.length; ++i) { Assert.assertEquals(numberOfAttributes, declarer.schemaBuffer.get(i).size()); for(int j = 0; j < numberOfAttributes; ++j) { Assert.assertEquals("" + (char)(97 + j), declarer.schemaBuffer.get(i).get(j)); } Assert.assertEquals(streamIds[i], declarer.streamIdBuffer.get(i)); Assert.assertFalse(declarer.directBuffer.get(i).booleanValue()); } } @Test public void testExecuteDefault() { RandomSpout spout = new RandomSpout(100); TestSpoutOutputCollector collector = new TestSpoutOutputCollector(); spout.open(null, null, new SpoutOutputCollector(collector)); for(int i = 0; i < 50; ++i) { spout.nextTuple(); Assert.assertEquals(i + 1, collector.output.get(Utils.DEFAULT_STREAM_ID).size()); Assert.assertEquals(1, collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).size()); Assert.assertTrue(0 < ((Integer)collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).get(0)).intValue()); Assert.assertTrue(100 >= ((Integer)collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).get(0)).intValue()); } } @Test public void testExecute() { int numberOfAttributes = 1 + this.r.nextInt(10); RandomSpout spout = new RandomSpout(numberOfAttributes, 100); TestSpoutOutputCollector collector = new TestSpoutOutputCollector(); spout.open(null, null, new SpoutOutputCollector(collector)); for(int i = 0; i < 50; ++i) { spout.nextTuple(); Assert.assertEquals(i + 1, collector.output.get(Utils.DEFAULT_STREAM_ID).size()); Assert.assertEquals(numberOfAttributes, collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).size()); for(int j = 0; j < numberOfAttributes; ++j) { Assert .assertTrue(0 < ((Integer)collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).get(j)).intValue()); Assert.assertTrue(100 >= ((Integer)collector.output.get(Utils.DEFAULT_STREAM_ID).get(i).get(j)) .intValue()); } } } @Test public void testExecuteMultipleStreams() { int numberOfAttributes = 1 + this.r.nextInt(10); String[] streamIds = new String[] {Utils.DEFAULT_STREAM_ID, "myStreamId"}; RandomSpout spout = new RandomSpout(numberOfAttributes, 100, streamIds); TestSpoutOutputCollector collector = new TestSpoutOutputCollector(); spout.open(null, null, new SpoutOutputCollector(collector)); for(int i = 0; i < 50; ++i) { spout.nextTuple(); for(String stream : streamIds) { Assert.assertTrue(collector.output.get(stream).size() == i + 1); // size of result Assert.assertTrue(collector.output.get(stream).get(i).size() == numberOfAttributes); for(int j = 0; j < numberOfAttributes; ++j) { Assert.assertTrue(0 < ((Integer)collector.output.get(stream).get(i).get(j)).intValue()); Assert.assertTrue(100 >= ((Integer)collector.output.get(stream).get(i).get(j)).intValue()); } } } } }