equal
deleted
inserted
replaced
63 } |
63 } |
64 } |
64 } |
65 |
65 |
66 // Verify that messages with multiple levels are written |
66 // Verify that messages with multiple levels are written |
67 // to outputs configured for all the corresponding levels |
67 // to outputs configured for all the corresponding levels |
68 TEST_F(LogMessageTest, level_inclusion) { |
68 TEST_VM_F(LogMessageTest, level_inclusion) { |
69 const size_t message_count = 10; |
69 const size_t message_count = 10; |
70 LogMessageBuffer msg[message_count]; |
70 LogMessageBuffer msg[message_count]; |
71 |
71 |
72 struct { |
72 struct { |
73 int message_number; |
73 int message_number; |
117 } |
117 } |
118 } |
118 } |
119 } |
119 } |
120 |
120 |
121 // Verify that messages are logged in the order they are added to the log message |
121 // Verify that messages are logged in the order they are added to the log message |
122 TEST_F(LogMessageTest, line_order) { |
122 TEST_VM_F(LogMessageTest, line_order) { |
123 LogMessageBuffer msg; |
123 LogMessageBuffer msg; |
124 msg.info("info line").error("error line").trace("trace line") |
124 msg.info("info line").error("error line").trace("trace line") |
125 .error("another error").warning("warning line").debug("debug line"); |
125 .error("another error").warning("warning line").debug("debug line"); |
126 _log.write(msg); |
126 _log.write(msg); |
127 |
127 |
129 "another error", "warning line", "debug line", NULL }; |
129 "another error", "warning line", "debug line", NULL }; |
130 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
130 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
131 << "output missing or in incorrect order"; |
131 << "output missing or in incorrect order"; |
132 } |
132 } |
133 |
133 |
134 TEST_F(LogMessageTest, long_message) { |
134 TEST_VM_F(LogMessageTest, long_message) { |
135 // Write 10K bytes worth of log data |
135 // Write 10K bytes worth of log data |
136 LogMessageBuffer msg; |
136 LogMessageBuffer msg; |
137 const size_t size = 10 * K; |
137 const size_t size = 10 * K; |
138 const char* start_marker = "#start#"; |
138 const char* start_marker = "#start#"; |
139 const char* end_marker = "#the end#"; |
139 const char* end_marker = "#the end#"; |
153 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
153 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
154 << "unable to print long line"; |
154 << "unable to print long line"; |
155 FREE_C_HEAP_ARRAY(char, data); |
155 FREE_C_HEAP_ARRAY(char, data); |
156 } |
156 } |
157 |
157 |
158 TEST_F(LogMessageTest, message_with_many_lines) { |
158 TEST_VM_F(LogMessageTest, message_with_many_lines) { |
159 const size_t lines = 100; |
159 const size_t lines = 100; |
160 const size_t line_length = 16; |
160 const size_t line_length = 16; |
161 |
161 |
162 LogMessageBuffer msg; |
162 LogMessageBuffer msg; |
163 for (size_t i = 0; i < lines; i++) { |
163 for (size_t i = 0; i < lines; i++) { |
186 } |
186 } |
187 jio_snprintf(buf, len, "%s", prefix); |
187 jio_snprintf(buf, len, "%s", prefix); |
188 return prefix_len; |
188 return prefix_len; |
189 } |
189 } |
190 |
190 |
191 TEST_F(LogMessageTest, prefixing) { |
191 TEST_VM_F(LogMessageTest, prefixing) { |
192 LogMessageBuffer msg; |
192 LogMessageBuffer msg; |
193 msg.set_prefix(dummy_prefixer); |
193 msg.set_prefix(dummy_prefixer); |
194 for (int i = 0; i < 3; i++) { |
194 for (int i = 0; i < 3; i++) { |
195 msg.info("test %d", i); |
195 msg.info("test %d", i); |
196 } |
196 } |
207 }; |
207 }; |
208 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
208 EXPECT_TRUE(file_contains_substrings_in_order(_level_filename[LogLevel::Trace], expected)) |
209 << "error in prefixed output"; |
209 << "error in prefixed output"; |
210 } |
210 } |
211 |
211 |
212 TEST_F(LogMessageTest, scoped_messages) { |
212 TEST_VM_F(LogMessageTest, scoped_messages) { |
213 { |
213 { |
214 LogMessage(logging) msg; |
214 LogMessage(logging) msg; |
215 msg.info("scoped info"); |
215 msg.info("scoped info"); |
216 msg.warning("scoped warn"); |
216 msg.warning("scoped warn"); |
217 EXPECT_FALSE(file_contains_substring(_level_filename[LogLevel::Info], "scoped info")) |
217 EXPECT_FALSE(file_contains_substring(_level_filename[LogLevel::Info], "scoped info")) |
221 << "missing output from scoped log message"; |
221 << "missing output from scoped log message"; |
222 EXPECT_TRUE(file_contains_substring(_level_filename[LogLevel::Warning], "scoped warn")) |
222 EXPECT_TRUE(file_contains_substring(_level_filename[LogLevel::Warning], "scoped warn")) |
223 << "missing output from scoped log message"; |
223 << "missing output from scoped log message"; |
224 } |
224 } |
225 |
225 |
226 TEST_F(LogMessageTest, scoped_flushing) { |
226 TEST_VM_F(LogMessageTest, scoped_flushing) { |
227 { |
227 { |
228 LogMessage(logging) msg; |
228 LogMessage(logging) msg; |
229 msg.info("manual flush info"); |
229 msg.info("manual flush info"); |
230 msg.flush(); |
230 msg.flush(); |
231 EXPECT_TRUE(file_contains_substring(_level_filename[LogLevel::Info], "manual flush info")) |
231 EXPECT_TRUE(file_contains_substring(_level_filename[LogLevel::Info], "manual flush info")) |
234 const char* tmp[] = {"manual flush info", "manual flush info", NULL}; |
234 const char* tmp[] = {"manual flush info", "manual flush info", NULL}; |
235 EXPECT_FALSE(file_contains_substrings_in_order(_level_filename[LogLevel::Info], tmp)) |
235 EXPECT_FALSE(file_contains_substrings_in_order(_level_filename[LogLevel::Info], tmp)) |
236 << "log file contains duplicate lines from single scoped log message"; |
236 << "log file contains duplicate lines from single scoped log message"; |
237 } |
237 } |
238 |
238 |
239 TEST_F(LogMessageTest, scoped_reset) { |
239 TEST_VM_F(LogMessageTest, scoped_reset) { |
240 { |
240 { |
241 LogMessage(logging) msg, partial; |
241 LogMessage(logging) msg, partial; |
242 msg.info("%s", "info reset msg"); |
242 msg.info("%s", "info reset msg"); |
243 msg.reset(); |
243 msg.reset(); |
244 partial.info("%s", "info reset msg"); |
244 partial.info("%s", "info reset msg"); |