diff options
Diffstat (limited to 'tests/main.cpp')
-rw-r--r-- | tests/main.cpp | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/tests/main.cpp b/tests/main.cpp index 22bef9d..61f95f4 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -8,7 +8,7 @@ const int PORT = 35231; #define REQUIRE(expr) do { if(!(expr)) { fprintf(stderr, "Assert failed: %s\n", #expr); exit(1); } }while(0) -int main() +void testP2p() { const sibs::PubsubKey key("abcdefghijklmnopqrstuvxyz0123456789", 35); const sibs::PubsubKey key2("zbcdefghcjklmn3pqrs5uvx2z0123F56789", 35); @@ -66,6 +66,74 @@ int main() REQUIRE(gotListen); REQUIRE(gotListen2); +} + +void testRouted() +{ + sibs::ConnectionOptions options; + options.useP2p = false; + + const sibs::PubsubKey key("abcdefghijklmnopqrstuvxyz0123456789", 35); + const sibs::PubsubKey key2("zbcdefghcjklmn3pqrs5uvx2z0123F56789", 35); + sibs::BootstrapNode boostrapNode(sibs::Ipv4(nullptr, PORT)); + + std::unique_ptr<sibs::BootstrapConnection> connection1 = sibs::BootstrapConnection::connect(sibs::Ipv4("127.0.0.1", PORT), options).get(); + bool gotData1 = false; + bool gotAsdf1 = false; + connection1->listen(key, [&gotData1, &gotAsdf1](const sibs::DirectConnectionPeer *peer, const void *data, const sibs::usize size) + { + if(size == 5 && strncmp((const char*)data, "hello", 5) == 0) + gotData1 = true; + if(size == 4 && strncmp((const char*)data, "asdf", 4) == 0) + gotAsdf1 = true; + return true; + }); + + std::unique_ptr<sibs::BootstrapConnection> connection2 = sibs::BootstrapConnection::connect(sibs::Ipv4("127.0.0.1", PORT), options).get(); + bool gotData2 = false; + bool gotAsdf2 = false; + connection2->listen(key, [&gotData2, &gotAsdf2](const sibs::DirectConnectionPeer *peer, const void *data, const sibs::usize size) + { + if(size == 5 && strncmp((const char*)data, "hello", 5) == 0) + gotData2 = true; + if(size == 4 && strncmp((const char*)data, "asdf", 4) == 0) + gotAsdf2 = true; + return true; + }); + + bool gotListen = false; + connection1->listen(key2, [&gotListen](const sibs::DirectConnectionPeer *peer, const void *data, const sibs::usize size) + { + if(size == 14 && strncmp((const char*)data, "secondListener", 14) == 0) + gotListen = true; + return true; + }); + + bool gotListen2 = false; + connection2->listen(key2, [&gotListen2](const sibs::DirectConnectionPeer *peer, const void *data, const sibs::usize size) + { + if(size == 14 && strncmp((const char*)data, "secondListener", 14) == 0) + gotListen2 = true; + return true; + }); + + connection1->put(key, "hello", 5); + connection2->put(key, "asdf", 4); + connection1->put(key2, "secondListener", 14); + std::this_thread::sleep_for(std::chrono::seconds(6)); + + REQUIRE(gotData1); + REQUIRE(gotAsdf1); + REQUIRE(gotData2); + REQUIRE(gotAsdf2); + + REQUIRE(gotListen); + REQUIRE(gotListen2); +} +int main() +{ + testP2p(); + testRouted(); return 0; } |