/* * Copyright (c) 2008-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.cometd.javascript.extension; import org.cometd.javascript.AbstractCometDTest; import org.cometd.javascript.Latch; import org.junit.Assert; import org.junit.Test; public class CometDExtensionExceptionCallbackTest extends AbstractCometDTest { @Test public void testOutgoingExtensionExceptionCallback() throws Exception { defineClass(Latch.class); evaluateScript("var latch = new Latch(1);"); Latch latch = (Latch)get("latch"); evaluateScript("var connectLatch = new Latch(1);"); Latch connectLatch = get("connectLatch"); evaluateScript("" + "cometd.configure({url: '" + cometdURL + "', logLevel: '" + getLogLevel() + "'});" + "cometd.addListener('/meta/connect', function(message) { connectLatch.countDown(); });" + "cometd.registerExtension('testext', {" + " outgoing: function(message) { throw 'test'; }" + "});" + "" + "cometd.onExtensionException = function(exception, extensionName, outgoing, message) " + "{" + " if (exception === 'test' && extensionName === 'testext' && outgoing === true)" + " {" + " this.unregisterExtension(extensionName);" + " latch.countDown();" + " }" + "};" + "" + "cometd.handshake();"); Assert.assertTrue(latch.await(5000)); Assert.assertTrue(connectLatch.await(5000)); evaluateScript("cometd.disconnect(true);"); } @Test public void testIncomingExtensionExceptionCallback() throws Exception { defineClass(Latch.class); evaluateScript("var latch = new Latch(1);"); Latch latch = (Latch)get("latch"); evaluateScript("var connectLatch = new Latch(1);"); Latch connectLatch = get("connectLatch"); evaluateScript("" + "cometd.configure({url: '" + cometdURL + "', logLevel: '" + getLogLevel() + "'});" + "cometd.addListener('/meta/connect', function(message) { connectLatch.countDown(); });" + "cometd.registerExtension('testext', {" + " incoming: function(message) { throw 'test'; }" + "});" + "" + "cometd.onExtensionException = function(exception, extensionName, outgoing, message) " + "{" + " if (exception === 'test' && extensionName === 'testext' && outgoing === false)" + " {" + " this.unregisterExtension(extensionName);" + " latch.countDown();" + " }" + "};" + "" + "cometd.handshake();"); Assert.assertTrue(latch.await(5000)); Assert.assertTrue(connectLatch.await(5000)); evaluateScript("cometd.disconnect(true);"); } }