@Test public void testCascadingShutdown() { ViewProcessorTestEnvironment env = new ViewProcessorTestEnvironment(); env.init(); ViewProcessorImpl vp = env.getViewProcessor(); vp.start(); ViewClient client1 = vp.createViewClient(ViewProcessorTestEnvironment.TEST_USER); client1.attachToViewProcess( env.getViewDefinition().getUniqueId(), ExecutionOptions.infinite(MarketData.live())); ViewClient client2 = vp.createViewClient(ViewProcessorTestEnvironment.TEST_USER); client2.attachToViewProcess( env.getViewDefinition().getUniqueId(), ExecutionOptions.infinite(MarketData.live())); ViewProcessImpl view = env.getViewProcess(vp, client1.getUniqueId()); vp.stop(); assertFalse(vp.isRunning()); assertFalse(view.isRunning()); assertTrue(view.getState() == ViewProcessState.TERMINATED); assertFalse(client1.isAttached()); assertFalse(client2.isAttached()); client1.shutdown(); client2.shutdown(); }
@Test public void testChangeOfListeners() throws InterruptedException { ViewProcessorTestEnvironment env = new ViewProcessorTestEnvironment(); SynchronousInMemoryLKVSnapshotProvider marketDataProvider = new SynchronousInMemoryLKVSnapshotProvider(); marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive1(), 0); marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive2(), 0); env.setMarketDataProvider(marketDataProvider); env.init(); ViewProcessorImpl vp = env.getViewProcessor(); vp.start(); ViewClient client = vp.createViewClient(ViewProcessorTestEnvironment.TEST_USER); client.setFragmentResultMode(ViewResultMode.FULL_ONLY); TestViewResultListener resultListener1 = new TestViewResultListener(); client.setResultListener(resultListener1); // Start live computation and collect the initial result marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive1(), 2); client.attachToViewProcess( env.getViewDefinition().getUniqueId(), ExecutionOptions.infinite(MarketData.live())); ViewProcessImpl viewProcess = env.getViewProcess(vp, client.getUniqueId()); assertEquals(ViewProcessState.RUNNING, viewProcess.getState()); ViewComputationJob recalcJob = env.getCurrentComputationJob(viewProcess); resultListener1.assertViewDefinitionCompiled(TIMEOUT); resultListener1.assertCycleInitiated(TIMEOUT); resultListener1.assertCycleFragmentCompleted(TIMEOUT); resultListener1.assertCycleCompleted(TIMEOUT); assertEquals(0, resultListener1.getQueueSize()); // Push through a second result marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive1(), 3); recalcJob.marketDataChanged(); resultListener1.assertCycleInitiated(TIMEOUT); resultListener1.assertCycleFragmentCompleted(TIMEOUT); resultListener1.assertCycleCompleted(TIMEOUT); assertEquals(0, resultListener1.getQueueSize()); // Change listener TestViewResultListener resultListener2 = new TestViewResultListener(); client.setResultListener(resultListener2); // Push through a result which should arrive at the new listeners recalcJob.marketDataChanged(); resultListener2.assertCycleInitiated(TIMEOUT); resultListener2.assertCycleFragmentCompleted(TIMEOUT); resultListener2.assertCycleCompleted(TIMEOUT); assertEquals(0, resultListener1.getQueueSize()); assertEquals(0, resultListener2.getQueueSize()); client.setResultListener(null); client.shutdown(); assertEquals(ViewProcessState.TERMINATED, viewProcess.getState()); vp.stop(); }
@Test public void testOldRecalculationThreadDies() throws InterruptedException { ViewProcessorTestEnvironment env = new ViewProcessorTestEnvironment(); SynchronousInMemoryLKVSnapshotProvider marketDataProvider = new SynchronousInMemoryLKVSnapshotProvider(); marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive1(), 0); marketDataProvider.addValue(ViewProcessorTestEnvironment.getPrimitive2(), 0); env.setMarketDataProvider(marketDataProvider); env.init(); ViewProcessorImpl vp = env.getViewProcessor(); vp.start(); ViewClient client = vp.createViewClient(ViewProcessorTestEnvironment.TEST_USER); client.attachToViewProcess( env.getViewDefinition().getUniqueId(), ExecutionOptions.infinite(MarketData.live())); ViewProcessImpl viewProcess1 = env.getViewProcess(vp, client.getUniqueId()); ViewComputationJob recalcJob1 = env.getCurrentComputationJob(viewProcess1); Thread recalcThread1 = env.getCurrentComputationThread(viewProcess1); assertFalse(recalcJob1.isTerminated()); assertTrue(recalcThread1.isAlive()); client.detachFromViewProcess(); client.attachToViewProcess( env.getViewDefinition().getUniqueId(), ExecutionOptions.infinite(MarketData.live())); ViewProcessImpl viewProcess2 = env.getViewProcess(vp, client.getUniqueId()); ViewComputationJob recalcJob2 = env.getCurrentComputationJob(viewProcess2); Thread recalcThread2 = env.getCurrentComputationThread(viewProcess2); assertFalse(viewProcess1 == viewProcess2); assertTrue(recalcJob1.isTerminated()); assertFalse(recalcJob2.isTerminated()); recalcThread1.join(TIMEOUT); assertFalse(recalcThread1.isAlive()); assertTrue(recalcThread2.isAlive()); vp.stop(); assertTrue(recalcJob2.isTerminated()); }