summaryrefslogtreecommitdiff
path: root/modules/codec/tests/transport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/tests/transport.cpp')
-rw-r--r--modules/codec/tests/transport.cpp114
1 files changed, 104 insertions, 10 deletions
diff --git a/modules/codec/tests/transport.cpp b/modules/codec/tests/transport.cpp
index e24fae6..f5943dd 100644
--- a/modules/codec/tests/transport.cpp
+++ b/modules/codec/tests/transport.cpp
@@ -1,6 +1,7 @@
#include <forstio/test/suite.hpp>
#include "../c++/data.hpp"
#include "../c++/simple.hpp"
+#include "../c++/transport.hpp"
#include <iostream>
@@ -23,12 +24,10 @@ using TestStruct = Struct<
SAW_TEST("Transport FixedLen Struct write and slice"){
using namespace saw;
- return;
ring_buffer buff{2048u};
data<schema::TestStruct,encode::Native> native;
-
- data<schema::TestStruct,encode::KelSimple> simple{heap<buffer_view>(buff)};
+ data<schema::TestStruct,encode::KelSimple> simple;
{
auto& tda = native.template get<"two_dim_array">();
@@ -40,12 +39,30 @@ SAW_TEST("Transport FixedLen Struct write and slice"){
}
codec<schema::TestStruct, encode::KelSimple> codec;
- auto eov = codec.encode(native, simple);
- SAW_EXPECT(eov.is_value(), "Encoding error");
+ {
+ auto eov = codec.encode(native, simple);
+ SAW_EXPECT(eov.is_value(), "Encoding error.");
+ }
+
+ {
+ auto& rd_buff = simple.get_buffer();
+
+ {
+ auto eov = stream_value<schema::UInt64>::encode(rd_buff.read_composite_length(), buff);
+ SAW_EXPECT(eov.is_value(), "Buffer write length error.");
+ }
+ {
+ auto eov = buff.write_from(rd_buff);
+ SAW_EXPECT(eov.is_value(), "Buffer copy error.");
+ auto& val = eov.get_value();
+ rd_buff.read_advance(val);
+ buff.write_advance(val);
+ }
+ }
// Reset values
native = {};
- simple = {heap<buffer_view>(buff)};
+ simple = {};
{
auto& tda = native.template get<"two_dim_array">();
tda = {1,2};
@@ -54,10 +71,87 @@ SAW_TEST("Transport FixedLen Struct write and slice"){
tda.at(0,1).set(4);
native.template get<"number">().set(709);
}
+ {
+ auto eov = codec.encode(native, simple);
+ SAW_EXPECT(eov.is_value(), "Encoding error on second try.");
+ }
+
+ {
+ auto& rd_buff = simple.get_buffer();
+
+ {
+ auto eov = stream_value<schema::UInt64>::encode(rd_buff.read_composite_length(), buff);
+ SAW_EXPECT(eov.is_value(), "Buffer write length error.");
+ }
+ {
+ auto eov = buff.write_from(rd_buff);
+ SAW_EXPECT(eov.is_value(), "Buffer copy error.");
+ auto& val = eov.get_value();
+ rd_buff.read_advance(val);
+ buff.write_advance(val);
+ }
+ }
- auto eov = codec.encode(native, simple);
- SAW_EXPECT(eov.is_value(), "Encoding error");
-
+ transport<trans::FixedLength<8>> trans;
+ {
+ auto eo_slice = trans.view_slice(buff);
+
+ SAW_EXPECT(eo_slice.is_value(), "Buffer write length error.");
+ auto& slice = eo_slice.get_value();
+
+ auto arr_buff = heap<array_buffer>(1024u);
+ {
+ auto eov = arr_buff->write_from(slice);
+ SAW_EXPECT(eov.is_value(), "Failed to copy buffer.");
+ auto& len_val = eov.get_value();
+
+ slice.read_advance(len_val);
+ buff.read_advance(len_val);
+ arr_buff->write_advance(len_val);
+ }
+
+ data<schema::TestStruct, encode::KelSimple> simple_slice{std::move(arr_buff)};
+ native = {};
+ auto eov = codec.decode(simple_slice, native);
+ SAW_EXPECT(eov.is_value(), "Decoding error on first try.");
+
+ {
+ auto& tda = native.template get<"two_dim_array">();
+
+ SAW_EXPECT(tda.at(0,0).get() == 5, "Decoded value (0,0) wrong.");
+ SAW_EXPECT(tda.at(0,1).get() == 3, "Decoded value (0,1) wrong.");
+ SAW_EXPECT(native.template get<"number">().get() == 410, "Decoded value number wrong.");
+ }
+ }
+ {
+ auto eo_slice = trans.view_slice(buff);
+
+ SAW_EXPECT(eo_slice.is_value(), "Buffer write length error.");
+ auto& slice = eo_slice.get_value();
+
+ auto arr_buff = heap<array_buffer>(1024u);
+ {
+ auto eov = arr_buff->write_from(slice);
+ SAW_EXPECT(eov.is_value(), "Failed to copy buffer.");
+ auto& len_val = eov.get_value();
+
+ slice.read_advance(len_val);
+ buff.read_advance(len_val);
+ arr_buff->write_advance(len_val);
+ }
+
+ data<schema::TestStruct, encode::KelSimple> simple_slice{std::move(arr_buff)};
+ native = {};
+ auto eov = codec.decode(simple_slice, native);
+ SAW_EXPECT(eov.is_value(), "Decoding error on second try.");
+
+ {
+ auto& tda = native.template get<"two_dim_array">();
+
+ SAW_EXPECT(tda.at(0,0).get() == 2, "Decoded value (0,0) wrong.");
+ SAW_EXPECT(tda.at(0,1).get() == 4, "Decoded value (0,1) wrong.");
+ SAW_EXPECT(native.template get<"number">().get() == 709, "Decoded value number wrong.");
+ }
+ }
}
-
}