/* * $Id$ * * Copyright 2008 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.blitz.test.mock; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; import net.sf.ehcache.Cache; import ome.model.meta.Session; import ome.services.messages.DestroySessionMessage; import org.jmock.MockObjectTestCase; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Tests the use of the client callback on session destruction */ public class ClientCallbackTest extends MockObjectTestCase { Cache cache; Session session; omero.client client; MockFixture fixture; @BeforeMethod(groups = "integration") public void setup() throws Exception { fixture = new MockFixture(this); client = fixture.newClient(); } @AfterMethod(alwaysRun = true) public void tearDown() throws Exception { if (client != null) { // doesn't throw client.closeSession(); } if (fixture != null) { fixture.tearDown(); } } @Test(groups = "integration") public void testBasic() throws Exception { session = fixture.session("uuid-basic"); cache = fixture.cache(); fixture.prepareServiceFactory(session, cache); client.createSession("a", "b"); fixture.prepareClose(0); client.closeSession(); } @Test(groups = "integration") public void testServerCloses() throws Exception { session = fixture.session("uuid-serverCloses"); cache = fixture.cache(); fixture.prepareServiceFactory(session, cache); client.createSession("a", "b"); fixture.prepareClose(0); fixture.ctx.publishEvent(new DestroySessionMessage(this, "uuid-serverCloses")); } @Test(groups = "integration") public void testClientReceivesHeartRequest() throws Exception { session = fixture.session("uuid-clientReceivesHeartRequest"); cache = fixture.cache(); fixture.prepareServiceFactory(session, cache); client.createSession("a", "b"); fixture.prepareClose(0); final CyclicBarrier barrier = new CyclicBarrier(2); Runnable r = new Runnable(){ public void run() { try { barrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }}; client.onHeartbeat(r); barrier.await(10, TimeUnit.SECONDS); assertEquals(0, barrier.getNumberWaiting()); assertFalse(barrier.isBroken()); } }