14
14
* limitations under the License.
15
15
*/
16
16
17
+ #include < log/logprint.h>
18
+
19
+ #include < string>
20
+
17
21
#include < gtest/gtest.h>
18
22
23
+ #include < log/log_read.h>
24
+
19
25
size_t convertPrintable (char * p, const char * message, size_t messageLen);
20
26
21
27
TEST (liblog, convertPrintable_ascii) {
@@ -85,3 +91,63 @@ TEST(liblog, convertPrintable_mixed) {
85
91
EXPECT_EQ (output_size, strlen (expected_output));
86
92
EXPECT_STREQ (expected_output, output);
87
93
}
94
+
95
+ TEST (liblog, log_print_different_header_size) {
96
+ constexpr int32_t kPid = 123 ;
97
+ constexpr uint32_t kTid = 456 ;
98
+ constexpr uint32_t kSec = 1000 ;
99
+ constexpr uint32_t kNsec = 999 ;
100
+ constexpr uint32_t kLid = LOG_ID_MAIN;
101
+ constexpr uint32_t kUid = 987 ;
102
+ constexpr char kPriority = ANDROID_LOG_ERROR;
103
+
104
+ auto create_buf = [](char * buf, size_t len, uint16_t hdr_size) {
105
+ memset (buf, 0 , len);
106
+ logger_entry* header = reinterpret_cast <logger_entry*>(buf);
107
+ header->hdr_size = hdr_size;
108
+ header->pid = kPid ;
109
+ header->tid = kTid ;
110
+ header->sec = kSec ;
111
+ header->nsec = kNsec ;
112
+ header->lid = kLid ;
113
+ header->uid = kUid ;
114
+ char * message = buf + header->hdr_size ;
115
+ uint16_t message_len = 0 ;
116
+ message[message_len++] = kPriority ;
117
+ message[message_len++] = ' T' ;
118
+ message[message_len++] = ' a' ;
119
+ message[message_len++] = ' g' ;
120
+ message[message_len++] = ' \0 ' ;
121
+ message[message_len++] = ' m' ;
122
+ message[message_len++] = ' s' ;
123
+ message[message_len++] = ' g' ;
124
+ message[message_len++] = ' !' ;
125
+ message[message_len++] = ' \0 ' ;
126
+ header->len = message_len;
127
+ };
128
+
129
+ auto check_entry = [&](const AndroidLogEntry& entry) {
130
+ EXPECT_EQ (kSec , static_cast <uint32_t >(entry.tv_sec ));
131
+ EXPECT_EQ (kNsec , static_cast <uint32_t >(entry.tv_nsec ));
132
+ EXPECT_EQ (kPriority , entry.priority );
133
+ EXPECT_EQ (kUid , static_cast <uint32_t >(entry.uid ));
134
+ EXPECT_EQ (kPid , entry.pid );
135
+ EXPECT_EQ (kTid , static_cast <uint32_t >(entry.tid ));
136
+ EXPECT_STREQ (" Tag" , entry.tag );
137
+ EXPECT_EQ (4U , entry.tagLen ); // Apparently taglen includes the nullptr?
138
+ EXPECT_EQ (4U , entry.messageLen );
139
+ EXPECT_STREQ (" msg!" , entry.message );
140
+ };
141
+ alignas (logger_entry) char buf[LOGGER_ENTRY_MAX_LEN];
142
+ create_buf (buf, sizeof (buf), sizeof (logger_entry));
143
+
144
+ AndroidLogEntry entry_normal_size;
145
+ ASSERT_EQ (0 ,
146
+ android_log_processLogBuffer (reinterpret_cast <logger_entry*>(buf), &entry_normal_size));
147
+ check_entry (entry_normal_size);
148
+
149
+ create_buf (buf, sizeof (buf), sizeof (logger_entry) + 3 );
150
+ AndroidLogEntry entry_odd_size;
151
+ ASSERT_EQ (0 , android_log_processLogBuffer (reinterpret_cast <logger_entry*>(buf), &entry_odd_size));
152
+ check_entry (entry_odd_size);
153
+ }
0 commit comments