2323#include " arrow/ipc/dictionary.h"
2424#include " arrow/ipc/metadata_internal.h"
2525#include " arrow/ipc/options.h"
26+ #include " arrow/ipc/reader.h"
2627#include " arrow/testing/gtest_util.h"
2728#include " arrow/util/key_value_metadata.h"
2829
@@ -38,8 +39,6 @@ using FBB = flatbuffers::FlatBufferBuilder;
3839// lead to unnecessary platform- or toolchain-specific differences in
3940// serialization.
4041TEST (TestMessageInternal, TestByteIdentical) {
41- FBB fbb;
42- flatbuffers::Offset<org::apache::arrow::flatbuf::Schema> fb_schema;
4342 DictionaryFieldMapper mapper;
4443
4544 // Create a simple Schema with just two metadata KVPs
@@ -78,4 +77,29 @@ TEST(TestMessageInternal, TestByteIdentical) {
7877
7978 AssertBufferEqual (expected_buffer, *out_buffer);
8079}
80+
81+ TEST (TestMessageInternal, TestEndiannessRoundtrip) {
82+ DictionaryFieldMapper mapper;
83+
84+ for (const auto endianness : {Endianness::Little, Endianness::Big}) {
85+ // Create a simple Schema with just two metadata KVPs
86+ auto f0 = field (" f0" , int64 ());
87+ auto f1 = field (" f1" , int64 ());
88+ std::vector<std::shared_ptr<Field>> fields = {f0, f1};
89+ std::shared_ptr<KeyValueMetadata> metadata =
90+ KeyValueMetadata::Make ({" key_1" , " key_2" }, {" key_1_value" , " key_2_value" });
91+ auto schema = ::arrow::schema ({f0}, endianness, metadata);
92+
93+ // Serialize the Schema to a Buffer
94+ std::shared_ptr<Buffer> out_buffer;
95+ ASSERT_OK (
96+ WriteSchemaMessage (*schema, mapper, IpcWriteOptions::Defaults (), &out_buffer));
97+
98+ // Re-open to a new Message and parse Schema
99+ ASSERT_OK_AND_ASSIGN (auto message, Message::Open (out_buffer, /* body=*/ nullptr ));
100+ ASSERT_OK_AND_ASSIGN (auto parsed_schema, ReadSchema (*message, nullptr ));
101+ AssertSchemaEqual (*schema, *parsed_schema, /* check_metadata=*/ true );
102+ }
103+ }
104+
81105} // namespace arrow::ipc::internal
0 commit comments