diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | tests/transport.c | 125 |
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); + }); + }); + +}) |
