ZIO
Python and C++ interface to ZeroMQ and Zyre
test_message.cpp
Go to the documentation of this file.
1 #include "zio/message.hpp"
2 #include "zio/main.hpp"
3 #include "zio/logging.hpp"
4 
5 #include <cassert>
6 
7 int main()
8 {
10 
11  std::string label = "Extra spicy";
12 
13  zio::Message msg({{zio::level::MessageLevel(4),"TEXT",label},
14  {0xdeadbeaf,1234,0}});
15  std::string spl = "Recipe for grandma's hot wings";
16  msg.add(zio::message_t(spl.data(), spl.size()));
17 
18  assert (msg.level() == 4);
19  assert (msg.form() == "TEXT");
20  assert (msg.seqno() == 0);
21  assert(!msg.payload().empty());
22  {
23  std::string s(msg.payload()[0].data<const char>(),msg.payload()[0].size());
24  assert(s == spl);
25  }
26 
27  auto spmsg = msg.encode();
28  char* raw = spmsg.data<char>();
29  size_t raw_size = spmsg.size();
30  for (size_t ind=0; ind<raw_size; ++ind) {
31  char c = raw[ind];
32  zio::debug("{}[{}] ({})", ind, c, (int)c);
33  }
34 
35  zio::Message msg2;
36  msg2.decode(spmsg);
37 
38  assert (msg2.level() == 4);
39  assert (msg2.form() == "TEXT");
40  assert (msg2.seqno() == 0);
41  assert(!msg2.payload().empty());
42  {
43  std::string s(msg2.payload()[0].data<const char>(),msg2.payload()[0].size());
44  assert(s == spl);
45  }
46 
47  zio::json lobj{{"flow","EOT"},{"direction","extract"}};
48  msg.set_label(lobj.dump());
49  auto obj = zio::json::parse(msg.label());
50  assert(obj["flow"] == "EOT");
51  assert(obj["direction"] == "extract");
52  obj["direction"] = "inject";
53  zio::debug(msg.label());
54  msg.set_label(obj.dump());
55  obj = zio::json::parse(msg.label());
56  assert(obj["direction"] == "inject");
57  zio::debug(msg.label());
58 
59  {
60  zio::Message empty;
61  assert(empty.form().size() == 4);
62  assert(empty.form() == " ");
63  assert(empty.prefix().dumps().substr(0,8) == "ZIO0 ");
64  empty.set_form("FOO");
65  assert(empty.form().size() == 4);
66  assert(empty.form() == "FOO ");
67  assert(empty.prefix().dumps().substr(0,8) == "ZIO0FOO ");
68  }
69 
70  return 0;
71 }
std::string form() const
Definition: message.cpp:90
level::MessageLevel level() const
Definition: message.cpp:67
seqno_t seqno() const
Definition: message.hpp:86
const PrefixHeader & prefix() const
Definition: message.hpp:82
void add(message_t &&spmsg)
Definition: message.hpp:112
void set_form(const std::string &form)
Definition: message.cpp:93
const multipart_t & payload() const
Access payload(s)
Definition: message.hpp:110
int main()
Definition: test_message.cpp:7
void decode(const message_t &dat)
Definition: message.cpp:128
void init_all()
Definition: main.cpp:22
std::string dumps() const
Definition: message.cpp:20
def parse(rule_object, params)
Definition: rules.py:11
a ZIO message
Definition: message.hpp:59
nlohmann::json json
Definition: interned.hpp:9