Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: init/tests/test_perf_log.c

Issue 524041: Changes to make upstart log performance stats to a file. (Closed)
Patch Set: More tab/space stuff Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « init/perf_log.c ('k') | make_pkg.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: init/tests/test_perf_log.c
diff --git a/init/tests/test_perf_log.c b/init/tests/test_perf_log.c
new file mode 100644
index 0000000000000000000000000000000000000000..a3d6fb01cae1a6ae565330a77c30c3a62f77f0ad
--- /dev/null
+++ b/init/tests/test_perf_log.c
@@ -0,0 +1,194 @@
+// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <nih/test.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#include <nih/error.h>
+#include <nih/file.h>
+
+#include "perf_log.h"
+
+
+static void
+check_file_contents (const char *file,
+ const char *expected)
+{
+ char *buf;
+ size_t len = 0;
+ buf = nih_file_read (NULL, file, &len);
+ if (! expected) {
+ NihError *err;
+ err = nih_error_get ();
+ TEST_EQ (err->number, ENOENT);
+ TEST_EQ (len, 0);
+ TEST_EQ_P (buf, NULL);
+ nih_free (err);
+ return;
+ }
+ TEST_NE_P (buf, NULL);
+ TEST_EQ (len, strlen(expected));
+ TEST_TRUE (strncmp(buf, expected, len) == 0);
+ nih_free (buf);
+}
+
+
+static void
+create_test_file (const char *filename,
+ const char *contents)
+{
+ FILE *fp;
+ fp = fopen(filename, "w");
+ TEST_NE_P (fp, NULL);
+ fwrite (contents, 1, strlen(contents), fp);
+ fclose (fp);
+}
+
+
+void
+test_get_file_fields (void)
+{
+ char test_file[PATH_MAX];
+ TEST_FUNCTION ("get_file_field");
+ TEST_FILENAME (test_file);
+ char **result;
+ int fields = 0;
+
+ TEST_FEATURE ("with NULL file");
+ TEST_ALLOC_FAIL {
+ result = get_file_fields (NULL, NULL, " ", &fields);
+ TEST_EQ_P (result, NULL);
+ TEST_EQ (fields, 0);
+ }
+
+ TEST_FEATURE ("with non-existent file");
+ TEST_ALLOC_FAIL {
+ result = get_file_fields (NULL, test_file, " ", &fields);
+ TEST_EQ_P (result, NULL);
+ TEST_EQ (fields, 0);
+ }
+
+ TEST_FEATURE ("regular space delimiter");
+ create_test_file (test_file, "0.1564 1234\n");
+ TEST_ALLOC_FAIL {
+ result = get_file_fields (NULL, test_file, " ", &fields);
+ if (! test_alloc_failed || result) {
+ /* if the allocation that failed is for the
+ file contents, allow NULL. */
+ TEST_EQ (fields, 2);
+ TEST_EQ_STR (result[0], "0.1564");
+ TEST_EQ_STR (result[1], "1234\n");
+ nih_free (result);
+ }
+ }
+
+ TEST_FEATURE ("repeated delimiters");
+ create_test_file (test_file, " 0.1564 1234\n");
+ result = get_file_fields (NULL, test_file, " \n", &fields);
+ TEST_EQ (fields, 2);
+ TEST_EQ_STR (result[0], "0.1564");
+ TEST_EQ_STR (result[1], "1234");
+ nih_free (result);
+
+ TEST_FEATURE ("non space delimiter");
+ create_test_file (test_file, "123,456");
+ result = get_file_fields (NULL, test_file, " ", &fields);
+ TEST_EQ (fields, 1);
+ TEST_EQ_STR (result[0], "123,456");
+ nih_free (result);
+ result = get_file_fields (NULL, test_file, ",", &fields);
+ TEST_EQ (fields, 2);
+ TEST_EQ_STR (result[0], "123");
+ TEST_EQ_STR (result[1], "456");
+ nih_free (result);
+
+ TEST_FEATURE ("read from special file");
+ result = get_file_fields (NULL, "/proc/uptime", " \n", &fields);
+ TEST_EQ (fields, 2);
+ TEST_TRUE (isdigit (result[0][0]));
+ TEST_TRUE (isdigit (result[1][0]));
+ nih_free (result);
+}
+
+
+void
+test_perf_log_message (void)
+{
+ char log_file[PATH_MAX];
+ char uptime_file[PATH_MAX];
+ char diskstats_file[PATH_MAX];
+ TEST_FUNCTION ("perf_log_message");
+ TEST_FILENAME (log_file);
+ TEST_FILENAME (uptime_file);
+ TEST_FILENAME (diskstats_file);
+
+ create_test_file(uptime_file, "a1 b\n");
+ create_test_file(diskstats_file, "a b c1 d e f g\n");
+
+ /* By setting a NULL log_file, we accumulate the log messages. */
+ perf_log_set_files (uptime_file, diskstats_file, NULL);
+
+ perf_log_message ("test %d\n", 1);
+
+ create_test_file (uptime_file, "a2 b\n");
+ create_test_file (diskstats_file, "a b c2 d e f g\n");
+
+ perf_log_message ("test %d\n", 2);
+
+ check_file_contents (log_file, NULL);
+
+ /* Set the log_file, which flushes. */
+ perf_log_set_files (uptime_file, diskstats_file, log_file);
+
+ check_file_contents (log_file, "a1 c1 test 1\na2 c2 test 2\n");
+
+ create_test_file (uptime_file, "a3 b\n");
+ create_test_file (diskstats_file, "a b c3 d e f g\n");
+
+ perf_log_message ("test %d\n", 3);
+
+ check_file_contents (log_file,
+ "a1 c1 test 1\na2 c2 test 2\na3 c3 test 3\n");
+
+ TEST_ALLOC_FAIL {
+ perf_log_message ("test");
+ }
+
+ /* Clear the log file. */
+ create_test_file (log_file, "");
+ TEST_FEATURE ("with bad input files");
+
+ create_test_file (uptime_file, "\n");
+ create_test_file (diskstats_file, "a b c\n");
+ perf_log_message ("test bad uptime\n");
+
+ check_file_contents (log_file,
+ "- c test bad uptime\n");
+
+ create_test_file (uptime_file, "a b\n");
+ create_test_file (diskstats_file, "a b\n");
+ perf_log_message ("test bad diskstats\n");
+
+ check_file_contents (log_file,
+ "- c test bad uptime\na - test bad diskstats\n");
+
+ TEST_FEATURE ("with unwritable output");
+ unlink (log_file);
+ TEST_EQ (mkdir (log_file, 0777), 0);
+ perf_log_message ("Cannot be written\n");
+ rmdir (log_file);
+}
+
+
+int
+main (int argc,
+ char *argv[])
+{
+ test_get_file_fields ();
+ test_perf_log_message ();
+
+ return 0;
+}
« no previous file with comments | « init/perf_log.c ('k') | make_pkg.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698