]> git.ipfire.org Git - thirdparty/git.git/commitdiff
progress.c tests: make start/stop commands on stdin
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 3 Feb 2022 21:40:13 +0000 (22:40 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 3 Feb 2022 23:39:55 +0000 (15:39 -0800)
Change the usage of the "test-tool progress" introduced in
2bb74b53a49 (Test the progress display, 2019-09-16) to take command
like "start" and "stop" on stdin, instead of running them implicitly.

This makes for tests that are easier to read, since the recipe will
mirror the API usage, and allows for easily testing invalid usage that
would yield (or should yield) a BUG(), e.g. providing two "start"
calls in a row. A subsequent commit will add such tests.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-progress.c
t/t0500-progress-display.sh

index 50fd3be3dad7f5d6028e4a2ebc7b4a40e98d10fd..6cc9735b60127b2f5bab7d1728dc013a27b7adf4 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Reads instructions from standard input, one instruction per line:
  *
+ *   "start <total>[ <title>]" - Call start_progress(title, total),
+ *                               Uses the default title of "Working hard"
+ *                               if the " <title>" is omitted.
  *   "progress <items>" - Call display_progress() with the given item count
  *                        as parameter.
  *   "throughput <bytes> <millis> - Call display_throughput() with the given
@@ -10,6 +13,7 @@
  *                                  specify the time elapsed since the
  *                                  start_progress() call.
  *   "update" - Set the 'progress_update' flag.
+ *   "stop" - Call stop_progress().
  *
  * See 't0500-progress-display.sh' for examples.
  */
 #include "parse-options.h"
 #include "progress.h"
 #include "strbuf.h"
+#include "string-list.h"
 
 int cmd__progress(int argc, const char **argv)
 {
-       int total = 0;
-       const char *title;
+       const char *const default_title = "Working hard";
+       struct string_list titles = STRING_LIST_INIT_DUP;
        struct strbuf line = STRBUF_INIT;
-       struct progress *progress;
+       struct progress *progress = NULL;
 
        const char *usage[] = {
-               "test-tool progress [--total=<n>] <progress-title>",
+               "test-tool progress <stdin",
                NULL
        };
        struct option options[] = {
-               OPT_INTEGER(0, "total", &total, "total number of items"),
                OPT_END(),
        };
 
        argc = parse_options(argc, argv, NULL, options, usage, 0);
-       if (argc != 1)
-               die("need a title for the progress output");
-       title = argv[0];
+       if (argc)
+               usage_with_options(usage, options);
 
        progress_testing = 1;
-       progress = start_progress(title, total);
        while (strbuf_getline(&line, stdin) != EOF) {
                char *end;
 
-               if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
+               if (skip_prefix(line.buf, "start ", (const char **) &end)) {
+                       uint64_t total = strtoull(end, &end, 10);
+                       const char *title;
+
+                       /*
+                        * We can't use "end + 1" as an argument to
+                        * start_progress(), it doesn't xstrdup() its
+                        * "title" argument. We need to hold onto a
+                        * valid "char *" for it until the end.
+                        */
+                       if (!*end)
+                               title = default_title;
+                       else if (*end == ' ')
+                               title = string_list_insert(&titles, end + 1)->string;
+                       else
+                               die("invalid input: '%s'\n", line.buf);
+
+                       progress = start_progress(title, total);
+               } else if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
                        uint64_t item_count = strtoull(end, &end, 10);
                        if (*end != '\0')
                                die("invalid input: '%s'\n", line.buf);
@@ -65,12 +85,14 @@ int cmd__progress(int argc, const char **argv)
                        display_throughput(progress, byte_count);
                } else if (!strcmp(line.buf, "update")) {
                        progress_test_force_update();
+               } else if (!strcmp(line.buf, "stop")) {
+                       stop_progress(&progress);
                } else {
                        die("invalid input: '%s'\n", line.buf);
                }
        }
-       stop_progress(&progress);
        strbuf_release(&line);
+       string_list_clear(&titles, 0);
 
        return 0;
 }
index f37cf2eb9c96854046a9734073683fdb452c761a..27ab4218b0142f8c53204dd3386ce8c35870584e 100755 (executable)
@@ -18,6 +18,7 @@ test_expect_success 'simple progress display' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        update
        progress 1
        update
@@ -26,8 +27,9 @@ test_expect_success 'simple progress display' '
        progress 4
        update
        progress 5
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -42,11 +44,13 @@ test_expect_success 'progress display with total' '
        EOF
 
        cat >in <<-\EOF &&
+       start 3
        progress 1
        progress 2
        progress 3
+       stop
        EOF
-       test-tool progress --total=3 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -63,14 +67,14 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        progress 100
        progress 1000
        progress 10000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -89,16 +93,16 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        update
        progress 1
        update
        progress 2
        progress 10000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -117,14 +121,14 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        progress 25000
        progress 50000
        progress 75000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -141,14 +145,14 @@ Working hard.......2.........3.........4.........5.........6.........7.........:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6.........7.........
        progress 25000
        progress 50000
        progress 75000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6.........7........." \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -165,12 +169,14 @@ test_expect_success 'progress shortens - crazy caller' '
        EOF
 
        cat >in <<-\EOF &&
+       start 1000
        progress 100
        progress 200
        progress 1
        progress 1000
+       stop
        EOF
-       test-tool progress --total=1000 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -186,6 +192,7 @@ test_expect_success 'progress display with throughput' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 102400 1000
        update
        progress 10
@@ -198,8 +205,9 @@ test_expect_success 'progress display with throughput' '
        throughput 409600 4000
        update
        progress 40
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -215,6 +223,7 @@ test_expect_success 'progress display with throughput and total' '
        EOF
 
        cat >in <<-\EOF &&
+       start 40
        throughput 102400 1000
        progress 10
        throughput 204800 2000
@@ -223,8 +232,9 @@ test_expect_success 'progress display with throughput and total' '
        progress 30
        throughput 409600 4000
        progress 40
+       stop
        EOF
-       test-tool progress --total=40 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -240,6 +250,7 @@ test_expect_success 'cover up after throughput shortens' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 409600 1000
        update
        progress 1
@@ -252,8 +263,9 @@ test_expect_success 'cover up after throughput shortens' '
        throughput 1638400 4000
        update
        progress 4
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -268,6 +280,7 @@ test_expect_success 'cover up after throughput shortens a lot' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 1 1000
        update
        progress 1
@@ -277,8 +290,9 @@ test_expect_success 'cover up after throughput shortens a lot' '
        throughput 3145728 3000
        update
        progress 3
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -286,6 +300,7 @@ test_expect_success 'cover up after throughput shortens a lot' '
 
 test_expect_success 'progress generates traces' '
        cat >in <<-\EOF &&
+       start 40
        throughput 102400 1000
        update
        progress 10
@@ -298,10 +313,11 @@ test_expect_success 'progress generates traces' '
        throughput 409600 4000
        update
        progress 40
+       stop
        EOF
 
-       GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress --total=40 \
-               "Working hard" <in 2>stderr &&
+       GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress \
+               <in 2>stderr &&
 
        # t0212/parse_events.perl intentionally omits regions and data.
        test_region progress "Working hard" trace.event &&