aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
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);
+ });
+ });
+
+})