From fb6cd9ca585c4194a5b88053f6861151919c02df Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Wed, 14 Aug 2024 14:24:20 +0200 Subject: wip --- modules/core/c++/test/suite.hpp | 6 ++- modules/remote-filesystem/.nix/derivation.nix | 8 +++- modules/remote-filesystem/c++/transfer.hpp | 53 +++++++++++++++++++++++++-- modules/remote-filesystem/tests/transport.cpp | 34 ++++++++++++++++- 4 files changed, 93 insertions(+), 8 deletions(-) (limited to 'modules') diff --git a/modules/core/c++/test/suite.hpp b/modules/core/c++/test/suite.hpp index 88d741a..52ef71d 100644 --- a/modules/core/c++/test/suite.hpp +++ b/modules/core/c++/test/suite.hpp @@ -47,6 +47,10 @@ public: if( (eov_expr.is_error()) ){ \ auto& err = eov_expr.get_error(); \ std::stringstream sstr; \ - sstr< 0u){ \ + sstr<<" [Message] "< #include +#include + namespace saw { template class data_server final : public i_data_server { private: ptr> remote_; remote_address addr_; + + static error generate_invalid_id_error() { + return make_error("rmt::File data_server only supports Id 0."); + } public: static constexpr std::pair class_id{schema_hash::apply(), schema_hash::apply()}; @@ -29,21 +36,59 @@ public: return class_id; } - error_or send(const data& dat, id store_id){ - return make_error(); + error_or send(data& dat, id store_id){ + if(store_id.get_value() > 0u){ + return generate_invalid_id_error(); + } + + std::basic_fstream s{addr_.get_path(), s.binary | s.out}; + if(!s.is_open()){ + return make_error("Couldn't open file"); + } + + auto& buff = dat.get_buffer(); + buffer_view buff_v{buff}; + while(buff_v.read_segment_length() > 0u){ + s.write(&buff_v.read(), buff_v.read_segment_length()); + + buff_v.read_advance(buff_v.read_segment_length()); + } + return make_void(); } error_or allocate(data::MetaSchema, Encoding> meta, id store_id){ + if(store_id.get_value() > 0u){ + return generate_invalid_id_error(); + } return make_error(); } error_or erase(id store_id){ + if(store_id.get_value() > 0u){ + return generate_invalid_id_error(); + } return make_error(); } error_or> receive(id store_id){ - return make_error(); - } + if(store_id.get_value() > 0u){ + return generate_invalid_id_error(); + } + data dat{heap(1u)}; + std::basic_fstream s{addr_.get_path(), s.binary | s.in}; + if(!s.is_open()){ + return make_error("Couldn't open file"); + } + uint8_t ele{}; + while(s.readsome(&ele, 1u) > 0u){ + auto err = dat.get_buffer().push(ele); + if(err.failed()){ + return err; + } + } + + return dat; + } }; } diff --git a/modules/remote-filesystem/tests/transport.cpp b/modules/remote-filesystem/tests/transport.cpp index e8df294..7472220 100644 --- a/modules/remote-filesystem/tests/transport.cpp +++ b/modules/remote-filesystem/tests/transport.cpp @@ -26,7 +26,37 @@ SAW_TEST("File Remote"){ SAW_EOV_EXPECT(eo_dat_srv, "Couldn't setup data server."); auto& dat_srv = eo_dat_srv.get_value(); - + std::string a = "blafoobla"; + int64_t b = 42; + + { + data nat_foo; + nat_foo.template get<"a">().set(a); + nat_foo.template get<"b">().set(b); + + data smp_foo; + + codec smp_cod; + auto eov = smp_cod.encode(nat_foo,smp_foo); + SAW_EOV_EXPECT(eov, "Failed to encode."); + + id foo_id{0u}; + auto eo_send = dat_srv->send(smp_foo, foo_id); + SAW_EOV_EXPECT(eo_send, "Failed to send."); + } + { + data nat_foo; + + id foo_id{0u}; + auto eo_recv = dat_srv->receive(foo_id); + SAW_EOV_EXPECT(eo_recv, "Failed to receive"); + auto& recv = eo_recv.get_value(); + + codec smp_cod; + auto eov = smp_cod.decode(recv, nat_foo); + SAW_EOV_EXPECT(eov, "Failed to decode."); + + SAW_EXPECT(nat_foo.template get<"b">().get() == b, "Wrong value."); + } } - } -- cgit v1.2.3