From: git@jeffhostetler.com
To: git@vger.kernel.org
Cc: gitster@pobox.com, peff@peff.net,
Jeff Hostetler <jeffhost@microsoft.com>
Subject: [PATCH v1 07/25] structured-logging: t0420 basic tests
Date: Fri, 13 Jul 2018 16:56:03 +0000 [thread overview]
Message-ID: <20180713165621.52017-8-git@jeffhostetler.com> (raw)
In-Reply-To: <20180713165621.52017-1-git@jeffhostetler.com>
From: Jeff Hostetler <jeffhost@microsoft.com>
Add structured logging prereq definition "SLOG" to test-lib.sh.
Create t0420 test script with some basic tests.
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
---
t/t0420-structured-logging.sh | 143 ++++++++++++++++++++++++++++++++++++++++++
t/t0420/parse_json.perl | 52 +++++++++++++++
t/test-lib.sh | 1 +
3 files changed, 196 insertions(+)
create mode 100755 t/t0420-structured-logging.sh
create mode 100644 t/t0420/parse_json.perl
diff --git a/t/t0420-structured-logging.sh b/t/t0420-structured-logging.sh
new file mode 100755
index 0000000..a594af3
--- /dev/null
+++ b/t/t0420-structured-logging.sh
@@ -0,0 +1,143 @@
+#!/bin/sh
+
+test_description='structured logging tests'
+
+. ./test-lib.sh
+
+if ! test_have_prereq SLOG
+then
+ skip_all='skipping structured logging tests'
+ test_done
+fi
+
+LOGFILE=$TRASH_DIRECTORY/test.log
+
+test_expect_success 'setup' '
+ test_commit hello &&
+ cat >key_cmd_start <<-\EOF &&
+ "event":"cmd_start"
+ EOF
+ cat >key_cmd_exit <<-\EOF &&
+ "event":"cmd_exit"
+ EOF
+ cat >key_exit_code_0 <<-\EOF &&
+ "exit_code":0
+ EOF
+ cat >key_exit_code_129 <<-\EOF &&
+ "exit_code":129
+ EOF
+ git config --local slog.pretty false &&
+ git config --local slog.path "$LOGFILE"
+'
+
+test_expect_success 'basic events' '
+ test_when_finished "rm \"$LOGFILE\"" &&
+ git status >/dev/null &&
+ grep -f key_cmd_start "$LOGFILE" &&
+ grep -f key_cmd_exit "$LOGFILE" &&
+ grep -f key_exit_code_0 "$LOGFILE"
+'
+
+test_expect_success 'basic error code and message' '
+ test_when_finished "rm \"$LOGFILE\" event_exit" &&
+ test_expect_code 129 git status --xyzzy >/dev/null 2>/dev/null &&
+ grep -f key_cmd_exit "$LOGFILE" >event_exit &&
+ grep -f key_exit_code_129 event_exit &&
+ grep "\"errors\":" event_exit
+'
+
+test_lazy_prereq PERLJSON '
+ perl -MJSON -e "exit 0"
+'
+
+# Let perl parse the resulting JSON and dump it out.
+#
+# Since the output contains PIDs, SIDs, clock values, and the full path to
+# git[.exe] we cannot have a HEREDOC with the expected result, so we look
+# for a few key fields.
+#
+test_expect_success PERLJSON 'parse JSON for basic command' '
+ test_when_finished "rm \"$LOGFILE\" event_exit" &&
+ git status >/dev/null &&
+
+ grep -f key_cmd_exit "$LOGFILE" >event_exit &&
+
+ perl "$TEST_DIRECTORY"/t0420/parse_json.perl <event_exit >parsed_exit &&
+
+ grep "row\[0\]\.version\.slog 0" <parsed_exit &&
+ grep "row\[0\]\.argv\[1\] status" <parsed_exit &&
+ grep "row\[0\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[0\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[0\]\.command status" <parsed_exit
+'
+
+test_expect_success PERLJSON 'parse JSON for branch command/sub-command' '
+ test_when_finished "rm \"$LOGFILE\" event_exit" &&
+ git branch -v >/dev/null &&
+ git branch --all >/dev/null &&
+ git branch new_branch >/dev/null &&
+
+ grep -f key_cmd_exit "$LOGFILE" >event_exit &&
+
+ perl "$TEST_DIRECTORY"/t0420/parse_json.perl <event_exit >parsed_exit &&
+
+ grep "row\[0\]\.version\.slog 0" <parsed_exit &&
+ grep "row\[0\]\.argv\[1\] branch" <parsed_exit &&
+ grep "row\[0\]\.argv\[2\] -v" <parsed_exit &&
+ grep "row\[0\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[0\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[0\]\.command branch" <parsed_exit &&
+ grep "row\[0\]\.sub_command list" <parsed_exit &&
+
+ grep "row\[1\]\.argv\[1\] branch" <parsed_exit &&
+ grep "row\[1\]\.argv\[2\] --all" <parsed_exit &&
+ grep "row\[1\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[1\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[1\]\.command branch" <parsed_exit &&
+ grep "row\[1\]\.sub_command list" <parsed_exit &&
+
+ grep "row\[2\]\.argv\[1\] branch" <parsed_exit &&
+ grep "row\[2\]\.argv\[2\] new_branch" <parsed_exit &&
+ grep "row\[2\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[2\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[2\]\.command branch" <parsed_exit &&
+ grep "row\[2\]\.sub_command create" <parsed_exit
+'
+
+test_expect_success PERLJSON 'parse JSON for checkout command' '
+ test_when_finished "rm \"$LOGFILE\" event_exit" &&
+ git checkout new_branch >/dev/null &&
+ git checkout master >/dev/null &&
+ git checkout -- hello.t >/dev/null &&
+
+ grep -f key_cmd_exit "$LOGFILE" >event_exit &&
+
+ perl "$TEST_DIRECTORY"/t0420/parse_json.perl <event_exit >parsed_exit &&
+
+ grep "row\[0\]\.version\.slog 0" <parsed_exit &&
+ grep "row\[0\]\.argv\[1\] checkout" <parsed_exit &&
+ grep "row\[0\]\.argv\[2\] new_branch" <parsed_exit &&
+ grep "row\[0\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[0\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[0\]\.command checkout" <parsed_exit &&
+ grep "row\[0\]\.sub_command switch_branch" <parsed_exit &&
+
+ grep "row\[1\]\.version\.slog 0" <parsed_exit &&
+ grep "row\[1\]\.argv\[1\] checkout" <parsed_exit &&
+ grep "row\[1\]\.argv\[2\] master" <parsed_exit &&
+ grep "row\[1\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[1\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[1\]\.command checkout" <parsed_exit &&
+ grep "row\[1\]\.sub_command switch_branch" <parsed_exit &&
+
+ grep "row\[2\]\.version\.slog 0" <parsed_exit &&
+ grep "row\[2\]\.argv\[1\] checkout" <parsed_exit &&
+ grep "row\[2\]\.argv\[2\] --" <parsed_exit &&
+ grep "row\[2\]\.argv\[3\] hello.t" <parsed_exit &&
+ grep "row\[2\]\.event cmd_exit" <parsed_exit &&
+ grep "row\[2\]\.result\.exit_code 0" <parsed_exit &&
+ grep "row\[2\]\.command checkout" <parsed_exit &&
+ grep "row\[2\]\.sub_command path" <parsed_exit
+'
+
+test_done
diff --git a/t/t0420/parse_json.perl b/t/t0420/parse_json.perl
new file mode 100644
index 0000000..ca4e5bf
--- /dev/null
+++ b/t/t0420/parse_json.perl
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use JSON;
+
+sub dump_array {
+ my ($label_in, $ary_ref) = @_;
+ my @ary = @$ary_ref;
+
+ for ( my $i = 0; $i <= $#{ $ary_ref }; $i++ )
+ {
+ my $label = "$label_in\[$i\]";
+ dump_item($label, $ary[$i]);
+ }
+}
+
+sub dump_hash {
+ my ($label_in, $obj_ref) = @_;
+ my %obj = %$obj_ref;
+
+ foreach my $k (sort keys %obj) {
+ my $label = (length($label_in) > 0) ? "$label_in.$k" : "$k";
+ my $value = $obj{$k};
+
+ dump_item($label, $value);
+ }
+}
+
+sub dump_item {
+ my ($label_in, $value) = @_;
+ if (ref($value) eq 'ARRAY') {
+ print "$label_in array\n";
+ dump_array($label_in, $value);
+ } elsif (ref($value) eq 'HASH') {
+ print "$label_in hash\n";
+ dump_hash($label_in, $value);
+ } elsif (defined $value) {
+ print "$label_in $value\n";
+ } else {
+ print "$label_in null\n";
+ }
+}
+
+my $row = 0;
+while (<>) {
+ my $data = decode_json( $_ );
+ my $label = "row[$row]";
+
+ dump_hash($label, $data);
+ $row++;
+}
+
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 2831570..3d38bc7 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1071,6 +1071,7 @@ test -n "$USE_LIBPCRE1$USE_LIBPCRE2" && test_set_prereq PCRE
test -n "$USE_LIBPCRE1" && test_set_prereq LIBPCRE1
test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
+test -z "$STRUCTURED_LOGGING" || test_set_prereq SLOG
# Can we rely on git's output in the C locale?
if test -n "$GETTEXT_POISON"
--
2.9.3
next prev parent reply other threads:[~2018-07-13 16:56 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-13 16:55 [PATCH v1 00/25] RFC: structured logging git
2018-07-13 16:55 ` [PATCH v1 01/25] structured-logging: design document git
2018-07-14 8:34 ` Simon Ruderich
2018-08-03 15:26 ` Ben Peart
2018-08-09 14:30 ` Jeff Hostetler
2018-08-21 4:47 ` Jonathan Nieder
2018-07-13 16:55 ` [PATCH v1 02/25] structured-logging: add STRUCTURED_LOGGING=1 to Makefile git
2018-08-21 4:49 ` Jonathan Nieder
2018-07-13 16:55 ` [PATCH v1 03/25] structured-logging: add structured logging framework git
2018-07-26 9:09 ` SZEDER Gábor
2018-07-27 12:45 ` Jeff Hostetler
2018-08-21 5:05 ` Jonathan Nieder
2018-07-13 16:56 ` [PATCH v1 04/25] structured-logging: add session-id to log events git
2018-07-13 16:56 ` [PATCH v1 05/25] structured-logging: set sub_command field for branch command git
2018-07-13 16:56 ` [PATCH v1 06/25] structured-logging: set sub_command field for checkout command git
2018-07-13 16:56 ` git [this message]
2018-07-13 16:56 ` [PATCH v1 08/25] structured-logging: add detail-event facility git
2018-07-13 16:56 ` [PATCH v1 09/25] structured-logging: add detail-event for lazy_init_name_hash git
2018-07-13 16:56 ` [PATCH v1 10/25] structured-logging: add timer facility git
2018-07-13 16:56 ` [PATCH v1 11/25] structured-logging: add timer around do_read_index git
2018-07-13 16:56 ` [PATCH v1 12/25] structured-logging: add timer around do_write_index git
2018-07-13 16:56 ` [PATCH v1 13/25] structured-logging: add timer around wt-status functions git
2018-07-13 16:56 ` [PATCH v1 14/25] structured-logging: add timer around preload_index git
2018-07-13 16:56 ` [PATCH v1 15/25] structured-logging: t0420 tests for timers git
2018-07-13 16:56 ` [PATCH v1 16/25] structured-logging: add aux-data facility git
2018-07-13 16:56 ` [PATCH v1 17/25] structured-logging: add aux-data for index size git
2018-07-13 16:56 ` [PATCH v1 18/25] structured-logging: add aux-data for size of sparse-checkout file git
2018-07-13 16:56 ` [PATCH v1 19/25] structured-logging: t0420 tests for aux-data git
2018-07-13 16:56 ` [PATCH v1 20/25] structured-logging: add structured logging to remote-curl git
2018-07-13 16:56 ` [PATCH v1 21/25] structured-logging: add detail-events for child processes git
2018-07-13 16:56 ` [PATCH v1 22/25] structured-logging: add child process classification git
2018-07-13 16:56 ` [PATCH v1 23/25] structured-logging: t0420 tests for child process detail events git
2018-07-13 16:56 ` [PATCH v1 24/25] structured-logging: t0420 tests for interacitve child_summary git
2018-07-13 16:56 ` [PATCH v1 25/25] structured-logging: add config data facility git
2018-07-13 18:51 ` [PATCH v1 00/25] RFC: structured logging David Lang
2018-07-16 13:29 ` Jeff Hostetler
2018-08-28 17:38 ` Junio C Hamano
2018-08-28 18:47 ` Jeff Hostetler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180713165621.52017-8-git@jeffhostetler.com \
--to=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jeffhost@microsoft.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).