File: test_tutorial_example.cpp

package info (click to toggle)
reflect-cpp 0.21.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,128 kB
  • sloc: cpp: 50,336; python: 139; makefile: 30; sh: 3
file content (46 lines) | stat: -rw-r--r-- 1,437 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <gtest/gtest.h>

#include <iostream>
#include <rfl.hpp>
#include <rfl/avro.hpp>
#include <string>
#include <vector>

#include "write_and_read.hpp"

/// The basic example from the Avro C tutorial.
namespace test_tutorial_example {

const char PERSON_SCHEMA[] =
    "{\"type\":\"record\",\
  \"name\":\"Person\",\
  \"fields\":[\
     {\"name\": \"ID\", \"type\": \"long\"},\
     {\"name\": \"First\", \"type\": \"string\"},\
     {\"name\": \"Last\", \"type\": \"string\"},\
     {\"name\": \"Phone\", \"type\": \"string\"},\
     {\"name\": \"Age\", \"type\": \"int\"}]}";

struct Person {
  size_t ID;
  std::string First;
  std::string Last;
  std::string Phone;
  int Age;
};

TEST(avro, test_tutorial_example) {
  const auto person = Person{.ID = 1,
                             .First = "Randal",
                             .Last = "Graves",
                             .Phone = "(555) 123-5678",
                             .Age = 30};
  const auto schema = rfl::avro::Schema<Person>::from_json(PERSON_SCHEMA);
  const auto serialized1 = rfl::avro::write(person, schema.value());
  const auto res = rfl::avro::read<Person>(serialized1, schema.value());
  EXPECT_TRUE(res && true) << "Test failed on read. Error: "
                           << res.error().what();
  const auto serialized2 = rfl::avro::write(res.value(), schema.value());
  EXPECT_EQ(serialized1, serialized2);
}
}  // namespace test_tutorial_example