You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2015/06/03 19:25:29 UTC
[06/50] [abbrv] qpid-proton git commit: PROTON-877: Move client
outcome processing to output side - Also add some (somewhat imperfect) tests
PROTON-877: Move client outcome processing to output side
- Also add some (somewhat imperfect) tests
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/520f0d8e
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/520f0d8e
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/520f0d8e
Branch: refs/heads/cjansen-cpp-client
Commit: 520f0d8e3d215dbd38b8ae0d9222f5a66d860c66
Parents: 196ef80
Author: Andrew Stitcher <as...@apache.org>
Authored: Fri May 8 17:12:02 2015 -0400
Committer: Andrew Stitcher <as...@apache.org>
Committed: Mon May 11 15:55:59 2015 -0400
----------------------------------------------------------------------
proton-c/src/sasl/sasl.c | 15 ++++++----
tests/python/proton_tests/engine.py | 47 ++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/520f0d8e/proton-c/src/sasl/sasl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/sasl/sasl.c b/proton-c/src/sasl/sasl.c
index ae3a025..4a2a2f0 100644
--- a/proton-c/src/sasl/sasl.c
+++ b/proton-c/src/sasl/sasl.c
@@ -337,8 +337,13 @@ static void pni_post_sasl_frame(pn_transport_t *transport)
pn_post_frame(transport, SASL_FRAME_TYPE, 0, "DL[B]", SASL_OUTCOME, sasl->outcome);
pni_emit(transport);
break;
- case SASL_NONE:
case SASL_RECVED_OUTCOME:
+ if (sasl->last_state < SASL_POSTED_INIT) {
+ desired_state = SASL_POSTED_INIT;
+ continue;
+ }
+ break;
+ case SASL_NONE:
return;
}
sasl->last_state = desired_state;
@@ -575,9 +580,8 @@ int pn_do_mechanisms(pn_transport_t *transport, uint8_t frame_type, uint16_t cha
pni_process_mechanisms(transport, pn_string_get(mechs))) {
pni_sasl_set_desired_state(transport, SASL_POSTED_INIT);
} else {
- sasl->last_state = SASL_RECVED_OUTCOME;
- sasl->halt = true;
- pn_transport_close_tail(transport);
+ sasl->outcome = PN_SASL_PERM;
+ pni_sasl_set_desired_state(transport, SASL_RECVED_OUTCOME);
}
pn_free(mechs);
@@ -617,8 +621,7 @@ int pn_do_outcome(pn_transport_t *transport, uint8_t frame_type, uint16_t channe
pni_sasl_t *sasl = transport->sasl;
sasl->outcome = (pn_sasl_outcome_t) outcome;
- sasl->last_state = SASL_RECVED_OUTCOME;
- sasl->halt = true;
+ pni_sasl_set_desired_state(transport, SASL_RECVED_OUTCOME);
return 0;
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/520f0d8e/tests/python/proton_tests/engine.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/engine.py b/tests/python/proton_tests/engine.py
index 05c8e19..924b3bc 100644
--- a/tests/python/proton_tests/engine.py
+++ b/tests/python/proton_tests/engine.py
@@ -2505,3 +2505,50 @@ class SaslEventTest(CollectorTest):
self.drain()
p = transport.pending()
self.expect()
+
+ def testPipelinedServerReadFirst(self):
+ if "java" in sys.platform:
+ raise Skipped()
+ conn = Connection()
+ conn.collect(self.collector)
+ transport = Transport(Transport.CLIENT)
+ s = transport.sasl()
+ s.allowed_mechs("ANONYMOUS PLAIN")
+ transport.bind(conn)
+ self.expect(Event.CONNECTION_INIT, Event.CONNECTION_BOUND)
+ transport.push('AMQP\x03\x01\x00\x00\x00\x00\x00\x1c\x02\x01\x00\x00\x00S@'
+ '\xc0\x0f\x01\xe0\x0c\x01\xa3\tANONYMOUS\x00\x00\x00\x10'
+ '\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00AMQP\x00\x01\x00'
+ '\x00')
+ self.expect(Event.TRANSPORT)
+ p = transport.pending()
+ bytes = transport.peek(p)
+ transport.pop(p)
+
+ server = Transport(Transport.SERVER)
+ server.push(bytes)
+ assert server.sasl().outcome == SASL.OK
+
+ def testPipelinedServerWriteFirst(self):
+ if "java" in sys.platform:
+ raise Skipped()
+ conn = Connection()
+ conn.collect(self.collector)
+ transport = Transport(Transport.CLIENT)
+ s = transport.sasl()
+ s.allowed_mechs("ANONYMOUS")
+ transport.bind(conn)
+ p = transport.pending()
+ bytes = transport.peek(p)
+ transport.pop(p)
+ self.expect(Event.CONNECTION_INIT, Event.CONNECTION_BOUND, Event.TRANSPORT)
+ transport.push('AMQP\x03\x01\x00\x00\x00\x00\x00\x1c\x02\x01\x00\x00\x00S@'
+ '\xc0\x0f\x01\xe0\x0c\x01\xa3\tANONYMOUS\x00\x00\x00\x10'
+ '\x02\x01\x00\x00\x00SD\xc0\x03\x01P\x00AMQP\x00\x01\x00'
+ '\x00')
+ self.expect(Event.TRANSPORT)
+ p = transport.pending()
+ bytes = transport.peek(p)
+ transport.pop(p)
+ # XXX: the bytes above appear to be correct, but we don't get any
+ # sort of event indicating that the transport is authenticated
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org