git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 5/5] test-lib-functions: restrict test_must_fail usage

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jun 30, 2020, 20:56 UTC
Message-ID
<CAPig+cSNK1MDitZyh7Ax-eRAh6NjG_QsoF0feEo4475GjZ5ezw@mail.gmail.com>
In-Reply-To
<01e29450fe51a4ba13e07c611d8795ffd0282b9e.1593529394.git.liu.denton@gmail.com>
On Tue, Jun 30, 2020 at 11:03 AM Denton Liu <liu.denton@gmail.com> wrote:
Show 10 quoted lines
> In previous commits, we removed the usage of test_must_fail() for most
> commands except for a set of pre-approved commands. Since that's done,
> only allow test_must_fail() to run those pre-approved commands.
>
> Obviously, we should allow `git`.
>
> We allow `__git*` as some completion functions return an error code that
> comes from a git invocation. It's good to avoid using test_must_fail
> unnecessarily but it wouldn't hurt to err on the side of caution when
> we're potentially wrapping a git command (like in these case).
s/case/cases/
Show 9 quoted lines
> Signed-off-by: Denton Liu <liu.denton@gmail.com>
> ---
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> +# Returns success if the arguments indicate that a command should be
> +# accepted by test_must_fail(). If the command is run with env, the env
> +# and its corresponding variable settings will be stripped before we
> +# test the command being run.
> +test_must_fail_acceptable () {
> +       while test "$1" = "env"

I was surprised to see a 'while' loop for stripping 'env'. Did you actually run across cases in the test suite in which 'env' was invoking 'env'? If so, were such cases legitimate (as opposed to accidental)? Perhaps the commit message or an in-code comment could help readers understand why it needs to strip multiple 'env's.

Show 8 quoted lines
> +       do
> +               shift
> +               while test $# -gt 0
> +               do
> +                       case "$1" in *?=*) ;; *) break ;; esac
> +                       shift
> +               done
> +       done

Isn't '*?=*' the same as '?=', or am I misunderstanding the intention? Also, I wonder how important it is to insist that there must be at least one character before the '=' sign. (It doesn't necessarily hurt, but I'm curious if it is protecting against legitimate weird cases.)

This logic would be easier to follow written this way:
    case "$1" in
        =) shift ;;
        *) break ;;
    esac

That is, place the 'shift' in the appropriate case-arm rather than suspending it below all cases.

Show 9 quoted lines
> +       case "$1" in
> +       git|__git*|test-tool|test-svn-fe|test_terminal)
> +               return 0
> +               ;;
> +       *)
> +               return 1
> +               ;;
> +       esac
> +}

Would it make sense to error out if "$1" has no value? That is, if the author wrote:

    test_must_fail &&
or
    test_must_fail env foo=bar &&

then that surely is a programmer error, which could be diagnosed here (though the original 'test_must_fail' didn't bother diagnosing that problem so it may be overkill and outside the scope of this series to do so here).

Show 9 quoted lines
> @@ -817,6 +842,15 @@ list_contains () {
> +# Do not use this to run anything but "git" and other specific testable
> +# commands (see test_must_fail_acceptable()).  We are not in the
> +# business of vetting system supplied commands -- in other words, this
> +# is wrong:
> +#
> +#    test_must_fail grep pattern output
> +#
> +# Just use '!' instead.

I find this somewhat ambiguous; it's not clear at first sight what I'm supposed to do with '!'. t/README is slightly clearer by saying "use '! cmd' instead". It might be even clearer to spell it out explicitly with an example:

    Instead use '!':
        ! grep pattern output
Previous: Denton LiuNext: Eric Sunshine
Message 9 of 29 in “t: replace incorrect test_must_fail usage (part 6)”
  1. 0/5 t: replace incorrect test_must_fail usage (part 6)Denton Liu, Jun 30, 2020
  2. 1/5 t3701: stop using `env` in force_color()Denton Liu, Jun 30, 2020
  3. Eric SunshineJun 30, 2020
  4. Junio C HamanoJun 30, 2020
  5. 3/5 t7107: don't use test_must_fail()Denton Liu, Jun 30, 2020
  6. 2/5 t5324: reorder `run_with_limited_open_files test_might_fail`Denton Liu, Jun 30, 2020
  7. 4/5 t9834: remove use of `test_might_fail p4`Denton Liu, Jun 30, 2020
  8. 5/5 test-lib-functions: restrict test_must_fail usageDenton Liu, Jun 30, 2020
  9. Eric SunshineJun 30, 2020
  10. Eric SunshineJun 30, 2020
  11. Denton LiuJun 30, 2020
  12. 0/5 t: replace incorrect test_must_fail usage (part 6)Denton Liu, Jul 1, 2020
  13. 4/5 t9834: remove use of `test_might_fail p4`Denton Liu, Jul 1, 2020
  14. 2/5 t5324: reorder `run_with_limited_open_files test_might_fail`Denton Liu, Jul 1, 2020
  15. 5/5 test-lib-functions: restrict test_must_fail usageDenton Liu, Jul 1, 2020
  16. 1/5 t3701: stop using `env` in force_color()Denton Liu, Jul 1, 2020
  17. 3/5 t7107: don't use test_must_fail()Denton Liu, Jul 1, 2020
  18. 0/5 t: replace incorrect test_must_fail usage (part 6)Denton Liu, Jul 7, 2020
  19. 1/5 t3701: stop using `env` in force_color()Denton Liu, Jul 7, 2020
  20. 5/5 test-lib-functions: restrict test_must_fail usageDenton Liu, Jul 7, 2020
  21. 4/5 t9834: remove use of `test_might_fail p4`Denton Liu, Jul 7, 2020
  22. 3/5 t7107: don't use test_must_fail()Denton Liu, Jul 7, 2020
  23. 2/5 t5324: reorder `run_with_limited_open_files test_might_fail`Denton Liu, Jul 7, 2020
  24. Junio C HamanoJul 7, 2020
  25. Junio C HamanoJul 7, 2020
  26. t9400: don't use test_must_fail with cvsDenton Liu, Jul 7, 2020
  27. Junio C HamanoJul 7, 2020
  28. Denton LiuJul 7, 2020
  29. Junio C HamanoJul 7, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.