aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-17 11:49:16 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-17 11:49:16 -0700
commit76c1fc80c931b086493835d037245ebbb5f8d406 (patch)
treee33b7765f755f7497eff26a9458c09ebe1da94ff /tests
parenta9633313ec8e578c805cd53b37ba3360d83157bc (diff)
downloadnng-76c1fc80c931b086493835d037245ebbb5f8d406.tar.gz
nng-76c1fc80c931b086493835d037245ebbb5f8d406.tar.bz2
nng-76c1fc80c931b086493835d037245ebbb5f8d406.zip
fixes #39 Transport ops vector should be versioned
This also includes tests for some of the edge cases surrounding pluggable transports, such as version mismatch, duplication registration, and failure to initialize.
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/transport.c125
2 files changed, 126 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 754d3ab2..7dd74d8a 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -86,6 +86,7 @@ add_nng_test(resolv 10)
add_nng_test(sock 5)
add_nng_test(survey 5)
add_nng_test(synch 5)
+add_nng_test(transport 5)
add_nng_test(tcp 5)
add_nng_test(scalability 20)
add_nng_test(message 5)
diff --git a/tests/transport.c b/tests/transport.c
new file mode 100644
index 00000000..9992408b
--- /dev/null
+++ b/tests/transport.c
@@ -0,0 +1,125 @@
+//
+// 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
+// file was obtained (LICENSE.txt). A copy of the license may also be
+// found online at https://opensource.org/licenses/MIT.
+//
+
+#include "convey.h"
+#include "core/nng_impl.h"
+#include "nng.h"
+
+#include <string.h>
+
+static int ninits;
+static int nfinis;
+static int nbads;
+
+static int
+goodinit(void)
+{
+ ninits++;
+ return (0);
+}
+
+static int
+badinit(void)
+{
+ nbads++;
+ return (NNG_ENOMEM);
+}
+
+static void
+finish(void)
+{
+ nfinis++;
+}
+
+// Fake TCP transport
+struct nni_tran fake_tcp = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "tcp",
+ .tran_ep = NULL,
+ .tran_pipe = NULL,
+ .tran_init = goodinit,
+ .tran_fini = finish,
+};
+
+// Bad version transport
+struct nni_tran badvers = {
+ .tran_version = NNI_TRANSPORT_VERSION + 1,
+ .tran_scheme = "badvers",
+ .tran_ep = NULL,
+ .tran_pipe = NULL,
+ .tran_init = goodinit,
+ .tran_fini = finish,
+};
+
+struct nni_tran badtran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "badtran",
+ .tran_ep = NULL,
+ .tran_pipe = NULL,
+ .tran_init = badinit,
+ .tran_fini = finish,
+};
+
+// Bogus good transport
+struct nni_tran goodtran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "goodtran",
+ .tran_ep = NULL,
+ .tran_pipe = NULL,
+ .tran_init = goodinit,
+ .tran_fini = finish,
+};
+
+TestMain("Pluggable Transports", {
+
+ Convey("Registering TCP again fails", {
+ So(nni_tran_register(&fake_tcp) == NNG_ESTATE);
+ So(ninits == 0);
+ So(nfinis == 0);
+ So(nbads == 0);
+ });
+
+ Convey("Registering bad version fails", {
+ So(nni_tran_register(&badvers) == NNG_ENOTSUP);
+ So(ninits == 0);
+ So(nfinis == 0);
+ So(nbads == 0);
+ });
+
+ Convey("Registering bad init fails", {
+ if (nbads == 0) {
+ So(nni_tran_register(&badtran) == NNG_ENOMEM);
+ }
+ So(ninits == 0);
+ So(nfinis == 0);
+ So(nbads == 1);
+
+ Convey("Finish not called", {
+ nng_fini();
+ So(nbads == 1);
+ So(nfinis == 0);
+ });
+ });
+
+ Convey("Registering good init passes", {
+ if (ninits == 0) {
+ So(nni_tran_register(&goodtran) == 0);
+ So(nfinis == 0);
+ }
+ So(ninits == 1);
+
+ Convey("Finish called", {
+ nng_fini();
+ So(ninits == 1);
+ So(nfinis == 1);
+ });
+ });
+
+})