• Gábor Szeder's avatar
    Test the progress display · 2bb74b53
    Gábor Szeder authored
    'progress.c' has seen a few fixes recently [1], and, unfortunately,
    some of those fixes required further fixes [2].  It seems it's time to
    have a few tests focusing on the subtleties of the progress display.
    Add the 'test-tool progress' subcommand to help testing the progress
    display, reading instructions from standard input and turning them
    into calls to the display_progress() and display_throughput()
    functions with the given parameters.
    The progress display is, however, critically dependent on timing,
    because it's only updated once every second or, if the toal is known
    in advance, every 1%, and there is the throughput rate as well.  These
    make the progress display far too undeterministic for testing as-is.
    To address this, add a few testing-specific variables and functions to
    'progress.c', allowing the the new test helper to:
      - Disable the triggered-every-second SIGALRM and set the
        'progress_update' flag explicitly based in the input instructions.
        This way the progress line will be updated deterministically when
        the test wants it to be updated.
      - Specify the time elapsed since start_progress() to make the
        throughput rate calculations deterministic.
    Add the new test script 't0500-progress-display.sh' to check a few
    simple cases with and without throughput, and that a shorter progress
    line properly covers up the previously displayed line in different
    [1] See commits 545dc345 (progress: break too long progress bar
        lines, 2019-04-12) and 9f1fd84e (progress: clear previous
        progress update dynamically, 2019-04-12).
    [2] 1aed1a5f (progress: avoid empty line when breaking the progress
        line, 2019-05-19)
    Signed-off-by: Gábor Szeder's avatarSZEDER Gábor <szeder.dev@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
progress.c 8.47 KB