diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2021-12-09 22:45:43 +0100 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2021-12-09 22:45:59 +0100 |
commit | 380f8e539d73f37c2ef5d7133d3e1b6dda105f4a (patch) | |
tree | 505f743d8de3e1fcb20f10e99ab56f81feae8461 | |
parent | 1cef5fc2744d2428f28976c7adb0f476d8bc3bcf (diff) |
Test: distinguish address and identity info for peers
-rw-r--r-- | include/erebos/network.h | 3 | ||||
-rw-r--r-- | src/main.cpp | 17 | ||||
-rw-r--r-- | src/network.cpp | 7 | ||||
-rw-r--r-- | test/attach.test | 18 | ||||
-rw-r--r-- | test/discovery.test | 10 | ||||
-rw-r--r-- | test/sync.test | 18 |
6 files changed, 50 insertions, 23 deletions
diff --git a/include/erebos/network.h b/include/erebos/network.h index 252c3c7..07ae586 100644 --- a/include/erebos/network.h +++ b/include/erebos/network.h @@ -6,6 +6,8 @@ #include <functional> #include <typeinfo> +struct sockaddr_in; + namespace erebos { class Server @@ -54,6 +56,7 @@ public: std::string name() const; std::optional<Identity> identity() const; + const struct sockaddr_in & address() const; bool hasChannel() const; bool send(UUID, const Ref &) const; diff --git a/src/main.cpp b/src/main.cpp index a3805e0..b061747 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,10 @@ #include <erebos/storage.h> #include <erebos/sync.h> +#include <arpa/inet.h> +#include <netinet/in.h> +#include <sys/socket.h> + #include <filesystem> #include <functional> #include <future> @@ -140,11 +144,16 @@ void startServer(const vector<string> &) server->peerList().onUpdate([](size_t idx, const Peer * peer) { ostringstream ss; - ss << "peer " << idx; + ss << "peer " << idx + 1; if (peer) { - ss << " " << peer->name(); - if (peer->identity() && peer->identity()->name()) - ss << " " << *peer->identity()->name(); + if (peer->identity()) { + ss << " id"; + for (auto idt = peer->identity(); idt; idt = idt->owner()) + ss << " " << (idt->name() ? *idt->name() : "<unnamed>"); + } else { + const auto & paddr = peer->address(); + ss << " addr " << inet_ntoa(paddr.sin_addr) << " " << ntohs(paddr.sin_port); + } } else { ss << " deleted"; } diff --git a/src/network.cpp b/src/network.cpp index 1d38bdd..b735262 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -116,6 +116,13 @@ optional<Identity> Peer::identity() const return nullopt; } +const sockaddr_in & Peer::address() const +{ + if (auto speer = p->speer.lock()) + return speer->addr; + throw runtime_error("Server no longer running"); +} + void Peer::Priv::notifyWatchers() { if (auto slist = list.lock()) { diff --git a/test/attach.test b/test/attach.test index 4e2238e..7115b55 100644 --- a/test/attach.test +++ b/test/attach.test @@ -7,19 +7,23 @@ test: send "watch-local-identity" to p2 send "start-server" to p1 send "start-server" to p2 - expect /local-identity Device1 Owner/ from p1 - expect /local-identity Device2/ from p2 - expect /peer [0-9]+ 192.168.0.12:29665/ from p1 - expect /peer [0-9]+ 192.168.0.11:29665/ from p2 - expect /peer [0-9]+ Device2 Device2/ from p1 - expect /peer [0-9]+ Owner Device1/ from p2 + expect from p1: + /local-identity Device1 Owner/ + /peer 1 addr 192.168.0.12 29665/ + /peer 1 id Device2/ + expect from p2: + /local-identity Device2/ + /peer 1 addr 192.168.0.11 29665/ + /peer 1 id Device1 Owner/ + send "attach Owner" to p2 expect /attach-confirm .*/ from p1 expect /attach-confirm .*/ from p2 # TODO: check code match + send "attach-accept Device2 1" to p1 send "attach-accept Owner 1" to p2 expect /attach-result Device2 1/ from p1 expect /attach-result Owner 1/ from p2 expect /local-identity Device2 Owner/ from p2 - expect /peer [0-9]+ Owner Device2/ from p1 + expect /peer 1 id Device2 Owner/ from p1 diff --git a/test/discovery.test b/test/discovery.test index aba6b15..60db1dc 100644 --- a/test/discovery.test +++ b/test/discovery.test @@ -5,7 +5,9 @@ test: send "create-identity Device2" to p2 send "start-server" to p1 send "start-server" to p2 - expect /peer [0-9]+ 192.168.0.12:29665/ from p1 - expect /peer [0-9]+ 192.168.0.11:29665/ from p2 - expect /peer [0-9]+ Device2 Device2/ from p1 - expect /peer [0-9]+ Device1 Device1/ from p2 + expect from p1: + /peer 1 addr 192.168.0.12 29665/ + /peer 1 id Device2/ + expect from p2: + /peer 1 addr 192.168.0.11 29665/ + /peer 1 id Device1/ diff --git a/test/sync.test b/test/sync.test index 2480ce9..8cf5b4d 100644 --- a/test/sync.test +++ b/test/sync.test @@ -9,13 +9,15 @@ test: send "create-identity Device2" to p2 send "start-server" to p1 send "start-server" to p2 - expect /local-identity Device1 Owner/ from p1 - expect /local-identity Device2/ from p2 - expect /shared-identity Owner/ from p1 - expect /peer [0-9]+ 192.168.0.12:29665/ from p1 - expect /peer [0-9]+ 192.168.0.11:29665/ from p2 - expect /peer [0-9]+ Device2 Device2/ from p1 - expect /peer [0-9]+ Owner Device1/ from p2 + expect from p1: + /local-identity Device1 Owner/ + /shared-identity Owner/ + /peer 1 addr 192.168.0.12 29665/ + /peer 1 id Device2/ + expect from p2: + /local-identity Device2/ + /peer 1 addr 192.168.0.11 29665/ + /peer 1 id Device1 Owner/ send "attach Owner" to p2 expect /attach-confirm .*/ from p1 @@ -28,7 +30,7 @@ test: expect /attach-result Owner 1/ from p2 expect /local-identity Device2 Owner/ from p2 expect /shared-identity Owner/ from p2 - expect /peer [0-9]+ Owner Device2/ from p1 + expect /peer 1 id Device2 Owner/ from p1 send "update-shared-identity NewOwner" to p1 expect /shared-identity NewOwner/ from p1 |