/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.epl.join.rep; import com.espertech.esper.client.EventBean; import com.espertech.esper.support.epl.join.SupportJoinResultNodeFactory; import com.espertech.esper.support.event.SupportEventBeanFactory; import java.util.*; import junit.framework.TestCase; public class TestRepositoryImpl extends TestCase { private EventBean s0Event; private RepositoryImpl repository; public void setUp() { s0Event = SupportEventBeanFactory.createObject(new Object()); repository = new RepositoryImpl(0, s0Event, 6); } public void testGetCursors() { // get cursor for root stream lookup Iterator<Cursor> it = repository.getCursors(0); assertTrue(it.hasNext()); Cursor cursor = it.next(); assertSame(s0Event, cursor.getTheEvent()); assertSame(0, cursor.getStream()); assertFalse(it.hasNext()); tryIteratorEmpty(it); // try invalid get cursor for no results try { repository.getCursors(2); fail(); } catch (NullPointerException ex) { // expected } } public void testAddResult() { Set<EventBean> results = SupportJoinResultNodeFactory.makeEventSet(2); repository.addResult(repository.getCursors(0).next(), results, 1); assertEquals(1, repository.getNodesPerStream()[1].size()); try { repository.addResult(repository.getCursors(0).next(), new HashSet<EventBean>(), 1); fail(); } catch (IllegalArgumentException ex) { // expected } try { repository.addResult(repository.getCursors(0).next(), null, 1); fail(); } catch (NullPointerException ex) { // expected } } public void testFlow() { // Lookup from s0 Cursor cursors[] = read(repository.getCursors(0)); assertEquals(1, cursors.length); Set<EventBean> resultsS1 = SupportJoinResultNodeFactory.makeEventSet(2); repository.addResult(cursors[0], resultsS1, 1); // Lookup from s1 cursors = read(repository.getCursors(1)); assertEquals(2, cursors.length); Set<EventBean> resultsS2[] = SupportJoinResultNodeFactory.makeEventSets(new int[] {2, 3}); repository.addResult(cursors[0], resultsS2[0], 2); repository.addResult(cursors[1], resultsS2[1], 2); // Lookup from s2 cursors = read(repository.getCursors(2)); assertEquals(5, cursors.length); // 2 + 3 for s2 Set<EventBean> resultsS3[] = SupportJoinResultNodeFactory.makeEventSets(new int[] {2, 1, 3, 5, 1}); repository.addResult(cursors[0], resultsS3[0], 3); repository.addResult(cursors[1], resultsS3[1], 3); repository.addResult(cursors[2], resultsS3[2], 3); repository.addResult(cursors[3], resultsS3[3], 3); repository.addResult(cursors[4], resultsS3[4], 3); // Lookup from s3 cursors = read(repository.getCursors(3)); assertEquals(12, cursors.length); } private void tryIteratorEmpty(Iterator it) { try { it.next(); fail(); } catch (NoSuchElementException ex) { // expected } } private Cursor[] read(Iterator<Cursor> iterator) { List<Cursor> cursors = new ArrayList<Cursor>(); while (iterator.hasNext()) { Cursor cursor = iterator.next(); cursors.add(cursor); } return cursors.toArray(new Cursor[0]); } }