Files

133 lines
4.1 KiB
C++
Raw Permalink Normal View History

2026-05-07 08:01:35 -04:00
#include <logos_test.h>
2026-03-13 10:12:15 +00:00
#include <plugin.h>
2026-05-14 14:11:16 -03:00
#include "test_helpers.h"
2026-05-07 14:34:51 -04:00
2026-05-07 08:01:35 -04:00
LOGOS_TEST(kad_put_get) {
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeA;
LOGOS_ASSERT_TRUE(nodeA.start().success);
auto [peerIdA, addrsA] = getPeerInfoPair(nodeA);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeB(Libp2pModuleOptions{
.bootstrapNodes = { {peerIdA, addrsA} }
});
LOGOS_ASSERT_TRUE(nodeB.start().success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
std::string key = "integration-key";
std::string value = "hello";
LOGOS_ASSERT_TRUE(nodeA.kadPutValue(key, value).success);
2026-03-13 10:12:15 +00:00
2026-05-07 08:01:35 -04:00
int quorum = 1;
2026-05-07 14:34:51 -04:00
auto result = nodeB.kadGetValue(key, quorum);
LOGOS_ASSERT_TRUE(result.success);
2026-03-13 10:12:15 +00:00
2026-06-25 10:10:16 -03:00
std::string record = base64Decode(result.value.get<std::string>());
2026-05-07 08:01:35 -04:00
LOGOS_ASSERT_TRUE(record == value);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_TRUE(nodeA.stop().success);
LOGOS_ASSERT_TRUE(nodeB.stop().success);
2026-05-07 08:01:35 -04:00
}
2026-03-13 10:12:15 +00:00
2026-05-07 08:01:35 -04:00
LOGOS_TEST(kad_find_node) {
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeA;
LOGOS_ASSERT_TRUE(nodeA.start().success);
auto [peerIdA, addrsA] = getPeerInfoPair(nodeA);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeB(Libp2pModuleOptions{
.bootstrapNodes = { {peerIdA, addrsA} }
});
LOGOS_ASSERT_TRUE(nodeB.start().success);
auto [peerIdB, addrsB] = getPeerInfoPair(nodeB);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeC(Libp2pModuleOptions{
.bootstrapNodes = { {peerIdA, addrsA} }
});
LOGOS_ASSERT_TRUE(nodeC.start().success);
auto [peerIdC, addrsC] = getPeerInfoPair(nodeC);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeD(Libp2pModuleOptions{
.bootstrapNodes = { {peerIdA, addrsA} }
});
LOGOS_ASSERT_TRUE(nodeD.start().success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
auto result = nodeD.kadFindNode(peerIdB);
LOGOS_ASSERT_TRUE(result.success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
auto peers = result.value;
LOGOS_ASSERT_EQ(peers.size(), size_t(3));
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
bool foundA = false, foundB = false, foundC = false;
for (const auto& p : peers) {
std::string pid = p.get<std::string>();
if (pid == peerIdA) foundA = true;
if (pid == peerIdB) foundB = true;
if (pid == peerIdC) foundC = true;
}
LOGOS_ASSERT_TRUE(foundA);
LOGOS_ASSERT_TRUE(foundB);
LOGOS_ASSERT_TRUE(foundC);
LOGOS_ASSERT_TRUE(nodeA.stop().success);
LOGOS_ASSERT_TRUE(nodeB.stop().success);
LOGOS_ASSERT_TRUE(nodeC.stop().success);
LOGOS_ASSERT_TRUE(nodeD.stop().success);
2026-05-07 08:01:35 -04:00
}
2026-03-13 10:12:15 +00:00
2026-05-07 08:01:35 -04:00
LOGOS_TEST(kad_start_stop_providing) {
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeA;
LOGOS_ASSERT_TRUE(nodeA.start().success);
auto [peerIdA, addrsA] = getPeerInfoPair(nodeA);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeB(Libp2pModuleOptions{
.bootstrapNodes = { {peerIdA, addrsA} }
});
LOGOS_ASSERT_TRUE(nodeB.start().success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
std::string key = "provider-test-key";
auto cidResult = nodeA.toCid(key);
LOGOS_ASSERT_TRUE(cidResult.success);
std::string cid = cidResult.value.get<std::string>();
LOGOS_ASSERT_FALSE(cid.empty());
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_TRUE(nodeA.kadStartProviding(cid).success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
auto res = nodeB.kadGetProviders(cid);
LOGOS_ASSERT_TRUE(res.success);
auto providers = res.value;
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_FALSE(providers.empty());
LOGOS_ASSERT_TRUE(providers[0]["peerId"].get<std::string>() == peerIdA);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_TRUE(nodeA.kadStopProviding(cid).success);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
res = nodeB.kadGetProviders(cid);
LOGOS_ASSERT_TRUE(res.success);
providers = res.value;
LOGOS_ASSERT_TRUE(providers.empty());
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_TRUE(nodeA.stop().success);
LOGOS_ASSERT_TRUE(nodeB.stop().success);
2026-05-07 08:01:35 -04:00
}
2026-03-13 10:12:15 +00:00
2026-05-07 08:01:35 -04:00
LOGOS_TEST(kad_random_records) {
2026-05-07 14:34:51 -04:00
Libp2pModuleImpl nodeA(Libp2pModuleOptions{ .mountServiceDiscovery = true });
LOGOS_ASSERT_TRUE(nodeA.start().success);
auto [peerIdA, addrsA] = getPeerInfoPair(nodeA);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
Libp2pModuleOptions optsB;
optsB.mountServiceDiscovery = true;
optsB.bootstrapNodes = { {peerIdA, addrsA} };
Libp2pModuleImpl nodeB(optsB);
LOGOS_ASSERT_TRUE(nodeB.start().success);
auto [peerIdB, addrsB] = getPeerInfoPair(nodeB);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
auto res = nodeA.kadGetRandomRecords();
LOGOS_ASSERT_TRUE(res.success);
auto records = res.value;
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_FALSE(records.empty());
LOGOS_ASSERT_TRUE(records[0]["peerId"].get<std::string>() == peerIdB);
2026-03-13 10:12:15 +00:00
2026-05-07 14:34:51 -04:00
LOGOS_ASSERT_TRUE(nodeA.stop().success);
LOGOS_ASSERT_TRUE(nodeB.stop().success);
2026-05-07 08:01:35 -04:00
}