You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by fa...@apache.org on 2014/09/06 13:23:14 UTC
svn commit: r1622849 [9/9] - in
/qpid/proton/branches/fadams-javascript-binding: ./ contrib/
contrib/proton-hawtdispatch/ contrib/proton-hawtdispatch/src/
contrib/proton-hawtdispatch/src/main/
contrib/proton-hawtdispatch/src/main/java/ contrib/proton-h...
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py Sat Sep 6 11:23:10 2014
@@ -389,7 +389,7 @@ class LinkTest(Test):
def teardown(self):
self.cleanup()
gc.collect()
- assert not gc.garbage
+ assert not gc.garbage, gc.garbage
def test_open_close(self):
assert self.snd.state == Endpoint.LOCAL_UNINIT | Endpoint.REMOTE_UNINIT
@@ -1081,11 +1081,9 @@ class IdleTimeoutTest(Test):
# now expire sndr
clock = 1.499
t_snd.tick(clock)
- try:
- self.pump()
- assert False, "Expected connection timeout did not happen!"
- except TransportException:
- pass
+ self.pump()
+ assert self.c2.state & Endpoint.REMOTE_CLOSED
+ assert self.c2.remote_condition.name == "amqp:resource-limit-exceeded"
class CreditTest(Test):
@@ -2069,51 +2067,66 @@ class DeliveryTest(Test):
def testCustom(self):
self.testDisposition(type=0x12345, value=CustomValue([1, 2, 3]))
-class EventTest(Test):
+class CollectorTest(Test):
- def teardown(self):
- self.cleanup()
+ def setup(self):
+ self.collector = Collector()
- def list(self, collector):
+ def drain(self):
result = []
while True:
- e = collector.peek()
+ e = self.collector.peek()
if e:
result.append(e)
- collector.pop()
+ self.collector.pop()
else:
break
return result
- def expect(self, collector, *types):
- events = self.list(collector)
- assert types == tuple([e.type for e in events]), (types, events)
- if len(events) == 1:
- return events[0]
- elif len(events) > 1:
- return events
+ def expect(self, *types):
+ return self.expect_oneof(types)
+
+ def expect_oneof(self, *sequences):
+ events = self.drain()
+ types = tuple([e.type for e in events])
+
+ for alternative in sequences:
+ if types == alternative:
+ if len(events) == 1:
+ return events[0]
+ elif len(events) > 1:
+ return events
+ else:
+ return
+
+ assert False, "actual events %s did not match any of the expected sequences: %s" % (events, sequences)
+
+class EventTest(CollectorTest):
+
+ def teardown(self):
+ self.cleanup()
def testEndpointEvents(self):
c1, c2 = self.connection()
- coll = Collector()
- c1.collect(coll)
- self.expect(coll)
+ c1.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
self.pump()
- self.expect(coll)
+ self.expect()
c2.open()
self.pump()
- self.expect(coll, Event.CONNECTION_REMOTE_STATE)
+ self.expect(Event.CONNECTION_REMOTE_OPEN)
self.pump()
- self.expect(coll)
+ self.expect()
ssn = c2.session()
snd = ssn.sender("sender")
ssn.open()
snd.open()
- self.expect(coll)
+ self.expect()
self.pump()
- self.expect(coll, Event.SESSION_REMOTE_STATE, Event.LINK_REMOTE_STATE)
+ self.expect(Event.SESSION_INIT, Event.SESSION_REMOTE_OPEN,
+ Event.LINK_INIT, Event.LINK_REMOTE_OPEN)
c1.open()
ssn2 = c1.session()
@@ -2121,61 +2134,188 @@ class EventTest(Test):
rcv = ssn2.receiver("receiver")
rcv.open()
self.pump()
- self.expect(coll,
- Event.CONNECTION_LOCAL_STATE,
- Event.TRANSPORT,
- Event.SESSION_LOCAL_STATE,
- Event.TRANSPORT,
- Event.LINK_LOCAL_STATE,
+ self.expect(Event.CONNECTION_OPEN, Event.TRANSPORT,
+ Event.SESSION_INIT, Event.SESSION_OPEN,
+ Event.TRANSPORT, Event.LINK_INIT, Event.LINK_OPEN,
Event.TRANSPORT)
+ rcv.close()
+ self.expect(Event.LINK_CLOSE, Event.TRANSPORT)
+ self.pump()
+ rcv.free()
+ del rcv
+ self.expect(Event.LINK_FINAL)
+ ssn2.free()
+ del ssn2
+ self.pump()
+ c1.free()
+ c1._transport.unbind()
+ self.expect(Event.SESSION_FINAL, Event.LINK_FINAL, Event.SESSION_FINAL,
+ Event.CONNECTION_FINAL)
+
+ def testConnectionINIT_FINAL(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ c.free()
+ self.expect(Event.CONNECTION_FINAL)
+
+ def testSessionINIT_FINAL(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ s = c.session()
+ self.expect(Event.SESSION_INIT)
+ s.free()
+ self.expect(Event.SESSION_FINAL)
+ c.free()
+ self.expect(Event.CONNECTION_FINAL)
+
+ def testLinkINIT_FINAL(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ s = c.session()
+ self.expect(Event.SESSION_INIT)
+ r = s.receiver("asdf")
+ self.expect(Event.LINK_INIT)
+ r.free()
+ self.expect(Event.LINK_FINAL)
+ c.free()
+ self.expect(Event.SESSION_FINAL, Event.CONNECTION_FINAL)
+
def testFlowEvents(self):
snd, rcv = self.link("test-link")
- coll = Collector()
- snd.session.connection.collect(coll)
+ snd.session.connection.collect(self.collector)
rcv.open()
rcv.flow(10)
self.pump()
- self.expect(coll, Event.LINK_REMOTE_STATE, Event.LINK_FLOW)
+ self.expect(Event.CONNECTION_INIT, Event.SESSION_INIT,
+ Event.LINK_INIT, Event.LINK_REMOTE_OPEN, Event.LINK_FLOW)
rcv.flow(10)
self.pump()
- self.expect(coll, Event.LINK_FLOW)
- return snd, rcv, coll
+ self.expect(Event.LINK_FLOW)
+ return snd, rcv
def testDeliveryEvents(self):
snd, rcv = self.link("test-link")
- coll = Collector()
- rcv.session.connection.collect(coll)
+ rcv.session.connection.collect(self.collector)
rcv.open()
rcv.flow(10)
self.pump()
- self.expect(coll, Event.LINK_LOCAL_STATE, Event.TRANSPORT, Event.TRANSPORT)
+ self.expect(Event.CONNECTION_INIT, Event.SESSION_INIT,
+ Event.LINK_INIT, Event.LINK_OPEN, Event.TRANSPORT)
snd.delivery("delivery")
snd.send("Hello World!")
snd.advance()
self.pump()
- self.expect(coll)
+ self.expect()
snd.open()
self.pump()
- self.expect(coll, Event.LINK_REMOTE_STATE, Event.DELIVERY)
+ self.expect(Event.LINK_REMOTE_OPEN, Event.DELIVERY)
+ rcv.session.connection._transport.unbind()
+ rcv.session.connection.free()
+ self.expect(Event.TRANSPORT, Event.LINK_FINAL, Event.SESSION_FINAL,
+ Event.CONNECTION_FINAL)
def testDeliveryEventsDisp(self):
- snd, rcv, coll = self.testFlowEvents()
+ snd, rcv = self.testFlowEvents()
snd.open()
dlv = snd.delivery("delivery")
snd.send("Hello World!")
assert snd.advance()
- self.expect(coll,
- Event.LINK_LOCAL_STATE,
- Event.TRANSPORT,
- Event.TRANSPORT,
- Event.TRANSPORT)
+ self.expect(Event.LINK_OPEN, Event.TRANSPORT)
self.pump()
- self.expect(coll)
+ self.expect(Event.LINK_FLOW)
rdlv = rcv.current
assert rdlv != None
assert rdlv.tag == "delivery"
rdlv.update(Delivery.ACCEPTED)
self.pump()
- event = self.expect(coll, Event.DELIVERY)
+ event = self.expect(Event.DELIVERY)
assert event.delivery == dlv
+
+class PeerTest(CollectorTest):
+
+ def setup(self):
+ CollectorTest.setup(self)
+ self.connection = Connection()
+ self.connection.collect(self.collector)
+ self.transport = Transport()
+ self.transport.bind(self.connection)
+ self.peer = Connection()
+ self.peer_transport = Transport()
+ self.peer_transport.bind(self.peer)
+ self.peer_transport.trace(Transport.TRACE_OFF)
+
+ def pump(self):
+ pump(self.transport, self.peer_transport)
+
+class TeardownLeakTest(PeerTest):
+
+ def doLeak(self, local, remote):
+ self.connection.open()
+ self.expect(Event.CONNECTION_INIT, Event.CONNECTION_OPEN, Event.TRANSPORT)
+
+ ssn = self.connection.session()
+ ssn.open()
+ self.expect(Event.SESSION_INIT, Event.SESSION_OPEN, Event.TRANSPORT)
+
+ snd = ssn.sender("sender")
+ snd.open()
+ self.expect(Event.LINK_INIT, Event.LINK_OPEN, Event.TRANSPORT)
+
+
+ self.pump()
+
+ self.peer.open()
+ self.peer.session_head(0).open()
+ self.peer.link_head(0).open()
+
+ self.pump()
+ self.expect_oneof((Event.CONNECTION_REMOTE_OPEN, Event.SESSION_REMOTE_OPEN,
+ Event.LINK_REMOTE_OPEN, Event.LINK_FLOW),
+ (Event.CONNECTION_REMOTE_OPEN, Event.SESSION_REMOTE_OPEN,
+ Event.LINK_REMOTE_OPEN))
+
+ if local:
+ snd.close() # ha!!
+ self.expect(Event.LINK_CLOSE, Event.TRANSPORT)
+ ssn.close()
+ self.expect(Event.SESSION_CLOSE, Event.TRANSPORT)
+ self.connection.close()
+ self.expect(Event.CONNECTION_CLOSE, Event.TRANSPORT)
+
+ if remote:
+ self.peer.link_head(0).close() # ha!!
+ self.peer.session_head(0).close()
+ self.peer.close()
+
+ self.pump()
+
+ if remote:
+ self.expect_oneof((Event.LINK_REMOTE_CLOSE, Event.SESSION_REMOTE_CLOSE,
+ Event.CONNECTION_REMOTE_CLOSE),
+ (Event.LINK_REMOTE_CLOSE, Event.LINK_FINAL,
+ Event.SESSION_REMOTE_CLOSE,
+ Event.CONNECTION_REMOTE_CLOSE))
+ else:
+ self.expect(Event.SESSION_REMOTE_CLOSE, Event.CONNECTION_REMOTE_CLOSE)
+
+ self.connection.free()
+ self.transport.unbind()
+
+ self.expect_oneof((Event.LINK_FINAL, Event.SESSION_FINAL, Event.CONNECTION_FINAL),
+ (Event.SESSION_FINAL, Event.CONNECTION_FINAL))
+
+ def testLocalRemoteLeak(self):
+ self.doLeak(True, True)
+
+ def testLocalLeak(self):
+ self.doLeak(True, False)
+
+ def testRemoteLeak(self):
+ self.doLeak(False, True)
+
+ def testLeak(self):
+ self.doLeak(False, False)
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/messenger.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/messenger.py?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/messenger.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/messenger.py Sat Sep 6 11:23:10 2014
@@ -124,10 +124,13 @@ class MessengerTest(Test):
self.server.put(msg)
self.server.settle()
- def testSendReceive(self, size=None):
+ def testSendReceive(self, size=None, address_size=None):
self.start()
msg = Message()
- msg.address="amqp://0.0.0.0:12345"
+ if address_size:
+ msg.address="amqp://0.0.0.0:12345/%s" % ("x"*address_size)
+ else:
+ msg.address="amqp://0.0.0.0:12345"
msg.reply_to = "~"
msg.subject="Hello World!"
body = "First the world, then the galaxy!"
@@ -166,6 +169,9 @@ class MessengerTest(Test):
def testSendReceive1M(self):
self.testSendReceive(1024*1024)
+ def testSendReceiveLargeAddress(self):
+ self.testSendReceive(address_size=2048)
+
# PROTON-285 - prevent continually failing test
def xtestSendBogus(self):
self.start()
@@ -689,26 +695,37 @@ class NBMessengerTest(common.Test):
def setup(self):
self.client = Messenger("client")
+ self.client2 = Messenger("client2")
self.server = Messenger("server")
+ self.messengers = [self.client, self.client2, self.server]
self.client.blocking = False
+ self.client2.blocking = False
self.server.blocking = False
self.server.start()
self.client.start()
+ self.client2.start()
self.address = "amqp://0.0.0.0:12345"
self.server.subscribe("amqp://~0.0.0.0:12345")
+ def _pump(self, timeout, work_triggers_exit):
+ for msgr in self.messengers:
+ if msgr.work(timeout) and work_triggers_exit:
+ return True
+ return False
+
def pump(self, timeout=0):
- while self.client.work(0) or self.server.work(0): pass
- self.client.work(timeout)
- self.server.work(timeout)
- while self.client.work(0) or self.server.work(0): pass
+ while self._pump(0, True): pass
+ self._pump(timeout, False)
+ while self._pump(0, True): pass
def teardown(self):
self.server.stop()
self.client.stop()
+ self.client2.stop()
self.pump()
assert self.server.stopped
assert self.client.stopped
+ assert self.client2.stopped
def testSmoke(self, count=1):
self.server.recv()
@@ -842,16 +859,10 @@ class NBMessengerTest(common.Test):
assert self.server.receiving == 8, self.server.receiving
# and none for this new client
- client2 = Messenger("client2")
- client2.blocking = False
- client2.start()
msg3 = Message()
msg3.address = self.address + "/msg3"
- client2.put(msg3)
- while client2.work(0):
- self.pump()
- assert self.server.incoming == 1, self.server.incoming
- assert self.server.receiving == 8, self.server.receiving
+ self.client2.put(msg3)
+ self.pump()
# eventually, credit will rebalance and all links will
# send a message
@@ -859,7 +870,6 @@ class NBMessengerTest(common.Test):
while time() < deadline:
sleep(.1)
self.pump()
- client2.work(0)
if self.server.incoming == 3:
break;
assert self.server.incoming == 3, self.server.incoming
@@ -867,7 +877,7 @@ class NBMessengerTest(common.Test):
# now tear down client two, this should cause its outstanding credit to be
# made available to the other links
- client2.stop()
+ self.client2.stop()
self.pump()
for i in range(4):
@@ -1017,3 +1027,59 @@ class SelectableMessengerTest(common.Tes
def testSelectable4096(self):
self.testSelectable(count=4096)
+
+
+class IdleTimeoutTest(common.Test):
+
+ def testIdleTimeout(self):
+ """
+ Verify that a Messenger connection is kept alive using empty idle frames
+ when a idle_timeout is advertised by the remote peer.
+ """
+ if "java" in sys.platform:
+ raise Skipped()
+ idle_timeout_secs = self.delay
+
+ try:
+ idle_server = common.TestServerDrain(idle_timeout=idle_timeout_secs)
+ idle_server.timeout = self.timeout
+ idle_server.start()
+
+ idle_client = Messenger("idle_client")
+ idle_client.timeout = self.timeout
+ idle_client.start()
+
+ idle_client.subscribe("amqp://%s:%s/foo" %
+ (idle_server.host, idle_server.port))
+ idle_client.work(idle_timeout_secs/10)
+
+ # wait up to 3x the idle timeout and hence verify that everything stays
+ # connected during that time by virtue of no Exception being raised
+ duration = 3 * idle_timeout_secs
+ deadline = time() + duration
+ while time() <= deadline:
+ idle_client.work(idle_timeout_secs/10)
+ continue
+
+ # confirm link is still active
+ cxtr = idle_server.driver.head_connector()
+ assert not cxtr.closed, "Connector has unexpectedly been closed"
+ conn = cxtr.connection
+ assert conn.state == (Endpoint.LOCAL_ACTIVE
+ | Endpoint.REMOTE_ACTIVE
+ ), "Connection has unexpectedly terminated"
+ link = conn.link_head(0)
+ while link:
+ assert link.state != (Endpoint.REMOTE_CLOSED
+ ), "Link unexpectedly closed"
+ link = link.next(0)
+
+ finally:
+ try:
+ idle_client.stop()
+ except:
+ pass
+ try:
+ idle_server.stop()
+ except:
+ pass
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/sasl.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/sasl.py?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/sasl.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/sasl.py Sat Sep 6 11:23:10 2014
@@ -45,16 +45,16 @@ class SaslTest(Test):
self.s2.server()
self.s2.done(SASL.OK)
- out1 = self.t1.output(1024)
- out2 = self.t2.output(1024)
+ out1 = self.t1.peek(1024)
+ self.t1.pop(len(out1))
+ out2 = self.t2.peek(1024)
+ self.t2.pop(len(out2))
- n = self.t2.input(out1)
- assert n == len(out1), (n, out1)
+ self.t2.push(out1)
assert self.s1.outcome is None
- n = self.t1.input(out2)
- assert n == len(out2), (n, out2)
+ self.t1.push(out2)
assert self.s2.outcome == SASL.OK
@@ -67,8 +67,9 @@ class SaslTest(Test):
self.s2.done(SASL.OK)
# send the server's OK to the client
- out2 = self.t2.output(1024)
- self.t1.input(out2)
+ out2 = self.t2.peek(1024)
+ self.t2.pop(len(out2))
+ self.t1.push(out2)
# do some work to generate AMQP data
c1 = Connection()
@@ -84,15 +85,17 @@ class SaslTest(Test):
out1_sasl_and_amqp = ""
t1_still_producing = True
while t1_still_producing:
- out1 = self.t1.output(1024)
+ out1 = self.t1.peek(1024)
+ self.t1.pop(len(out1))
out1_sasl_and_amqp += out1
t1_still_producing = out1
t2_still_consuming = True
while t2_still_consuming:
- num_consumed = self.t2.input(out1_sasl_and_amqp)
- out1_sasl_and_amqp = out1_sasl_and_amqp[num_consumed:]
- t2_still_consuming = num_consumed > 0 and len(out1_sasl_and_amqp) > 0
+ num = min(self.t2.capacity(), len(out1_sasl_and_amqp))
+ self.t2.push(out1_sasl_and_amqp[:num])
+ out1_sasl_and_amqp = out1_sasl_and_amqp[num:]
+ t2_still_consuming = num > 0 and len(out1_sasl_and_amqp) > 0
assert len(out1_sasl_and_amqp) == 0, (len(out1_sasl_and_amqp), out1_sasl_and_amqp)
@@ -129,9 +132,9 @@ class SaslTest(Test):
self.s1.mechanisms("ANONYMOUS")
self.s1.client()
- out1 = self.t1.output(1024)
- n = self.t2.input(out1)
- assert n == len(out1)
+ out1 = self.t1.peek(1024)
+ self.t1.pop(len(out1))
+ self.t2.push(out1)
self.s2.mechanisms("ANONYMOUS")
self.s2.server()
@@ -140,11 +143,11 @@ class SaslTest(Test):
c2.open()
self.t2.bind(c2)
- out2 = self.t2.output(1024)
- n = self.t1.input(out2)
- assert n == len(out2)
+ out2 = self.t2.peek(1024)
+ self.t2.pop(len(out2))
+ self.t1.push(out2)
- out1 = self.t1.output(1024)
+ out1 = self.t1.peek(1024)
assert len(out1) > 0
def testFracturedSASL(self):
@@ -156,17 +159,23 @@ class SaslTest(Test):
# self.t1.trace(Transport.TRACE_FRM)
- out = self.t1.output(1024)
- self.t1.input("AMQP\x03\x01\x00\x00")
- out = self.t1.output(1024)
- self.t1.input("\x00\x00\x00")
- out = self.t1.output(1024)
- self.t1.input("A\x02\x01\x00\x00\x00S@\xc04\x01\xe01\x06\xa3\x06GSSAPI\x05PLAIN\x0aDIGEST-MD5\x08AMQPLAIN\x08CRAM-MD5\x04NTLM")
- out = self.t1.output(1024)
- self.t1.input("\x00\x00\x00\x10\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00")
- out = self.t1.output(1024)
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
+ self.t1.push("AMQP\x03\x01\x00\x00")
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
+ self.t1.push("\x00\x00\x00")
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
+ self.t1.push("A\x02\x01\x00\x00\x00S@\xc04\x01\xe01\x06\xa3\x06GSSAPI\x05PLAIN\x0aDIGEST-MD5\x08AMQPLAIN\x08CRAM-MD5\x04NTLM")
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
+ self.t1.push("\x00\x00\x00\x10\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00")
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
while out:
- out = self.t1.output(1024)
+ out = self.t1.peek(1024)
+ self.t1.pop(len(out))
assert self.s1.outcome == SASL.OK, self.s1.outcome
@@ -182,3 +191,13 @@ class SaslTest(Test):
sasl1 = transport.sasl()
sasl2 = SASL(transport)
assert sasl1 is sasl2
+
+ def testSaslSkipped(self):
+ """Verify that the server (with SASL) correctly handles a client without SASL"""
+ self.t1 = Transport()
+ self.s2.mechanisms("ANONYMOUS")
+ self.s2.server()
+ self.s2.allow_skip(True)
+ self.pump()
+ assert self.s2.outcome == SASL.SKIPPED
+
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py Sat Sep 6 11:23:10 2014
@@ -73,6 +73,8 @@ class SslTest(common.Test):
client.connection.open()
server.connection.open()
self._pump(client, server)
+ if client.transport.closed:
+ return
assert client.ssl.protocol_name() is not None
client.connection.close()
server.connection.close()
@@ -214,11 +216,11 @@ class SslTest(common.Test):
client.connection.open()
server.connection.open()
- try:
- self._pump( client, server )
- assert False, "Server failed to reject bad certificate."
- except TransportException, e:
- pass
+ self._pump( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
def test_client_authentication_fail_no_cert(self):
""" Ensure that the server will fail a client that does not provide a
@@ -239,11 +241,11 @@ class SslTest(common.Test):
client.connection.open()
server.connection.open()
- try:
- self._pump( client, server )
- assert False, "Server failed to reject bad certificate."
- except TransportException, e:
- pass
+ self._pump( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
def test_client_server_authentication(self):
""" Require both client and server to mutually identify themselves.
@@ -314,11 +316,11 @@ class SslTest(common.Test):
client.connection.open()
server.connection.open()
- try:
- self._pump( client, server )
- assert False, "Client failed to reject bad certificate."
- except TransportException, e:
- pass
+ self._pump( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
del server
del client
@@ -409,11 +411,11 @@ class SslTest(common.Test):
client.connection.open()
server.connection.open()
- try:
- self._pump( client, server )
- assert False, "Server did not reject client as expected."
- except TransportException:
- pass
+ self._pump( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
def test_session_resume(self):
""" Test resume of client session.
@@ -563,11 +565,11 @@ class SslTest(common.Test):
client = SslTest.SslTestConnection( self.client_domain )
client.ssl.peer_hostname = "A1.Good.Server.domain.comX"
- try:
- self._do_handshake( client, server )
- assert False, "Expected connection to fail due to hostname mismatch"
- except TransportException:
- pass
+ self._do_handshake( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
del server
del client
self.teardown()
@@ -659,11 +661,11 @@ class SslTest(common.Test):
client = SslTest.SslTestConnection( self.client_domain )
client.ssl.peer_hostname = "FOO.PREfi.domain.com"
- try:
- self._do_handshake( client, server )
- assert False, "Expected connection to fail due to hostname mismatch"
- except TransportException:
- pass
+ self._do_handshake( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
del server
del client
self.teardown()
@@ -680,11 +682,11 @@ class SslTest(common.Test):
client = SslTest.SslTestConnection( self.client_domain )
client.ssl.peer_hostname = "PREfix.domain.COM"
- try:
- self._do_handshake( client, server )
- assert False, "Expected connection to fail due to hostname mismatch"
- except TransportException:
- pass
+ self._do_handshake( client, server )
+ assert client.transport.closed
+ assert server.transport.closed
+ assert client.connection.state & Endpoint.REMOTE_UNINIT
+ assert server.connection.state & Endpoint.REMOTE_UNINIT
self.teardown()
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/transport.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/transport.py?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/transport.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/transport.py Sat Sep 6 11:23:10 2014
@@ -27,37 +27,53 @@ class TransportTest(Test):
def setup(self):
self.transport = Transport()
+ self.peer = Transport()
+ self.conn = Connection()
+ self.peer.bind(self.conn)
def teardown(self):
self.transport = None
+ self.peer = None
+ self.conn = None
+
+ def drain(self):
+ while True:
+ p = self.transport.pending()
+ if p < 0:
+ return
+ elif p > 0:
+ bytes = self.transport.peek(p)
+ self.peer.push(bytes)
+ self.transport.pop(len(bytes))
+ else:
+ assert False
+
+ def assert_error(self, name):
+ assert self.conn.remote_container is None, self.conn.remote_container
+ self.drain()
+ # verify that we received an open frame
+ assert self.conn.remote_container is not None, self.conn.remote_container
+ # verify that we received a close frame
+ assert self.conn.state == Endpoint.LOCAL_UNINIT | Endpoint.REMOTE_CLOSED, self.conn.state
+ # verify that a framing error was reported
+ assert self.conn.remote_condition.name == name, self.conn.remote_condition
def testEOS(self):
- try:
- n = self.transport.input("")
- assert False, n
- except TransportException:
- pass
+ self.transport.push("") # should be a noop
+ self.transport.close_tail() # should result in framing error
+ self.assert_error(u'amqp:connection:framing-error')
def testPartial(self):
- n = self.transport.input("AMQ")
- assert n == 3, n
- try:
- n = self.transport.input("")
- assert False, n
- except TransportException:
- pass
+ self.transport.push("AMQ") # partial header
+ self.transport.close_tail() # should result in framing error
+ self.assert_error(u'amqp:connection:framing-error')
def testGarbage(self, garbage="GARBAGE_"):
- try:
- n = self.transport.input(garbage)
- assert False, n
- except TransportException, e:
- assert "AMQP header mismatch" in str(e), str(e)
- try:
- n = self.transport.input("")
- assert False, n
- except TransportException, e:
- pass
+ self.transport.push(garbage)
+ self.assert_error(u'amqp:connection:framing-error')
+ assert self.transport.pending() < 0
+ self.transport.close_tail()
+ assert self.transport.pending() < 0
def testSmallGarbage(self):
self.testGarbage("XXX")
@@ -66,16 +82,12 @@ class TransportTest(Test):
self.testGarbage("GARBAGE_XXX")
def testHeader(self):
- n = self.transport.input("AMQP\x00\x01\x00\x00")
- assert n == 8, n
- try:
- n = self.transport.input("")
- assert False, n
- except TransportException, e:
- assert "connection aborted" in str(e)
+ self.transport.push("AMQP\x00\x01\x00\x00")
+ self.transport.close_tail()
+ self.assert_error(u'amqp:connection:framing-error')
- def testOutput(self):
- out = self.transport.output(1024)
+ def testPeek(self):
+ out = self.transport.peek(1024)
assert out is not None
def testBindAfterOpen(self):
@@ -87,16 +99,10 @@ class TransportTest(Test):
conn.hostname = "test-hostname"
trn = Transport()
trn.bind(conn)
- out = trn.output(1024)
+ out = trn.peek(1024)
assert "test-container" in out, repr(out)
assert "test-hostname" in out, repr(out)
- n = self.transport.input(out)
- assert n > 0, n
- out = out[n:]
-
- if out:
- n = self.transport.input(out)
- assert n == 0
+ self.transport.push(out)
c = Connection()
assert c.remote_container == None
@@ -105,10 +111,6 @@ class TransportTest(Test):
self.transport.bind(c)
assert c.remote_container == "test-container"
assert c.remote_hostname == "test-hostname"
- if out:
- assert c.session_head(0) == None
- n = self.transport.input(out)
- assert n == len(out), (n, out)
assert c.session_head(0) != None
def testCloseHead(self):
@@ -130,3 +132,32 @@ class TransportTest(Test):
assert "aborted" in str(e), str(e)
n = self.transport.capacity()
assert n < 0, n
+
+ def testUnpairedPop(self):
+ conn = Connection()
+ self.transport.bind(conn)
+
+ conn.hostname = "hostname"
+ conn.open()
+
+ dat1 = self.transport.peek(1024)
+
+ ssn = conn.session()
+ ssn.open()
+
+ dat2 = self.transport.peek(1024)
+
+ assert dat2[:len(dat1)] == dat1
+
+ snd = ssn.sender("sender")
+ snd.open()
+
+ self.transport.pop(len(dat1))
+ self.transport.pop(len(dat2) - len(dat1))
+ dat3 = self.transport.peek(1024)
+ self.transport.pop(len(dat3))
+ assert self.transport.peek(1024) == ""
+
+ self.peer.push(dat1)
+ self.peer.push(dat2[len(dat1):])
+ self.peer.push(dat3)
Modified: qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/CMakeLists.txt?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/CMakeLists.txt (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/CMakeLists.txt Sat Sep 6 11:23:10 2014
@@ -19,6 +19,8 @@
include(CheckIncludeFiles)
+include_directories(${CMAKE_SOURCE_DIR}/examples/include)
+
CHECK_INCLUDE_FILES("inttypes.h" INTTYPES_AVAILABLE)
if (INTTYPES_AVAILABLE)
list(APPEND PLATFORM_DEFINITIONS "USE_INTTYPES")
Modified: qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/msgr-common.h
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/msgr-common.h?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/msgr-common.h (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/tools/apps/c/msgr-common.h Sat Sep 6 11:23:10 2014
@@ -28,9 +28,13 @@
#endif
#ifdef _MSC_VER
+#if !defined(PRIu64)
#define PRIu64 "I64u"
+#endif
+#if !defined(SCNu64)
#define SCNu64 "I64u"
#endif
+#endif
/* If still not defined, best guess */
#if !defined(SCNu64)
Modified: qpid/proton/branches/fadams-javascript-binding/version.txt
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/version.txt?rev=1622849&r1=1622848&r2=1622849&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/version.txt (original)
+++ qpid/proton/branches/fadams-javascript-binding/version.txt Sat Sep 6 11:23:10 2014
@@ -1 +1 @@
-0.7
+0.8
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org