http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/lib/messenger/subscription.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/messenger/subscription.rb b/proton-c/bindings/ruby/lib/messenger/subscription.rb deleted file mode 100644 index 49fb50e..0000000 --- a/proton-c/bindings/ruby/lib/messenger/subscription.rb +++ /dev/null @@ -1,36 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -module Qpid::Proton::Messenger - - # A +Subscription+ is an opaque object for working with a +Messenger+'s - # subscriptions. - # - class Subscription - - def initialize(impl) # :nodoc: - @impl = impl - end - - def impl # :nodoc: - @impl - end - - end - -end
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/lib/messenger/tracker.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/messenger/tracker.rb b/proton-c/bindings/ruby/lib/messenger/tracker.rb deleted file mode 100644 index 5fb98e5..0000000 --- a/proton-c/bindings/ruby/lib/messenger/tracker.rb +++ /dev/null @@ -1,37 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -module Qpid::Proton::Messenger - - # A +Tracker+ is used to track the disposition of a +Message+. - # - class Tracker - - CUMULATIVE = Cproton::PN_CUMULATIVE - - def initialize(impl) # :nodoc: - @impl = impl - end - - def impl # :nodoc: - @impl - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/lib/messenger/tracker_status.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/messenger/tracker_status.rb b/proton-c/bindings/ruby/lib/messenger/tracker_status.rb deleted file mode 100644 index ab77683..0000000 --- a/proton-c/bindings/ruby/lib/messenger/tracker_status.rb +++ /dev/null @@ -1,68 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - - -module Qpid::Proton::Messenger - - # TrackerStatus contains symbols that represent the status value for a - # Tracker. - # - class TrackerStatus - - def initialize value, name # :nodoc: - @value = value - @name = name - end - - def value # :nodoc: - @value - end - - def to_s # :nodoc: - @name.to_s - end - - def self.by_name(name) # :nodoc: - @by_name[name.to_sym] unless name.nil? - end - - def self.by_value(value) # :nodoc: - @by_value[value] unless value.nil? - end - - private - - def self.add_item(key, value) # :nodoc: - @by_name ||= {} - @by_name[key] = TrackerStatus.new value, key - @by_value ||= {} - @by_value[value] = @by_name[key] - end - - def self.const_missing(key) # :nodoc: - @by_name[key] - end - - self.add_item :UNKNOWN, Cproton::PN_STATUS_UNKNOWN - self.add_item :PENDING, Cproton::PN_STATUS_PENDING - self.add_item :ACCEPTED, Cproton::PN_STATUS_ACCEPTED - self.add_item :REJECTED, Cproton::PN_STATUS_REJECTED - self.add_item :SETTLED, Cproton::PN_STATUS_SETTLED - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/lib/qpid_proton.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/qpid_proton.rb b/proton-c/bindings/ruby/lib/qpid_proton.rb index 79c8cb7..18f3ddd 100644 --- a/proton-c/bindings/ruby/lib/qpid_proton.rb +++ b/proton-c/bindings/ruby/lib/qpid_proton.rb @@ -93,10 +93,3 @@ require "core/container" require "handler/reactor_messaging_adapter" require "handler/messaging_handler" # Keep original name for compatibility require "reactor/container" - -# DEPRECATED Messenger API classes -require "messenger/subscription" -require "messenger/tracker_status" -require "messenger/tracker" -require "messenger/messenger" - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/tests/old_examples/old_example_test.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/tests/old_examples/old_example_test.rb b/proton-c/bindings/ruby/tests/old_examples/old_example_test.rb index b6700c3..a3f6ad1 100755 --- a/proton-c/bindings/ruby/tests/old_examples/old_example_test.rb +++ b/proton-c/bindings/ruby/tests/old_examples/old_example_test.rb @@ -52,14 +52,6 @@ class OldExampleTest < MiniTest::Test assert_output want, ["simple_recv.rb", "-a", make_url($port, __method__)] end - def test_smoke - url = "127.0.0.1:#{unused_port}" - recv = run_script("recv.rb", "~#{url}") - recv.readline # Wait for "Listening" - assert_output("Status: ACCEPTED", ["send.rb", url]) - assert_equal "Got: Hello World!", recv.read.strip - end - def test_client_server want = <<EOS -> Twas brillig, and the slithy toves http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/tests/old_examples/recv.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/tests/old_examples/recv.rb b/proton-c/bindings/ruby/tests/old_examples/recv.rb deleted file mode 100755 index a29f123..0000000 --- a/proton-c/bindings/ruby/tests/old_examples/recv.rb +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby - -require 'qpid_proton.rb' - -messenger = Qpid::Proton::Messenger::Messenger.new() -messenger.incoming_window = 1 -message = Qpid::Proton::Message.new() - -address = ARGV[0] -if not address then - address = "~0.0.0.0" -end -messenger.subscribe(address) - -messenger.start() - -puts "Listening"; STDOUT.flush -messenger.receive() -messenger.get(message) -puts "Got: #{message.body}" -messenger.accept() - -messenger.stop() http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/proton-c/bindings/ruby/tests/old_examples/send.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/tests/old_examples/send.rb b/proton-c/bindings/ruby/tests/old_examples/send.rb deleted file mode 100755 index 73016d0..0000000 --- a/proton-c/bindings/ruby/tests/old_examples/send.rb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env ruby - -require 'qpid_proton.rb' - -messenger = Qpid::Proton::Messenger::Messenger.new() -messenger.outgoing_window = 10 -message = Qpid::Proton::Message.new() - -address = ARGV[0] -if not address then - address = "0.0.0.0" -end - -message.address = address -message.body = "Hello World!" - -messenger.start() -tracker = messenger.put(message) -messenger.send() -print "Status: ", messenger.status(tracker), "\n" -messenger.stop() http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/codec.js ---------------------------------------------------------------------- diff --git a/tests/javascript/codec.js b/tests/javascript/codec.js deleted file mode 100755 index 5110f4f..0000000 --- a/tests/javascript/codec.js +++ /dev/null @@ -1,569 +0,0 @@ -#!/usr/bin/env node -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -/** - * This is a fairly literal JavaScript port of codec.py used to unit test the - * proton.Data wrapper class. This suite of tests is actually testing the low - * level implementation methods used to access the AMQP type system and in - * practice most normal users wouldn't need to call these directly, rather users - * should simply use the putObject() and getObject() methods. - */ - -// Check if the environment is Node.js and if not log an error and exit. -if (typeof process === 'object' && typeof require === 'function') { - var unittest = require("./unittest.js"); - var assert = require("assert"); - - // Increase the virtual heap available to the emscripten compiled C runtime. - // This allows us to test a really big string. - PROTON_TOTAL_MEMORY = 140000000; - PROTON_TOTAL_STACK = 25000000; // Needs to be bigger than the biggest string. - var proton = require("qpid-proton-messenger"); - - // Extend TestCase by creating a prototype instance and adding test methods as properties. - var DataTest = new unittest.TestCase(); - - DataTest.setUp = function() { - this.data = new proton.Data(); - }; - - DataTest.tearDown = function() { - this.data.free(); - this.data = null; - }; - - DataTest.testTopLevelNext = function() { - console.log("testTopLevelNext"); - assert(this.data.next() === null); - this.data.putNULL(); - this.data.putBOOL(false); - this.data.putINT(0); - assert(this.data.next() === null); - this.data.rewind(); - assert(this.data.next() === proton.Data.NULL); - assert(this.data.next() === proton.Data.BOOL); - assert(this.data.next() === proton.Data.INT); - assert(this.data.next() === null); - console.log("OK\n"); - }; - - DataTest.testNestedNext = function() { - console.log("testNestedNext"); - assert(this.data.next() === null); - this.data.putNULL(); - assert(this.data.next() === null); - this.data.putLISTNODE(); - assert(this.data.next() === null); - this.data.putBOOL(false); - assert(this.data.next() === null); - this.data.rewind(); - assert(this.data.next() === proton.Data.NULL); - assert(this.data.next() === proton.Data.LIST); - this.data.enter(); - assert(this.data.next() === null); - this.data.putUBYTE(0); - assert(this.data.next() === null); - this.data.putUINT(0); - assert(this.data.next() === null); - this.data.putINT(0); - assert(this.data.next() === null); - this.data.exit(); - assert(this.data.next() === proton.Data.BOOL); - assert(this.data.next() === null); - - this.data.rewind(); - assert(this.data.next() === proton.Data.NULL); - assert(this.data.next() === proton.Data.LIST); - assert(this.data.enter()); - assert(this.data.next() === proton.Data.UBYTE); - assert(this.data.next() === proton.Data.UINT); - assert(this.data.next() === proton.Data.INT); - assert(this.data.next() === null); - assert(this.data.exit()); - assert(this.data.next() === proton.Data.BOOL); - assert(this.data.next() === null); - console.log("OK\n"); - }; - - DataTest.testEnterExit = function() { - console.log("testEnterExit"); - assert(this.data.next() === null); - assert(!this.data.enter()); - this.data.putLISTNODE(); - assert(this.data.enter()); - assert(this.data.next() === null); - this.data.putLISTNODE(); - assert(this.data.enter()); - this.data.putLISTNODE(); - assert(this.data.enter()); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 0); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 1); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 1); - assert(!this.data.exit()); - assert(this.data.getLISTNODE() === 1); - assert(this.data.next() === null); - - this.data.rewind(); - assert(this.data.next() === proton.Data.LIST); - assert(this.data.getLISTNODE() === 1); - assert(this.data.enter()); - assert(this.data.next() === proton.Data.LIST); - assert(this.data.getLISTNODE() === 1); - assert(this.data.enter()); - assert(this.data.next() === proton.Data.LIST); - assert(this.data.getLISTNODE() === 0); - assert(this.data.enter()); - assert(this.data.next() === null); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 0); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 1); - assert(this.data.exit()); - assert(this.data.getLISTNODE() === 1); - assert(!this.data.exit()); - console.log("OK\n"); - }; - - /** - * This tests the "low level" putARRAYNODE/getARRAYNODE methods. - * In general though applications would create a proton.Data.Array and use the - * higher level putARRAY/getARRAY - */ - DataTest._testArray = function(dtype, descriptor, atype, values) { - var values = Array.prototype.slice.apply(arguments, [3]); - dtype = (dtype == null) ? null : dtype.toUpperCase(); - atype = atype.toUpperCase(); - - // Create an array node, enter it and put the descriptor (if present) and values. - this.data.putARRAYNODE(dtype != null, proton.Data[atype]); - this.data.enter(); - if (dtype != null) { - var putter = 'put' + dtype; - this.data[putter](descriptor); - } - var putter = 'put' + atype; - for (var i = 0; i < values.length; i++) { - this.data[putter](values[i]); - } - this.data.exit(); - - // Check that we did indeed add an Array node - this.data.rewind(); - assert(this.data.next() === proton.Data.ARRAY); - - // Get the count, described and type metadata from the array node and compare - // with the values we passed to putARRAYNODE. - var metadata = this.data.getARRAYNODE(); - var count = metadata.count; - var described = metadata.described; - var type = metadata.type; - - assert(count === values.length); - if (dtype == null) { - assert(described === false); - } else { - assert(described === true); - } - assert(type === proton.Data[atype]); - - // Enter the array node and compare the descriptor and values with those that - // we put into the array. - assert(this.data.enter()); - if (described) { - assert(this.data.next() === proton.Data[dtype]); - var getter = 'get' + dtype; - var gotten = this.data[getter](); - assert(gotten.toString() === descriptor.toString()); - } - var getter = 'get' + atype; - for (var i = 0; i < values.length; i++) { - assert(this.data.next() === proton.Data[atype]); - var gotten = this.data[getter](); - assert(gotten.toString() === values[i].toString()); - } - assert(this.data.next() === null); - assert(this.data.exit()); - }; - - DataTest.testStringArray = function() { - console.log("testStringArray"); - this._testArray(null, null, "string", "one", "two", "three"); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array("STRING", ["four", "five", "six"]); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest.testDescribedStringArray = function() { - console.log("testDescribedStringArray"); - this._testArray("symbol", "url", "string", "one", "two", "three"); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array("STRING", ["four", "five", "six"], new proton.Data.Symbol("url")); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest.testIntArray = function() { - console.log("testIntArray"); - this._testArray(null, null, "int", 1, 2, 3); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array("INT", [4, 5, 6]); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest.testUUIDArray = function() { - console.log("testUUIDArray"); - this._testArray(null, null, "uuid", new proton.Data.Uuid(), new proton.Data.Uuid(), new proton.Data.Uuid()); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array("UUID", [new proton.Data.Uuid(), new proton.Data.Uuid(), new proton.Data.Uuid()]); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest.testEmptyArray = function() { - console.log("testEmptyArray"); - this._testArray(null, null, "null"); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array(); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest.testDescribedEmptyArray = function() { - console.log("testDescribedEmptyArray"); - this._testArray("long", 0, "null"); - - // Now try using the proton.Data.Array class. - this.data.clear(); - var put = new proton.Data.Array((0).long()); - this.data.putARRAY(put); - var get = this.data.getARRAY(); - assert(get.equals(put)); - console.log("OK\n"); - }; - - DataTest._test = function(dtype, values) { - var values = Array.prototype.slice.apply(arguments, [1]); - var lastValue = values[values.length - 1]; - - // Default equality function. Note that we use valueOf because some of the - // types we are trying to compare (Symbol, Timestamp, Uuid etc.) are object - // types and we want to compare their value not whether they are the same object. - var eq = function(x, y) {return x.valueOf() === y.valueOf();}; - - if (typeof lastValue === 'function') { - eq = values.pop(); - } - - dtype = dtype.toUpperCase(); - var ntype = proton.Data[dtype]; - var putter = 'put' + dtype; - var getter = 'get' + dtype; - - for (var i = 0; i < values.length; i++) { - var v = values[i]; - /* - * Replace the array element with its value. We do this to make testing - * simpler for Binary elements. In the case of Binary putBINARY "consumes" - * the data, in other words ownership of the underlying raw data transfers - * to the Data object so the v object becomes "empty" after calling the - * putter. Calling its valueOf() happens to call its toString() which - * provides a stringified version of the Binary whilst also working for - * the other data types we want to test too. - */ - values[i] = v.valueOf(); - this.data[putter](v); - var gotten = this.data[getter](); - assert(eq(gotten, values[i])); - } - - this.data.rewind(); - - for (var i = 0; i < values.length; i++) { - var v = values[i]; - var vtype = this.data.next(); - assert(vtype === ntype); - var gotten = this.data[getter](); - assert(eq(gotten, v)); - } - - // Test encode and decode methods. - var encoded = this.data.encode(); - var copy = new proton.Data(); - while (encoded) { - encoded = copy.decode(encoded); - } - copy.rewind(); - - for (var i = 0; i < values.length; i++) { - var v = values[i]; - var vtype = copy.next(); - assert(vtype === ntype); - var gotten = copy[getter](); - assert(eq(gotten, v)); - } - copy.free(); - }; - - DataTest.testInt = function() { - console.log("testInt"); - this._test("int", 1, 2, 3, -1, -2, -3); - console.log("OK\n"); - - }; - - DataTest.testString = function() { - console.log("testString"); - this._test("string", "one", "two", "three", "this is a test", ""); - console.log("OK\n"); - }; - - DataTest.testBigString = function() { - // Try a 2MB string, this is about as big as we can cope with using the default - // emscripten heap size. - console.log("testBigString"); - var data = ""; - for (var i = 0; i < 2000000; i++) { - data += "*"; - } - var string = "start\n" + data + "\nfinish\n"; - this._test("string", string); - console.log("OK\n"); - }; - -/* TODO - currently emscripten isn't respecting Module['TOTAL_STACK'] so setting PROTON_TOTAL_STACK doesn't actually increase the stack size. - DataTest.testReallyBigString = function() { - // Try a 20MB string, this needs a bigger emscripten heap size and more stack - // as the default stack is 5MB and strings are allocated on the stack. - console.log("testReallyBigString"); - var data = ""; - for (var i = 0; i < 20000000; i++) { - data += "*"; - } - var string = "start\n" + data + "\nfinish\n"; - this._test("string", string); - console.log("OK\n"); - }; -*/ - - DataTest.testFloat = function() { - console.log("testFloat"); - // We have to use a special comparison here because JavaScript internally - // only uses doubles and converting between floats and doubles is imprecise. - this._test("float", 0, 1, 2, 3, 0.1, 0.2, 0.3, -1, -2, -3, -0.1, -0.2, -0.3, - function(x, y) {return (x - y < 0.000001);}); - console.log("OK\n"); - }; - - DataTest.testDouble = function() { - console.log("testDouble"); - this._test("double", 0, 1, 2, 3, 0.1, 0.2, 0.3, -1, -2, -3, -0.1, -0.2, -0.3); - console.log("OK\n"); - }; - - DataTest.testBinary = function() { - console.log("testBinary"); - this._test("binary", new proton.Data.Binary(["t".char(), "h".char(), "i".char(), "s".char()]), - new proton.Data.Binary("is"), new proton.Data.Binary("a"), new proton.Data.Binary("test"), - new proton.Data.Binary("of"), new proton.Data.Binary("двоиÑнÑе даннÑе")); - console.log("OK\n"); - }; - - DataTest.testSymbol = function() { - console.log("testSymbol"); - this._test("symbol", new proton.Data.Symbol("this is a symbol test"), - new proton.Data.Symbol("bleh"), new proton.Data.Symbol("blah")); - console.log("OK\n"); - }; - - DataTest.testTimestamp = function() { - console.log("testTimestamp"); - this._test("timestamp", new Date(0), new Date(12345), new Date(1000000)); - console.log("OK\n"); - }; - - DataTest.testChar = function() { - console.log("testChar"); - this._test("char", 'a', 'b', 'c', '\u1234'); - console.log("OK\n"); - }; - - DataTest.testUUID = function() { - console.log("testUUID"); - this._test("uuid", new proton.Data.Uuid(), new proton.Data.Uuid(), new proton.Data.Uuid()); - console.log("OK\n"); - }; - - /* TODO - DataTest.testDecimal32 = function() { - console.log("testDecimal32"); - //this._test("decimal32", 0, 1, 2, 3, 4, Math.pow(2, 30)); - }; - - DataTest.testDecimal64 = function() { - console.log("testDecimal64"); - //this._test("decimal64", 0, 1, 2, 3, 4, Math.pow(2, 60)); - }; - - DataTest.testDecimal128 = function() { - console.log("testDecimal128"); - // TODO - }; - */ - - DataTest.testCopy = function() { - console.log("testCopy"); - this.data.putDESCRIBEDNODE(); - this.data.enter(); - this.data.putULONG(123); - this.data.putMAPNODE(); - this.data.enter(); - this.data.putSTRING("pi"); - this.data.putDOUBLE(3.14159265359); - this.data.exit(); - this.data.exit(); - - var dst = this.data.copy(); - var copy = dst.format(); - var orig = this.data.format(); - assert(copy === orig); - dst.free(); - console.log("OK\n"); - }; - - DataTest.testCopyNested = function() { - console.log("testCopyNested"); - var nested = [1, 2, 3, [4, 5, 6], 7, 8, 9]; - this.data.putObject(nested); - var dst = this.data.copy(); - assert(dst.format() === this.data.format()); - dst.free(); - console.log("OK\n"); - }; - - DataTest.testCopyNestedArray = function() { - console.log("testCopyNestedArray"); - var nested = [new proton.Data.Array("LIST", [ - ["first", [new proton.Data.Array("INT", [1, 2, 3]), "this"]], - ["second", [new proton.Data.Array("INT", [1, 2, 3]), "is"]], - ["third", [new proton.Data.Array("INT", [1, 2, 3]), "fun"]] - ]), - "end"]; - this.data.putObject(nested); - var dst = this.data.copy(); - assert(dst.format() === this.data.format()); - dst.free(); - console.log("OK\n"); - }; - - DataTest.testRoundTrip = function() { - console.log("testRoundTrip"); - var obj = {key: new Date(1234), - 123: "blah", - c: "bleh", - desc: new proton.Data.Described("http://example.org", new proton.Data.Symbol("url")), - array: new proton.Data.Array("INT", [1, 2, 3]), - list: [1, 2, 3, null, 4], - boolean: true}; - // Serialise obj into this.data. - this.data.putObject(obj); - - // Encode this.data into a Binary representation. - var enc = this.data.encode(); - - // Create a new Data instance and decode from the Binary representation - // consuming the Binary contents in the process. - var data = new proton.Data(); - data.decode(enc); - - assert(data.format() === this.data.format()); - - // Deserialize from the copied Data instance into a new JavaScript Object. - data.rewind(); - assert(data.next()); - var copy = data.getObject(); - - // Create yet another Data instance and serialise the new Object into that. - var data1 = new proton.Data(); - data1.putObject(copy); - - // Compare the round tripped Data with the original one. - assert(data1.format() === this.data.format()); - - data.free(); - data1.free(); - console.log("OK\n"); - }; - - DataTest.testLookup = function() { - console.log("testLookup"); - var obj = {key: "value", - pi: 3.14159, - list: [1, 2, 3, 4]}; - // Serialise obj into this.data. - this.data.putObject(obj); - this.data.rewind(); - this.data.next(); - this.data.enter(); - this.data.narrow(); - assert(this.data.lookup("pi")); - assert(this.data.getObject() === 3.14159); - this.data.rewind(); - assert(this.data.lookup("key")); - assert(this.data.getObject() === "value"); - this.data.rewind(); - assert(this.data.lookup("list")); - assert(this.data.getObject().toString() === "1,2,3,4"); - this.data.widen(); - this.data.rewind(); - assert(!this.data.lookup("pi")); - console.log("OK\n"); - }; - - DataTest.run(); -} else { - console.error("codec.js should be run in Node.js"); -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/message.js ---------------------------------------------------------------------- diff --git a/tests/javascript/message.js b/tests/javascript/message.js deleted file mode 100755 index 8e6ec2e..0000000 --- a/tests/javascript/message.js +++ /dev/null @@ -1,359 +0,0 @@ -#!/usr/bin/env node -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -/** - * This is a fairly literal JavaScript port of message.py used to unit test the - * proton.Message wrapper class. - */ - -// Check if the environment is Node.js and if not log an error and exit. -if (typeof process === 'object' && typeof require === 'function') { - var unittest = require("./unittest.js"); - var assert = require("assert"); - var proton = require("qpid-proton-messenger"); - - /** - * JavaScript Implementation of Python's range() function taken from: - * http://stackoverflow.com/questions/8273047/javascript-function-similar-to-python-range - */ - var range = function(start, stop, step) { - if (typeof stop == 'undefined') { - // one param defined - stop = start; - start = 0; - }; - if (typeof step == 'undefined') { - step = 1; - }; - if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) { - return []; - }; - var result = []; - for (var i = start; step > 0 ? i < stop : i > stop; i += step) { - result.push(i); - }; - return result; - }; - - - // Extend TestCase by creating a new Test class as we're using it in a few places. - var Test = function() { // Test constructor. - /** - * The following call is the equivalent of "super" in Java. It's not necessary - * here as the unittest.TestCase constructor doesn't set any state, but it - * is the correct thing to do when implementing classical inheritance in - * JavaScript so I've kept it here as a useful reminder of the "pattern". - */ - //unittest.TestCase.prototype.constructor.call(this); - }; - - Test.prototype = new unittest.TestCase(); // Here's where the inheritance occurs. - Test.prototype.constructor = Test; // Otherwise instances of Test would have a constructor of unittest.TestCase. - - Test.prototype.setUp = function() { - this.msg = new proton.Message(); - }; - - Test.prototype.tearDown = function() { - this.msg.free(); - this.msg = null; - }; - - - // Extend Test more simply by creating a prototype instance and adding test methods as properties. - - var AccessorsTest = new Test(); - - AccessorsTest._test = function(name, defaultValue, values) { - /** - * For the case of Binary values under test we retrieve their toString(). - * This is because the methods under test "consume" the data, in other - * words ownership of the underlying raw data transfers to the Message - * object so the sent Binary object becomes "empty" after calling the setter. - * In addition Binary values merely contain a "pointer" to the raw data - * so even a "deepEqual" comparison won't accurately compare two Binaries. - * For these tests we "cheat" and store an array of characters in the - * Binary so that we can use their String forms for comparison tests. - * - * We also get the String value of Uuid for the case of setUserID because - * that method transparently creates Binary values from the String form - * of non-Binary data passed to it. It's a convenience method, but makes - * testing somewhat more fiddly. - */ - - // First get the values passed to the method. - var values = Array.prototype.slice.apply(arguments, [2]); - // If the first element of values is actually an Array then use the Array. - // This scenario is what happens in the tests that use the range() function. - values = (Object.prototype.toString.call(values[0]) === '[object Array]') ? values[0] : values; - - // Work out the accessor/mutator names noting that boolean accessors use "is" not "get". - var setter = 'set' + name; - var getter = (typeof defaultValue === 'boolean') ? 'is' + name : 'get' + name; - - // Get the message's default value first. - var d = this.msg[getter](); - d = (d instanceof proton.Data.Binary) ? d.toString() : d; - - // Compare the message's default with the expected default value passed in the test case. - assert.deepEqual(d, defaultValue); - - for (var i = 0; i < values.length; i++) { - var v = values[i]; - - var value = (v instanceof proton.Data.Binary || - (name === 'UserID' && v instanceof proton.Data.Uuid)) ? v.toString() : v; - value = (v instanceof Date) ? v.valueOf() : v; - - this.msg[setter](v); // This call will "consume" Binary data. - - var gotten = this.msg[getter](); - gotten = (gotten instanceof proton.Data.Binary) ? gotten.toString() : gotten; - gotten = (gotten instanceof Date) ? gotten.valueOf() : v; - - assert.deepEqual(value, gotten); - } - }; - - AccessorsTest._testString = function(name) { - this._test(name, "", "asdf", "fdsa", ""); - }; - - AccessorsTest._testTime = function(name) { - // The ExpiryTime and CreationTime methods can take either a number or a Date Object. - this._test(name, new Date(0), new Date(0), 123456789, new Date(987654321)); - }; - - AccessorsTest.testID = function() { - console.log("testID"); - this._test("ID", null, "bytes", null, 123, "string", new proton.Data.Uuid(), new proton.Data.Binary("ÐÐÐÐРЫ")); - console.log("OK\n"); - }; - - AccessorsTest.testCorrelationID = function() { - console.log("testCorrelationID"); - this._test("CorrelationID", null, "bytes", null, 123, "string", new proton.Data.Uuid(), new proton.Data.Binary("ÐÐÐÐРЫ")); - console.log("OK\n"); - }; - - AccessorsTest.testDurable = function() { - console.log("testDurable"); - this._test("Durable", false, true, false); - console.log("OK\n"); - }; - - AccessorsTest.testPriority = function() { - console.log("testPriority"); - this._test("Priority", proton.Message.DEFAULT_PRIORITY, range(0, 256)); - console.log("OK\n"); - }; - - AccessorsTest.testTTL = function() { - console.log("testTTL"); - this._test("TTL", 0, range(12345, 54321)); - console.log("OK\n"); - }; - - AccessorsTest.testFirstAcquirer = function() { - console.log("testFirstAcquirer"); - this._test("FirstAcquirer", false, true, false); - console.log("OK\n"); - }; - - AccessorsTest.testDeliveryCount = function() { - console.log("testDeliveryCount"); - this._test("DeliveryCount", 0, range(0, 1024)); - console.log("OK\n"); - }; - - AccessorsTest.testUserID = function() { - console.log("testUserID"); - this._test("UserID", "", "asdf", "fdsa", 123, new proton.Data.Binary("ÐÐÐÐРЫ"), new proton.Data.Uuid(), ""); - console.log("OK\n"); - }; - - AccessorsTest.testAddress = function() { - console.log("testAddress"); - this._testString("Address"); - console.log("OK\n"); - }; - - AccessorsTest.testSubject = function() { - console.log("testSubject"); - this._testString("Subject"); - console.log("OK\n"); - }; - - AccessorsTest.testReplyTo = function() { - console.log("testReplyTo"); - this._testString("ReplyTo"); - console.log("OK\n"); - }; - - AccessorsTest.testContentType = function() { - console.log("testContentType"); - this._testString("ContentType"); - console.log("OK\n"); - }; - - AccessorsTest.testContentEncoding = function() { - console.log("testContentEncoding"); - this._testString("ContentEncoding"); - console.log("OK\n"); - }; - - AccessorsTest.testExpiryTime = function() { - console.log("testExpiryTime"); - this._testTime("ExpiryTime"); - console.log("OK\n"); - }; - - AccessorsTest.testCreationTime = function() { - console.log("testCreationTime"); - this._testTime("CreationTime"); - console.log("OK\n"); - }; - - AccessorsTest.testGroupID = function() { - console.log("testGroupID"); - this._testString("GroupID"); - console.log("OK\n"); - }; - - AccessorsTest.testGroupSequence = function() { - console.log("testGroupSequence"); - this._test("GroupSequence", 0, 0, -10, 10, 20, -20); - console.log("OK\n"); - }; - - AccessorsTest.testReplyToGroupID = function() { - console.log("testReplyToGroupID"); - this._testString("ReplyToGroupID"); - console.log("OK\n"); - }; - - - var CodecTest = new Test(); - - CodecTest.testRoundTrip = function() { - console.log("testRoundTrip"); - this.msg.setID("asdf"); - this.msg.setCorrelationID(new proton.Data.Uuid()); - this.msg.setTTL(3); - this.msg.setPriority(100); - this.msg.setAddress("address"); - this.msg.setSubject("subject"); - this.msg.body = "Hello World!"; - - var data = this.msg.encode(); - var msg2 = new proton.Message(); - msg2.decode(data); - - assert(this.msg.getID() === msg2.getID()); - assert(this.msg.getCorrelationID().toString() === msg2.getCorrelationID().toString()); - assert(this.msg.getTTL() === msg2.getTTL()); - assert(this.msg.getPriority() === msg2.getPriority()); - assert(this.msg.getAddress() === msg2.getAddress()); - assert(this.msg.getSubject() === msg2.getSubject()); - assert(this.msg.body === msg2.body); - - msg2.free(); - console.log("OK\n"); - }; - - /** - * This test tests the transparent serialization and deserialization of JavaScript - * Objects using the AMQP type system (this is the default behaviour). - */ - CodecTest.testRoundTripBodyObject = function() { - console.log("testRoundTripBodyObject"); - this.msg.setAddress("address"); - this.msg.body = {array: [1, 2, 3, 4], object: {name: "John Smith", age: 65}}; - - var data = this.msg.encode(); - var msg2 = new proton.Message(); - msg2.decode(data); - - assert(this.msg.getAddress() === msg2.getAddress()); - assert(this.msg.getContentType() === msg2.getContentType()); - assert.deepEqual(this.msg.body, msg2.body); - - msg2.free(); - console.log("OK\n"); - }; - - /** - * This test tests the transparent serialization and deserialization of JavaScript - * Objects as JSON. In this case the "on-the-wire" representation is an AMQP binary - * stored in the AMQP data section. - */ - CodecTest.testRoundTripBodyObjectAsJSON = function() { - console.log("testRoundTripBodyObjectAsJSON"); - this.msg.setAddress("address"); - this.msg.setContentType("application/json"); - this.msg.body = {array: [1, 2, 3, 4], object: {name: "John Smith", age: 65}}; - - var data = this.msg.encode(); - var msg2 = new proton.Message(); - msg2.decode(data); - - assert(this.msg.getAddress() === msg2.getAddress()); - assert(this.msg.getContentType() === msg2.getContentType()); - assert.deepEqual(this.msg.body, msg2.body); - - msg2.free(); - console.log("OK\n"); - }; - - /** - * By default the API will encode using the AMQP type system, but is the content-type - * is set it will encode as an opaque Binary in an AMQP data section. For certain - * types however this isn't the most useful thing. For application/json (see - * previous test) we convert to and from JavaScript Objects and for text/* MIME - * types the API will automatically convert the received Binary into a String. - */ - CodecTest.testRoundTripMIMETextObject = function() { - console.log("testRoundTripMIMETextObject"); - this.msg.setAddress("address"); - this.msg.setContentType("text/plain"); - this.msg.body = "some text"; - - var data = this.msg.encode(); - var msg2 = new proton.Message(); - msg2.decode(data); - - assert(this.msg.getAddress() === msg2.getAddress()); - assert(this.msg.getContentType() === msg2.getContentType()); - assert.deepEqual(this.msg.body, msg2.body); - - msg2.free(); - console.log("OK\n"); - }; - - - // load and save are deprecated so not implemented in the JavaScript binding. - - AccessorsTest.run(); - CodecTest.run(); -} else { - console.error("message.js should be run in Node.js"); -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/msgr-recv.js ---------------------------------------------------------------------- diff --git a/tests/javascript/msgr-recv.js b/tests/javascript/msgr-recv.js deleted file mode 100755 index 24bdcae..0000000 --- a/tests/javascript/msgr-recv.js +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env node -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -var Statistics = function() { - this.startTime = 0; - this.latencySamples = 0; - this.latencyTotal = 0; - this.latencyMin = 0; - this.latencyMax = 0; -}; - -Statistics.prototype.start = function() { - this.startTime = +new Date(); -}; - -Statistics.prototype.messageReceived = function(msg) { - var ts = +msg.getCreationTime(); // The + gets the value of the returned Data Object. - if (ts) { - var l = +new Date() - ts; - if (l) { - this.latencyTotal += l; - this.latencySamples += 1; - if (this.latencySamples === 1) { - this.latencyMin = this.latencyMax = l; - } else { - if (this.latencyMin > l) { - this.latencyMin = l; - } - if (this.latencyMax < l) { - this.latencyMax = l; - } - } - } - } -}; - -Statistics.prototype.report = function(sent, received) { - var seconds = (+new Date() - this.startTime)/1000; - console.log("Messages sent: " + sent + " received: " + received); - console.log("Total time: " + seconds + " seconds"); - if (seconds) { - console.log("Throughput: " + (sent/seconds) + " msgs/sec sent"); - console.log("Throughput: " + (received/seconds) + " msgs/sec received"); - } - - if (this.latencySamples) { - console.log("Latency (ms): " + this.latencyMin + " min " + - this.latencyMax + " max " + - (this.latencyTotal/this.latencySamples) + " avg"); - } -}; - - -var MessengerReceive = function(opts, callback) { - //if (opts.verbose) { - console.log("subscriptions = " + opts.subscriptions); - console.log("messageCount = " + opts.messageCount); - console.log("recvCount = " + opts.recvCount); - console.log("incomingWindow = " + opts.incomingWindow); - console.log("reportInterval = " + opts.reportInterval); - console.log("reply = " + opts.reply); - console.log("forwardingTargets = " + opts.forwardingTargets); - console.log("name = " + opts.name); - console.log("readyText = " + opts.readyText); - console.log("verbose = " + opts.verbose); - console.log(); - //} - - var stats = new Statistics(); - var running = true; // Used to avoid calling stop multiple times. - var sent = 0; - var received = 0; - var forwardingIndex = 0; - - var message = new proton.Message(); - var messenger = new proton.Messenger(opts.name); - - var pumpData = function() { - if (opts.verbose) { - console.log("Calling messenger.recv(" + opts.recvCount + ")"); - } - messenger.recv(opts.recvCount); - - if (opts.verbose) { - console.log("Messages on incoming queue: " + messenger.incoming()); - } - while (messenger.incoming()) { - // start the timer only after receiving the first msg - if (received === 0) { - stats.start(); - } - - messenger.get(message); - received += 1; - //console.log("Address: " + message.getAddress()); - //console.log("CorrelationID: " + message.getCorrelationID()); - //console.log("Content: " + message.body); - stats.messageReceived(message); - - if (opts.reply) { - var replyTo = message.getReplyTo(); - if (replyTo) { - if (opts.verbose) { - console.log("Replying to: " + replyTo); - } - message.setAddress(replyTo); - message.setCreationTime(new Date()); - messenger.put(message); - sent += 1; - } - } - } - - // Check for exit condition. - if (running && !(opts.messageCount === 0 || received < opts.messageCount)) { - // Wait for outgoing to be zero before calling stop so pending sends - // get flushed properly. - if (messenger.outgoing()) { - if (opts.verbose) { - console.log("Flushing pending sends"); - } - } else { -//console.log("******* messenger.stop()"); - messenger.stop(); - running = false; - stats.report(sent, received); - if (callback) { - callback(stats); - } - } - } - - if (messenger.isStopped()) { -//console.log("-------------------- messenger.isStopped()"); - message.free(); - messenger.free(); - } - }; - - this.start = function() { - messenger.on('error', function(error) {console.log("** error **"); console.log(error);}); - messenger.on('work', pumpData); - messenger.on('subscription', function(subscription) { - // Hack to let test scripts know when the receivers are ready (so that the - // senders may be started). -console.log("****** subscription " + subscription.getAddress() + " succeeded") - if (opts.readyText) { - console.log(opts.readyText); - } - }); - - if (opts.incomingWindow) { - messenger.setIncomingWindow(opts.incomingWindow); - } - messenger.start(); - - // Unpack addresses that were specified using comma-separated list - var subscriptions = opts.subscriptions.split(','); - for (var i = 0; i < subscriptions.length; i++) { - var subscription = subscriptions[i]; - if (opts.verbose) { - console.log("Subscribing to " + subscription); - } - messenger.subscribe(subscription); - } - }; -}; - - -// Check if the environment is Node.js and if not log an error and exit. -if (typeof process === 'object' && typeof require === 'function') { - var usage = - 'Usage: msgr-recv [OPTIONS]\n' + - ' -a <addr>[,<addr>]* \tAddresses to listen on [amqp://~0.0.0.0]\n' + - ' -c # \tNumber of messages to receive before exiting [0=forever]\n' + - ' -b # \tArgument to Messenger::recv(n) [2048]\n' + - ' -w # \tSize for incoming window [0]\n' + - ' -e # \t# seconds to report statistics, 0 = end of test [0] *TBD*\n' + - ' -R \tSend reply if \'reply-to\' present\n' + - ' -F <addr>[,<addr>]* \tAddresses used for forwarding received messages\n' + - ' -N <name> \tSet the container name to <name>\n' + - ' -X <text> \tPrint \'<text>\\n\' to stdout after all subscriptions are created\n' + - ' -V \tEnable debug logging\n'; - - // Increase the virtual heap available to the emscripten compiled C runtime. - // This allows us to test a really big string. - PROTON_TOTAL_MEMORY = 140000000; - PROTON_TOTAL_STACK = 25000000; // Needs to be bigger than the biggest string. - var proton = require("qpid-proton-messenger"); - - var opts = {}; - opts.subscriptions = 'amqp://~0.0.0.0'; - opts.messageCount = 0; - opts.recvCount = -1; - opts.incomingWindow; - opts.reportInterval = 0; - opts.reply = false; - opts.forwardingTargets; - opts.name; - opts.readyText; - opts.verbose = false; - - var args = process.argv.slice(2); - if (args.length > 0) { - if (args[0] === '-h' || args[0] === '--help') { - console.log(usage); - process.exit(0); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - if (arg.charAt(0) === '-') { - if (arg === '-V') { - opts.verbose = true; - } else if (arg === '-R') { - opts.reply = true; - } else { - i++; - var val = args[i]; - if (arg === '-a') { - opts.subscriptions = val; - } else if (arg === '-c') { - opts.messageCount = val; - } else if (arg === '-b') { - opts.recvCount = val; - } else if (arg === '-w') { - opts.incomingWindow = val; - } else if (arg === '-e') { - opts.reportInterval = val; - } else if (arg === '-F') { - opts.forwardingTargets = val; - } else if (arg === '-N') { - opts.name = val; - } else if (arg === '-X') { - opts.readyText = val; - } - } - } - } - } - - var receiver = new MessengerReceive(opts); - receiver.start(); -} else { - console.error("msgr-recv.js should be run in Node.js"); -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/msgr-send-common.js ---------------------------------------------------------------------- diff --git a/tests/javascript/msgr-send-common.js b/tests/javascript/msgr-send-common.js deleted file mode 100644 index 4e68097..0000000 --- a/tests/javascript/msgr-send-common.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -/** - * This file is essentially a "module" that is common to msgr-send.js and msgr-send.html. - * It defines the Statistics and MessengerSend classes and if the environment is Node.js - * it will import qpid-proton-messenger and export MessengerSend for use in msgr-send.js. - * Because it's really a module/library trying to execute msgr-send-common.js won't - * itself do anything terribly exciting. - */ - -var Statistics = function() { - this.startTime = 0; - this.latencySamples = 0; - this.latencyTotal = 0; - this.latencyMin = 0; - this.latencyMax = 0; -}; - -Statistics.prototype.start = function() { - this.startTime = +new Date(); -}; - -Statistics.prototype.messageReceived = function(msg) { - var ts = +msg.getCreationTime(); // The + gets the value of the returned Data Object. - if (ts) { - var l = +new Date() - ts; - if (l) { - this.latencyTotal += l; - this.latencySamples += 1; - if (this.latencySamples === 1) { - this.latencyMin = this.latencyMax = l; - } else { - if (this.latencyMin > l) { - this.latencyMin = l; - } - if (this.latencyMax < l) { - this.latencyMax = l; - } - } - } - } -}; - -Statistics.prototype.report = function(sent, received) { - var seconds = (+new Date() - this.startTime)/1000; - console.log("Messages sent: " + sent + " received: " + received); - console.log("Total time: " + seconds + " seconds"); - if (seconds) { - console.log("Throughput: " + (sent/seconds) + " msgs/sec sent"); - console.log("Throughput: " + (received/seconds) + " msgs/sec received"); - } - - if (this.latencySamples) { - console.log("Latency (ms): " + this.latencyMin + " min " + - this.latencyMax + " max " + - (this.latencyTotal/this.latencySamples) + " avg"); - } -}; - - -var MessengerSend = function(opts, callback) { - //if (opts.verbose) { - console.log("addresses = " + opts.addresses); - console.log("messageCount = " + opts.messageCount); - console.log("messageSize = " + opts.messageSize); - console.log("recvCount = " + opts.recvCount); - console.log("sendBatch = " + opts.sendBatch); - console.log("outgoingWindow = " + opts.outgoingWindow); - console.log("reportInterval = " + opts.reportInterval); - console.log("getReplies = " + opts.getReplies); - console.log("name = " + opts.name); - console.log("verbose = " + opts.verbose); - console.log(); - //} - - var stats = new Statistics(); - var targets = []; - var running = true; // Used to avoid calling stop multiple times. - var sent = 0; - var received = 0; - - var message = new proton.Message(); - var replyMessage = new proton.Message(); - var messenger = new proton.Messenger(opts.name); - - // Retrieve replies and return the number of reply messages received. - var processReplies = function() { - var received = 0; - if (opts.verbose) { - console.log("Calling messenger.recv(" + opts.recvCount + ")"); - } - messenger.recv(opts.recvCount); - - if (opts.verbose) { - console.log("Messages on incoming queue: " + messenger.incoming()); - } - while (messenger.incoming()) { - messenger.get(replyMessage); - received += 1; - //console.log("Address: " + replyMessage.getAddress()); - //console.log("Content: " + replyMessage.body); - stats.messageReceived(replyMessage); - } - return received; - }; - - // Send messages as fast as possible. This is analogous to the while loop in - // the Python msgr-send.py but we wrap in a function in JavaScript so that - // we can schedule on the JavaScript Event queue via setTimeout. This is needed - // otherwise the JavaScript Event loop is blocked and no data gets sent. - var sendData = function() { - var delay = 0; - while (opts.messageCount === 0 || (sent < opts.messageCount)) { - // Check the amount of data buffered on the socket, if it's non-zero - // exit the loop and call senData again after a short delay. This - // will throttle the send rate if necessary. - if (messenger.getBufferedAmount()) { -console.log("messenger.getBufferedAmount() = " + messenger.getBufferedAmount()); - delay = 100; - break; // Exit loop to check for exit condition and schedule to Event queue. - } - - var index = sent % targets.length; -//console.log("sent = " + sent + ", index = " + index); - - message.setAddress(targets[index]); - message.setCorrelationID(sent); - message.setCreationTime(new Date()); - messenger.put(message); - sent += 1; - - if (opts.sendBatch && (messenger.outgoing() >= opts.sendBatch)) { - if (opts.verbose) { - console.log("Calling messenger.send()") - } - messenger.send(); - - if (opts.getReplies) { - received += processReplies(); - } - break; // Exit loop to check for exit condition and yield to Event loop. - } - } - - // Check for exit condition. - if (running && !(opts.messageCount === 0 || (sent < opts.messageCount))) { - if (opts.getReplies && (received < sent)) { - received += processReplies(); - if (opts.verbose) { - console.log("Messages sent = " + sent + ", received = " + received); - } - } else if (messenger.outgoing()) { - if (opts.verbose) { - console.log("Flushing pending sends"); - } - messenger.send(); - } else { -//console.log("******* calling stop") - messenger.stop(); - running = false; - stats.report(sent, received); - if (callback) { - callback(stats); - } - } - } - - if (messenger.isStopped()) { -//console.log("-------------------- messenger.isStopped()"); - message.free(); - messenger.free(); - } else { - // schedule next call on the JavaScript Event queue. If we don't do this - // our messages won't get sent because none of the internal JavaScript - // network code will get any CPU. - - // If available we call setImmediate rather than setTimeout when the delay - // is zero. setImmediate is more efficient, in particular I noticed that - // with Node.js v0.10.18 I could get max throughput and max out CPU using - // setTimeout, but when I upgraded to v0.10.33 my throughput dropped and - // my CPU was hovering around 55% but using setImmediate the performance - // improved again. My guess is that v0.10.18 was checking for zero delay - // and calling setImmediate internally whereas v0.10.33 wasn't, but I - // can't say for sure. TODO it's possible that some browsers might do a - // better job with setImmediate too (given what I'm seeing with Node.js), - // Chrome might be one such case, but it's not universally supported. - // It might be worth adding a proper polyfill to handle this. - if (delay === 0 && typeof setImmediate === 'function') { - setImmediate(sendData); - } else { - setTimeout(sendData, delay); - } - } - }; - - this.start = function() { - message.body = Array(+opts.messageSize + 1).join('X'); - message.setReplyTo('~'); - - messenger.on('error', function(error) { - console.log(error); - opts.messageCount = -1; // Force exit condition. - }); - - if (opts.outgoingWindow) { - messenger.setOutgoingWindow(opts.outgoingWindow); - } - messenger.start(); - - // Unpack targets that were specified using comma-separated list - var addresses = opts.addresses.split(','); - for (var i = 0; i < addresses.length; i++) { - var address = addresses[i]; - targets.push(address); - } - - stats.start(); - sendData(); - }; -}; - -// If running in Node.js import the proton library and export MessengerSend. -if (typeof module === 'object') { - var proton = require("qpid-proton-messenger"); - module.exports.MessengerSend = MessengerSend; -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/msgr-send.html ---------------------------------------------------------------------- diff --git a/tests/javascript/msgr-send.html b/tests/javascript/msgr-send.html deleted file mode 100644 index 531d886..0000000 --- a/tests/javascript/msgr-send.html +++ /dev/null @@ -1,123 +0,0 @@ -<!DOCTYPE html> <!-- HTML5 doctype --> - -<!-- - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you 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. ---> - -<html> - -<head> - <title>Proton Messenger Send Benchmark</title> - <meta http-equiv="content-type" content="text/html;charset=utf-8" /> - -<!-- - Import the Messenger Binding proton.js. Note that this simple example pulls - it from the node_modules/qpid-proton/lib, which is created by the build process - so that the node.js based examples "just work", in a real Web App you would - clearly need to copy the proton.js to your own server. - - In actual fact the CMake build actually builds proton.js into the directory: - <build>/proton-c/bindings/javascript - where <build> is the build directory created to run cmake from, it is then - copied to the node_modules/qpid-proton/lib directory. - - In this example we also set the global variable PROTON_TOTAL_MEMORY in order to - increase the virtual heap available to the emscripten compiled C runtime. It - is not really necessary to do this for this application as the default value - of 16777216 is fine, it is simply done here to illustrate how to do it. ---> -<script type="text/javascript">PROTON_TOTAL_MEMORY = 140000000;</script> -<script type="text/javascript">PROTON_TOTAL_STACK = 25000000;</script> -<script type="text/javascript" src="../../node_modules/qpid-proton-messenger/lib/proton-messenger.js"></script> -<script type="text/javascript" src="./msgr-send-common.js"></script> - -<script type="text/javascript"> - -var start = function() { - var opts = {}; - opts.addresses = document.getElementById("address").value; - opts.messageCount = parseInt(document.getElementById("messageCount").value, 10); - opts.messageSize = parseInt(document.getElementById("messageSize").value, 10); - opts.sendBatch = parseInt(document.getElementById("sendBatch").value, 10); - - opts.recvCount = -1; - opts.outgoingWindow; - opts.reportInterval = 0; - opts.getReplies = false; - opts.name; - opts.verbose = false; - - var sender = new MessengerSend(opts); - sender.start(); -}; - -</script> - -<style> -body -{ - font: 13px/1.5 Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; - overflow-x: hidden; /* Hide horizontal scrollbar */ - background: #dddddd; -} - -label -{ - display: block; - font-size: 17px; -} - -input, textarea -{ - font-size: 13px; - margin-bottom: 10px; -} -</style> - -</head> - -<body> -<div> - <label for="address">Address:</label> - <input type="text" id="address" size="40" - placeholder="amqp://user:password@host:port" - name="address" value="amqp://guest:[email protected]" /> -</div> -<div> - <label for="messageCount">Message Count:</label> - <input type="text" id="messageCount" size="40" - name="messageCount" value="0" /> -</div> -<div> - <label for="messageSize">Message Size:</label> - <input type="text" id="messageSize" size="40" - name="messageSize" value="1024" /> -</div> -<div> - <label for="sendBatch">Send Batch Size:</label> - <input type="text" id="sendBatch" size="40" - name="sendBatch" value="1024" /> -</div> - - -<div> - <input type="button" value="start" onclick="start()"/> -</div> -</body> - -</html> http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/msgr-send.js ---------------------------------------------------------------------- diff --git a/tests/javascript/msgr-send.js b/tests/javascript/msgr-send.js deleted file mode 100755 index 124f29e..0000000 --- a/tests/javascript/msgr-send.js +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env node -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -// Check if the environment is Node.js and if not log an error and exit. -if (typeof process === 'object' && typeof require === 'function') { - var usage = - 'Usage: msgr-send [OPTIONS]\n' + - ' -a <addr>[,<addr>]* \tThe target address [amqp://~0.0.0.0]\n' + - ' -c # \tNumber of messages to send before exiting [0=forever]\n' + - ' -b # \tSize of message body in bytes [1024]\n' + - ' -p # \tSend batches of # messages (wait for replies before sending next batch if -R) [1024]\n' + - ' -w # \tSize for outgoing window [0]\n' + - ' -e # \t# seconds to report statistics, 0 = end of test [0] *TBD*\n' + - ' -R \tWait for a reply to each sent message\n' + - ' -B # \tArgument to Messenger::recv(n) [-1]\n' + - ' -N <name> \tSet the container name to <name>\n' + - ' -V \tEnable debug logging\n'; - - // Increase the virtual heap available to the emscripten compiled C runtime. - // This allows us to test a really big string. - PROTON_TOTAL_MEMORY = 140000000; - PROTON_TOTAL_STACK = 25000000; // Needs to be bigger than the biggest string. - var proton = require("qpid-proton-messenger"); - var benchmark = require("./msgr-send-common.js"); - - var opts = {}; - opts.addresses = 'amqp://0.0.0.0'; - opts.messageCount = 0; - opts.messageSize = 1024; - opts.recvCount = -1; - opts.sendBatch = 1024; - opts.outgoingWindow; - opts.reportInterval = 0; - opts.getReplies = false; - opts.name; - opts.verbose = false; - - var args = process.argv.slice(2); - if (args.length > 0) { - if (args[0] === '-h' || args[0] === '--help') { - console.log(usage); - process.exit(0); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - if (arg.charAt(0) === '-') { - if (arg === '-V') { - opts.verbose = true; - } else if (arg === '-R') { - opts.getReplies = true; - } else { - i++; - var val = args[i]; - if (arg === '-a') { - opts.addresses = val; - } else if (arg === '-c') { - opts.messageCount = val; - } else if (arg === '-b') { - opts.messageSize = val; - } else if (arg === '-B') { - opts.recvCount = val; - } else if (arg === '-p') { - opts.sendBatch = val; - } else if (arg === '-w') { - opts.outgoingWindow = val; - } else if (arg === '-e') { - opts.reportInterval = val; - } else if (arg === '-N') { - opts.name = val; - } - } - } - } - } - - var sender = new benchmark.MessengerSend(opts); - sender.start(); -} else { - console.error("msgr-send.js should be run in Node.js"); -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/soak.js ---------------------------------------------------------------------- diff --git a/tests/javascript/soak.js b/tests/javascript/soak.js deleted file mode 100755 index 50bf921..0000000 --- a/tests/javascript/soak.js +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env node -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -// Check if the environment is Node.js and if not log an error and exit. -if (typeof process === 'object' && typeof require === 'function') { - var proton = require("qpid-proton-messenger"); - - var addr = 'guest:guest@localhost:5673'; - //var addr = 'localhost:5673'; - var address = 'amqp://' + addr; - console.log(address); - - var subscriptionQueue = ''; - var count = 0; - var start = 0; // Start Time. - - var message = new proton.Message(); - var messenger = new proton.Messenger(); - - var pumpData = function() { - while (messenger.incoming()) { - // The second parameter forces Binary payloads to be decoded as strings - // this is useful because the broker QMF Agent encodes strings as AMQP - // binary, which is a right pain from an interoperability perspective. - var t = messenger.get(message, true); - //console.log("Address: " + message.getAddress()); - //console.log("Content: " + message.body); - messenger.accept(t); - - if (count % 1000 === 0) { - var time = +new Date(); - console.log("count = " + count + ", duration = " + (time - start) + ", rate = " + ((count*1000)/(time - start))); - } - - sendMessage(); - } - - if (messenger.isStopped()) { - message.free(); - messenger.free(); - } - }; - - var sendMessage = function() { - var msgtext = "Message Number " + count; - count++; - - message.setAddress(address + '/' + subscriptionQueue); - message.body = msgtext; - messenger.put(message); - //messenger.settle(); - }; - - messenger.on('error', function(error) {console.log(error);}); - messenger.on('work', pumpData); - messenger.on('subscription', function(subscription) { - var subscriptionAddress = subscription.getAddress(); - var splitAddress = subscriptionAddress.split('/'); - subscriptionQueue = splitAddress[splitAddress.length - 1]; - - console.log("Subscription Queue: " + subscriptionQueue); - start = +new Date(); - sendMessage(); - }); - - //messenger.setOutgoingWindow(1024); - messenger.setIncomingWindow(1024); // The Java Broker seems to need this. - messenger.recv(); // Receive as many messages as messenger can buffer. - messenger.start(); - - messenger.subscribe('amqp://' + addr + '/#'); -} else { - console.error("soak.js should be run in Node.js"); -} - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/javascript/unittest.js ---------------------------------------------------------------------- diff --git a/tests/javascript/unittest.js b/tests/javascript/unittest.js deleted file mode 100644 index bc1567c..0000000 --- a/tests/javascript/unittest.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - * - */ - -/** - * The TestCase class provides a simple dependency-free Unit Test framework to - * automagically invoke methods that start with "test" on classes that extend it. - */ - -// TestCase Constructor -var TestCase = function() {}; - -// Enumerate all functions of the class and invoke those beginning with "test". -TestCase.prototype.run = function() { - for (var property in this) { - if ((typeof this[property] === 'function') && - property.lastIndexOf('test', 0) === 0) { - this.setUp(); - this[property](); - this.tearDown(); - } - } -}; - -TestCase.prototype.setUp = function() {}; -TestCase.prototype.tearDown = function() {}; - -module.exports.TestCase = TestCase; - http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/python/proton_tests/__init__.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/__init__.py b/tests/python/proton_tests/__init__.py index 66ce650..66792f5 100644 --- a/tests/python/proton_tests/__init__.py +++ b/tests/python/proton_tests/__init__.py @@ -22,7 +22,6 @@ import proton_tests.engine import proton_tests.message import proton_tests.handler import proton_tests.reactor -import proton_tests.messenger import proton_tests.sasl import proton_tests.transport import proton_tests.ssl http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0c9bb9ff/tests/python/proton_tests/common.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/common.py b/tests/python/proton_tests/common.py index 019c47d..b3f93fb 100644 --- a/tests/python/proton_tests/common.py +++ b/tests/python/proton_tests/common.py @@ -509,19 +509,6 @@ class MessengerReceiverValgrind(MessengerReceiverC): def __init__(self, suppressions=None): setup_valgrind(self) -class MessengerSenderPython(MessengerSender): - def __init__(self): - MessengerSender.__init__(self) - self._command = ["msgr-send.py"] - - -class MessengerReceiverPython(MessengerReceiver): - def __init__(self): - MessengerReceiver.__init__(self) - self._command = ["msgr-recv.py"] - - - class ReactorSenderC(MessengerSender): def __init__(self): MessengerSender.__init__(self) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
