notificationanticipator.java
来自「opennms得相关源码 请大家看看」· Java 代码 · 共 231 行
JAVA
231 行
////This file is part of the OpenNMS(R) Application.////OpenNMS(R) is Copyright (C) 2005 The OpenNMS Group, Inc. All rights reserved.//OpenNMS(R) is a derivative work, containing both original code, included code and modified//code that was published under the GNU General Public License. Copyrights for modified //and included code are below.////OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.////Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved.////This program is free software; you can redistribute it and/or modify//it under the terms of the GNU General Public License as published by//the Free Software Foundation; either version 2 of the License, or//(at your option) any later version.////This program 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 General Public License for more details.////You should have received a copy of the GNU General Public License//along with this program; if not, write to the Free Software//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.////For more information contact://OpenNMS Licensing <license@opennms.org>//http://www.opennms.org///http://www.opennms.com///package org.opennms.netmgt.notifd.mock;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Iterator;import java.util.List;import junit.framework.Assert;import org.opennms.netmgt.mock.MockUtil;/** * @author brozow * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */public class NotificationAnticipator { List m_anticipated = new ArrayList(); List m_unanticipated = new ArrayList(); List m_earlyArrival = new ArrayList(); List m_lateBloomers = new ArrayList(); long m_expectedDiff = 1000;; /** */ public NotificationAnticipator() { } /** * @param expectedDiff */ public void setExpectedDifference(long expectedDiff) { m_expectedDiff = expectedDiff; } /** * * @return */ public long getExpectedDifference() { return m_expectedDiff; } /** * @param event * */ public void anticipateNotification(MockNotification mn) { MockUtil.println("Anticipating notification: " + mn); m_anticipated.add(mn); } /** * @param event */ public synchronized void notificationReceived(MockNotification mn) { int i = m_anticipated.indexOf(mn); if (i != -1) { MockNotification notification = (MockNotification) m_anticipated.get(i); long receivedTime = mn.getExpectedTime(); long expectedTime = notification.getExpectedTime(); long difference = expectedTime - receivedTime; if (Math.abs(difference) < m_expectedDiff) { MockUtil.println("Received expected notification: " + mn); m_anticipated.remove(mn); notifyAll(); } else { MockNotification[] n = new MockNotification[] { notification, mn }; if (difference < 0) { MockUtil.println("Received early notification: " + mn); m_earlyArrival.add(n); } else { MockUtil.println("Received late notification: " + mn); m_lateBloomers.add(n); } } } else { MockUtil.println("Received unexpected notification: " + mn); m_unanticipated.add(mn); } } public Collection getAnticipatedNotifications() { return Collections.unmodifiableCollection(m_anticipated); } public void reset() { m_anticipated = new ArrayList(); m_unanticipated = new ArrayList(); } /** * @return */ public Collection getUnanticipated() { return Collections.unmodifiableCollection(m_unanticipated); } /** * @param i * @return */ public synchronized Collection waitForAnticipated(long millis) { long waitTime = millis; long start = System.currentTimeMillis(); long now = start; while (waitTime > 0) { if (m_anticipated.isEmpty()) return Collections.EMPTY_LIST; try { wait(waitTime); } catch (InterruptedException e) { } now = System.currentTimeMillis(); waitTime -= (now - start); } return getAnticipatedNotifications(); } public void verifyAnticipated(long lastNotifyTime, long waitTime, long sleepTime) { StringBuffer problems = new StringBuffer(); long totalWaitTime = Math.max(0, lastNotifyTime + waitTime - System.currentTimeMillis()); Collection missingNotifications = waitForAnticipated(totalWaitTime); // make sure that we didn't start before we should have long now = System.currentTimeMillis(); try { Thread.sleep(sleepTime); } catch (InterruptedException e) { } if (missingNotifications.size() != 0) { problems.append(missingNotifications.size() + " expected notifications still outstanding:\n"); problems.append(listNotifications("\t", missingNotifications)); } if (getUnanticipated().size() != 0) { problems.append(getUnanticipated().size() + " unanticipated notifications received:\n"); problems.append(listNotifications("\t", getUnanticipated())); } if (m_earlyArrival.size() != 0) { problems.append(m_earlyArrival.size() + " early notifications received:\n"); problems.append(listNotifications("\t", m_earlyArrival)); } if (m_lateBloomers.size() != 0) { problems.append(m_lateBloomers.size() + " late notifications received:\n"); problems.append(listNotifications("\t", m_lateBloomers)); } if (lastNotifyTime > now) { problems.append("Anticipated notifications received at " + lastNotifyTime + ", later than the last expected time of " + now + "\n"); } if (problems.length() > 0) { problems.deleteCharAt(problems.length() - 1); Assert.fail(problems.toString()); } } private static String listNotifications(String prefix, Collection notifications) { StringBuffer b = new StringBuffer(); for (Iterator it = notifications.iterator(); it.hasNext();) { MockNotification notification; MockNotification received = null; Object o = it.next(); if (o instanceof MockNotification[]) { notification = ((MockNotification[]) o)[0]; received = ((MockNotification[]) o)[1]; } else { notification = (MockNotification) o; } b.append(prefix); b.append(notification); if (received != null) { b.append(" (received: "); b.append(received.getExpectedTime()); b.append(")"); } b.append("\n"); } return b.toString(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?