/* * Copyright (C) 2005-2012 Alfresco Software Limited. * * This file is part of Alfresco * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ package org.alfresco.repo.cluster; import static org.junit.Assert.assertEquals; import static org.junit.Assert.*; /** * Helper class for testing Messenger related code. * * @author Matt Ward */ public class MessengerTestHelper { private String receivedMsg; private final static int SLEEP_MILLIS = 50; private static final int MAX_TRIES = 30; public MessengerTestHelper() { setReceivedMsg(null); } /** * Try to avoid intermitten test failures by trying multiple times. Hopefully the messge * will have been received after the very first sleep, but in a slow environment it may take longer. * This also allows the sleep time to be lower - rather than waiting for say 50 ms, we can try 10 times * at 5 ms - with a chance that we can return after the initial 5 ms. * * @param expectedMsg * @throws InterruptedException */ public void checkMessageReceivedWas(String expectedMsg) { int tries = 0; while (tries < MAX_TRIES) { try { Thread.sleep(SLEEP_MILLIS); } catch (InterruptedException e) { // Carry on e.printStackTrace(); } if (getReceivedMsg() != null) { assertEquals(expectedMsg, getReceivedMsg()); return; } tries++; } fail("No message received, tried " + tries + " times, sleeping " + SLEEP_MILLIS + "ms each time."); } /** * Assert that no message was received in the given period. */ public void checkNoMessageReceived() { int tries = 0; while (tries < MAX_TRIES) { try { Thread.sleep(SLEEP_MILLIS); } catch (InterruptedException e) { // Carry on e.printStackTrace(); } if (getReceivedMsg() != null) { fail("Message received but should NOT have been. Message was: " + getReceivedMsg()); } tries++; } } /** * @return the receivedMsg */ public String getReceivedMsg() { return this.receivedMsg; } /** * @param receivedMsg the receivedMsg to set */ public void setReceivedMsg(String receivedMsg) { this.receivedMsg = receivedMsg; } public static class TestMessageReceiver implements MessageReceiver { MessengerTestHelper helper = new MessengerTestHelper(); @Override public void onReceive(String message) { helper.setReceivedMsg(message); } } }