aboutsummaryrefslogtreecommitdiff
path: root/tests/pubsub.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-08 21:19:09 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-09 02:38:55 -0700
commitd64f12553eb6ceb67ed6f6a5b2ceb6c061d375ba (patch)
treef6bdac79578176f0d00528d191f862009e761eac /tests/pubsub.c
parent5f0398de8edd1ed4ddbf6455c66273a6608aad9a (diff)
downloadnng-d64f12553eb6ceb67ed6f6a5b2ceb6c061d375ba.tar.gz
nng-d64f12553eb6ceb67ed6f6a5b2ceb6c061d375ba.tar.bz2
nng-d64f12553eb6ceb67ed6f6a5b2ceb6c061d375ba.zip
fixes #44 open protocol by "name" (symbol) instead number
fixes #38 Make protocols "pluggable", or at least optional This is a breaking change, as we've done away with the central registered list of protocols, and instead demand the user call nng_xxx_open() where xxx is a protocol name. (We did keep a table around in the compat framework though.) There is a nice way for protocols to plug in via an nni_proto_open(), where they can use a generic constructor that they use to build a protocol specific constructor (passing their ops vector in.)
Diffstat (limited to 'tests/pubsub.c')
-rw-r--r--tests/pubsub.c113
1 files changed, 61 insertions, 52 deletions
diff --git a/tests/pubsub.c b/tests/pubsub.c
index 94558f39..19d85848 100644
--- a/tests/pubsub.c
+++ b/tests/pubsub.c
@@ -1,5 +1,6 @@
//
// Copyright 2017 Garrett D'Amore <garrett@damore.org>
+// Copyright 2017 Capitar IT Group BV <info@capitar.com>
//
// This software is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
@@ -8,14 +9,15 @@
//
#include "convey.h"
-#include "nng.h"
#include "core/nng_impl.h"
+#include "nng.h"
#include <string.h>
-#define APPENDSTR(m, s) nng_msg_append(m, s, strlen(s))
-#define CHECKSTR(m, s) So(nng_msg_len(m) == strlen(s));\
- So(memcmp(nng_msg_body(m), s, strlen(s)) == 0)
+#define APPENDSTR(m, s) nng_msg_append(m, s, strlen(s))
+#define CHECKSTR(m, s) \
+ So(nng_msg_len(m) == strlen(s)); \
+ So(memcmp(nng_msg_body(m), s, strlen(s)) == 0)
Main({
const char *addr = "inproc://test";
@@ -25,90 +27,95 @@ Main({
Convey("We can create a PUB socket", {
nng_socket pub;
- So(nng_open(&pub, NNG_PROTO_PUB) == 0);
+ So(nng_pub_open(&pub) == 0);
- Reset({
- nng_close(pub);
- })
+ Reset({ nng_close(pub); });
Convey("Protocols match", {
So(nng_protocol(pub) == NNG_PROTO_PUB);
So(nng_peer(pub) == NNG_PROTO_SUB);
- })
+ });
Convey("Recv fails", {
nng_msg *msg;
So(nng_recvmsg(pub, &msg, 0) == NNG_ENOTSUP);
- })
- })
+ });
+ });
Convey("We can create a SUB socket", {
nng_socket sub;
- So(nng_open(&sub, NNG_PROTO_SUB) == 0);
+ So(nng_sub_open(&sub) == 0);
- Reset({
- nng_close(sub);
- })
+ Reset({ nng_close(sub); });
Convey("Protocols match", {
So(nng_protocol(sub) == NNG_PROTO_SUB);
So(nng_peer(sub) == NNG_PROTO_PUB);
- })
+ });
Convey("Send fails", {
nng_msg *msg;
So(nng_msg_alloc(&msg, 0) == 0);
So(nng_sendmsg(sub, msg, 0) == NNG_ENOTSUP);
nng_msg_free(msg);
- })
- })
+ });
+ });
Convey("We can create a linked PUB/SUB pair", {
nng_socket pub;
nng_socket sub;
- So(nng_open(&pub, NNG_PROTO_PUB) == 0);
+ So(nng_pub_open(&pub) == 0);
- So(nng_open(&sub, NNG_PROTO_SUB) == 0);
+ So(nng_sub_open(&sub) == 0);
Reset({
nng_close(pub);
nng_close(sub);
- })
-
- // Most consumers will usually have the pub listen,
- // and the sub dial. However, this creates a problem
- // for our tests, since we can wind up trying to push
- // data before the pipe is fully registered (the
- // accept runs in an asynch thread.) Doing the reverse
- // here ensures that we won't lose data.
+ });
+
+ // Most consumers will usually have the pub
+ // listen, and the sub dial. However, this
+ // creates a problem for our tests, since we
+ // can wind up trying to push data before the
+ // pipe is fully registered (the accept runs in
+ // an asynch thread.) Doing the reverse here
+ // ensures that we won't lose data.
So(nng_listen(sub, addr, NULL, NNG_FLAG_SYNCH) == 0);
So(nng_dial(pub, addr, NULL, NNG_FLAG_SYNCH) == 0);
Convey("Sub can subscribe", {
- So(nng_setopt(sub, NNG_OPT_SUBSCRIBE, "ABC", 3) == 0);
- So(nng_setopt(sub, NNG_OPT_SUBSCRIBE, "", 0) == 0);
+ So(nng_setopt(
+ sub, NNG_OPT_SUBSCRIBE, "ABC", 3) == 0);
+ So(nng_setopt(sub, NNG_OPT_SUBSCRIBE, "", 0) ==
+ 0);
Convey("Unsubscribe works", {
- So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE, "ABC", 3) == 0);
- So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE, "", 0) == 0);
-
- So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE, "", 0) == NNG_ENOENT);
- So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE, "HELLO", 0) == NNG_ENOENT);
- })
- })
+ So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE,
+ "ABC", 3) == 0);
+ So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE,
+ "", 0) == 0);
+
+ So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE,
+ "", 0) == NNG_ENOENT);
+ So(nng_setopt(sub, NNG_OPT_UNSUBSCRIBE,
+ "HELLO", 0) == NNG_ENOENT);
+ });
+ });
Convey("Pub cannot subscribe", {
- So(nng_setopt(pub, NNG_OPT_SUBSCRIBE, "", 0) == NNG_ENOTSUP);
- })
+ So(nng_setopt(pub, NNG_OPT_SUBSCRIBE, "", 0) ==
+ NNG_ENOTSUP);
+ });
Convey("Subs can receive from pubs", {
nng_msg *msg;
uint64_t rtimeo;
-
- So(nng_setopt(sub, NNG_OPT_SUBSCRIBE, "/some/", strlen("/some/")) == 0);
+ So(nng_setopt(sub, NNG_OPT_SUBSCRIBE, "/some/",
+ strlen("/some/")) == 0);
rtimeo = 50000; // 50ms
- So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo, sizeof (rtimeo)) == 0);
+ So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo,
+ sizeof(rtimeo)) == 0);
So(nng_msg_alloc(&msg, 0) == 0);
APPENDSTR(msg, "/some/like/it/hot");
@@ -132,28 +139,31 @@ Main({
So(nng_recvmsg(sub, &msg, 0) == 0);
CHECKSTR(msg, "/some/day/some/how");
nng_msg_free(msg);
- })
+ });
Convey("Subs without subsciptions don't receive", {
uint64_t rtimeo = 50000; // 50ms
nng_msg *msg;
- So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo, sizeof (rtimeo)) == 0);
+ So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo,
+ sizeof(rtimeo)) == 0);
So(nng_msg_alloc(&msg, 0) == 0);
APPENDSTR(msg, "/some/don't/like/it");
So(nng_sendmsg(pub, msg, 0) == 0);
So(nng_recvmsg(sub, &msg, 0) == NNG_ETIMEDOUT);
- })
+ });
Convey("Subs in raw receive", {
uint64_t rtimeo = 50000; // 500ms
- int raw = 1;
+ int raw = 1;
nng_msg *msg;
- So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo, sizeof (rtimeo)) == 0);
- So(nng_setopt(sub, NNG_OPT_RAW, &raw, sizeof (raw)) == 0);
+ So(nng_setopt(sub, NNG_OPT_RCVTIMEO, &rtimeo,
+ sizeof(rtimeo)) == 0);
+ So(nng_setopt(sub, NNG_OPT_RAW, &raw,
+ sizeof(raw)) == 0);
So(nng_msg_alloc(&msg, 0) == 0);
APPENDSTR(msg, "/some/like/it/raw");
@@ -161,10 +171,9 @@ Main({
So(nng_recvmsg(sub, &msg, 0) == 0);
CHECKSTR(msg, "/some/like/it/raw");
nng_msg_free(msg);
- })
-
- })
- })
+ });
+ });
+ });
nni_fini();
})