| 32 | namespace impala { |
| 33 | |
| 34 | TEST(ThriftUtil, SimpleSerializeDeserialize) { |
| 35 | // Loop over compact and binary protocols |
| 36 | for (int i = 0; i < 2; ++i) { |
| 37 | bool compact = (i == 0); |
| 38 | ThriftSerializer serializer(compact); |
| 39 | |
| 40 | TCounter counter; |
| 41 | counter.__set_name("Test"); |
| 42 | counter.__set_unit(TUnit::UNIT); |
| 43 | counter.__set_value(123); |
| 44 | |
| 45 | vector<uint8_t> msg; |
| 46 | EXPECT_OK(serializer.SerializeToVector(&counter, &msg)); |
| 47 | |
| 48 | uint8_t* buffer1 = NULL; |
| 49 | uint8_t* buffer2 = NULL; |
| 50 | uint32_t len1 = 0; |
| 51 | uint32_t len2 = 0; |
| 52 | |
| 53 | EXPECT_OK(serializer.SerializeToBuffer(&counter, &len1, &buffer1)); |
| 54 | |
| 55 | EXPECT_EQ(len1, msg.size()); |
| 56 | EXPECT_TRUE(memcmp(buffer1, msg.data(), len1) == 0); |
| 57 | |
| 58 | // Serialize again and ensure the memory buffer is the same and being reused. |
| 59 | EXPECT_OK(serializer.SerializeToBuffer(&counter, &len2, &buffer2)); |
| 60 | |
| 61 | EXPECT_EQ(len1, len2); |
| 62 | EXPECT_TRUE(buffer1 == buffer2); |
| 63 | |
| 64 | TCounter deserialized_counter; |
| 65 | EXPECT_OK(DeserializeThriftMsg(buffer1, &len1, compact, &deserialized_counter)); |
| 66 | EXPECT_EQ(len1, len2); |
| 67 | EXPECT_EQ(counter, deserialized_counter); |
| 68 | |
| 69 | // Serialize to string |
| 70 | std::string str; |
| 71 | EXPECT_OK(serializer.SerializeToString(&counter, &str)); |
| 72 | EXPECT_EQ(len2, str.length()); |
| 73 | |
| 74 | // Verifies that deserialization of 'str' works. |
| 75 | TCounter deserialized_counter_2; |
| 76 | EXPECT_OK(DeserializeThriftMsg(reinterpret_cast<const uint8_t*>(str.data()), &len2, |
| 77 | compact, &deserialized_counter_2)); |
| 78 | EXPECT_EQ(counter, deserialized_counter_2); |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | TEST(ThriftUtil, SerDeBuffer100MB) { |
| 83 | // Test ThriftSerializer and DeserializeThriftMsg to handle a little over 100MB |
nothing calls this directly
no test coverage detected