#include "../include/sibs/BootstrapConnection.hpp" #include "../include/sibs/BootstrapNode.hpp" #include #include #include const int PORT = 35231; #define REQUIRE(expr) do { if(!(expr)) { fprintf(stderr, "Assert failed: %s\n", #expr); exit(1); } }while(0) void testP2p() { const sibs::PubsubKey key("abcdefghijklmnopqrstuvxyz0123456789", 35); const sibs::PubsubKey key2("zbcdefghcjklmn3pqrs5uvx2z0123F56789", 35); sibs::BootstrapNode boostrapNode(sibs::Ipv4(nullptr, PORT)); std::unique_ptr connection1 = sibs::BootstrapConnection::connect(sibs::Ipv4("127.0.0.1", PORT)).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 connection2 = sibs::BootstrapConnection::connect(sibs::Ipv4("127.0.0.1", PORT)).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); } 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 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 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; }