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 2018/12/04 21:59:49 UTC
qpid-proton git commit: NO_JIRA: [c] Fix minor proactor test bugs
Repository: qpid-proton
Updated Branches:
refs/heads/master ec97465f8 -> b44e3fffb
NO_JIRA: [c] Fix minor proactor test bugs
Some tests were listening on default AMQP port instead of port 0.
Improved idle-timeout logic for test proactor.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/b44e3fff
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b44e3fff
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b44e3fff
Branch: refs/heads/master
Commit: b44e3fffbe097d528c4156632337be0c603427f5
Parents: ec97465
Author: Alan Conway <ac...@redhat.com>
Authored: Tue Dec 4 16:06:45 2018 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Dec 4 16:23:19 2018 -0500
----------------------------------------------------------------------
c/tests/pn_test_proactor.cpp | 28 +++++++++++++++++-----------
c/tests/pn_test_proactor.hpp | 12 ++++++++----
c/tests/proactor_test.cpp | 20 ++++++++++----------
3 files changed, 35 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b44e3fff/c/tests/pn_test_proactor.cpp
----------------------------------------------------------------------
diff --git a/c/tests/pn_test_proactor.cpp b/c/tests/pn_test_proactor.cpp
index 0c06f72..40ceca7 100644
--- a/c/tests/pn_test_proactor.cpp
+++ b/c/tests/pn_test_proactor.cpp
@@ -92,30 +92,36 @@ pn_event_type_t proactor::run(pn_event_type_t stop) {
}
}
-pn_event_type_t proactor::flush(pn_event_type_t stop) {
+std::pair<int, pn_event_type_t> proactor::flush(pn_event_type_t stop) {
auto_batch b(*this, pn_proactor_get(*this));
+ int n = 0;
if (b.get()) {
pn_event_t *e;
while ((e = b.next())) {
pn_event_type_t et = pn_event_type(e);
- if (dispatch(e) || et == stop) return et;
+ if (dispatch(e) || et == stop) return std::make_pair(n, et);
}
}
- return PN_EVENT_NONE;
+ return std::make_pair(n, PN_EVENT_NONE);
}
pn_event_type_t proactor::corun(proactor &other, pn_event_type_t stop) {
- // We can't wait() on either proactor as it might be idle until
+ // We can't wait() on either proactor as it might be idle.
+ // We can't give up immediately if both proactors are idle
// something happens on the other, so spin between the two for a limited
// number of attempts that should be large enough if the test is going to
- // past.
+ // pass.
int spin_limit = 1000;
- while (spin_limit > 0) {
- pn_event_type_t et = flush(stop);
- if (et) return et;
- other.flush();
- --spin_limit;
- }
+ do {
+ std::pair<int, pn_event_type_t> n_et = flush(stop);
+ if (n_et.second) return n_et.second;
+ if (n_et.first + other.flush().first == 0) {
+ // Both idle, sleep and retry in case network traffic is in flight.
+ millisleep(1);
+ --spin_limit;
+ }
+ } while (spin_limit);
+
return PN_EVENT_NONE;
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b44e3fff/c/tests/pn_test_proactor.hpp
----------------------------------------------------------------------
diff --git a/c/tests/pn_test_proactor.hpp b/c/tests/pn_test_proactor.hpp
index 3703910..239992a 100644
--- a/c/tests/pn_test_proactor.hpp
+++ b/c/tests/pn_test_proactor.hpp
@@ -69,15 +69,19 @@ struct proactor : auto_free<pn_proactor_t, pn_proactor_free> {
// * The `stop` event type is handled.
// * All available events are flushed.
//
- // Return PN_EVENT_NONE if all events were flushed, the event-type of the last
- // event handled otherwise.
- pn_event_type_t flush(pn_event_type_t stop = PN_EVENT_NONE);
+ // Returns the number of events processed and
+ // - PN_EVENT_NONE if all events were handled without stopping
+ // - The type of the last event handled otherwise
+ //
+ std::pair<int, pn_event_type_t> flush(pn_event_type_t stop = PN_EVENT_NONE);
// Alternate flushing this proactor and `other` until
// * A handler on this proactor returns true.
// * The `stop` event type is handled by this proactor.
+ // * Both proactors become idle.
+ //
// Return the event-type of the last event handled or PN_EVENT_NONE
- // if something went wrong.
+ // if the proactors are idle.
pn_event_type_t corun(proactor &other, pn_event_type_t stop = PN_EVENT_NONE);
// Wait for and handle a single event, return it's type.
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b44e3fff/c/tests/proactor_test.cpp
----------------------------------------------------------------------
diff --git a/c/tests/proactor_test.cpp b/c/tests/proactor_test.cpp
index 971c231..3e4365a 100644
--- a/c/tests/proactor_test.cpp
+++ b/c/tests/proactor_test.cpp
@@ -166,7 +166,7 @@ TEST_CASE("proactor_connection_wake") {
common_handler h;
proactor p(&h);
close_on_wake_handler wh;
- pn_listener_t *l = p.listen(":0");
+ pn_listener_t *l = p.listen();
REQUIRE_RUN(p, PN_LISTENER_OPEN);
pn_connection_t *c = p.connect(l, &wh);
pn_incref(c); /* Keep a reference for wake() after free */
@@ -330,7 +330,7 @@ TEST_CASE("proactor_errors") {
REQUIRE_RUN(p, PN_PROACTOR_INACTIVE);
/* Listen on a port already in use */
- l = p.listen(":0");
+ l = p.listen();
REQUIRE_RUN(p, PN_LISTENER_OPEN);
std::string laddr = ":" + listening_port(l);
p.listen(laddr);
@@ -388,10 +388,10 @@ TEST_CASE("proactor_ipv4_ipv6") {
proactor p(&h);
/* Listen on all interfaces for IPv4 only. */
- pn_listener_t *l4 = p.listen("0.0.0.0");
+ pn_listener_t *l4 = p.listen("0.0.0.0:0");
REQUIRE_RUN(p, PN_LISTENER_OPEN);
/* Empty address listens on both IPv4 and IPv6 on all interfaces */
- pn_listener_t *l = p.listen(":0");
+ pn_listener_t *l = p.listen();
REQUIRE_RUN(p, PN_LISTENER_OPEN);
#define EXPECT_CONNECT(LISTENER, HOST) \
@@ -435,7 +435,7 @@ TEST_CASE("proactor_release_free") {
common_handler h;
proactor p(&h);
- pn_listener_t *l = p.listen(":0");
+ pn_listener_t *l = p.listen();
REQUIRE_RUN(p, PN_LISTENER_OPEN);
/* leave one connection to the proactor */
pn_connection_t *c = p.connect(l);
@@ -592,7 +592,7 @@ TEST_CASE("proactor_netaddr") {
common_handler h;
proactor p(&h);
/* Use IPv4 to get consistent results all platforms */
- pn_listener_t *l = p.listen("127.0.0.1");
+ pn_listener_t *l = p.listen("127.0.0.1:0");
REQUIRE_RUN(p, PN_LISTENER_OPEN);
pn_connection_t *c = p.connect(l);
REQUIRE_RUN(p, PN_CONNECTION_REMOTE_OPEN);
@@ -674,9 +674,9 @@ TEST_CASE("proactor_disconnect") {
proactor client(&ch), server(&sh);
// Start two listeners on the server
- pn_listener_t *l = server.listen(":0");
+ pn_listener_t *l = server.listen();
REQUIRE_RUN(server, PN_LISTENER_OPEN);
- pn_listener_t *l2 = server.listen(":0");
+ pn_listener_t *l2 = server.listen();
REQUIRE_RUN(server, PN_LISTENER_OPEN);
// Two connections from client
@@ -714,7 +714,7 @@ TEST_CASE("proactor_disconnect") {
REQUIRE_RUN(server, PN_PROACTOR_INACTIVE);
/* Make sure the proactors are still functional */
- pn_listener_t *l3 = server.listen(":0");
+ pn_listener_t *l3 = server.listen();
REQUIRE_RUN(server, PN_LISTENER_OPEN);
client.connect(l3);
CHECK_CORUN(client, server, PN_CONNECTION_REMOTE_OPEN);
@@ -800,7 +800,7 @@ TEST_CASE("proactor_message_stream") {
message_stream_handler h;
proactor p(&h);
- pn_listener_t *l = p.listen(":0");
+ pn_listener_t *l = p.listen();
REQUIRE_RUN(p, PN_LISTENER_OPEN);
/* Encode a large (not very) message to send in chunks */
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org