Re: [PATCH v2 01/11] t: add tool to translate hash-related values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Aug 19, 2018 at 1:54 PM brian m. carlson
<sandals@xxxxxxxxxxxxxxxxxxxx> wrote:
> diff --git a/t/oid-info/oid b/t/oid-info/oid
> @@ -0,0 +1,29 @@
> +# All zeros or Fs missing one or two hex segments.
> +zero_1         sha1:000000000000000000000000000000000000000
> +zero_2         sha256:000000000000000000000000000000000000000000000000000000000000000
> +zero_2         sha1:00000000000000000000000000000000000000
> +zero_2         sha256:00000000000000000000000000000000000000000000000000000000000000

Too many zero_2's. I guess the first one should be zero_1.

> diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
> @@ -821,6 +821,35 @@ test_expect_success 'tests clean up even on failures' "
> +test_oid_cache hash-info oid
> +
> +test_expect_success 'test_oid_info provides sane info by default' '

Is "test_oid_info" in the test title outdated? I don't see anything by
that name. Same question regarding the other new tests.

> +       test_oid zero &&
> +       test_oid zero >actual &&

If the lookup "test_oid zero" fails, it's going to fail whether
redirected or not, so the first invocation can be dropped.

> +       grep "00*" actual &&

Do you want to anchor this regex? ^00*$

Same comment regarding the other new tests.

> +       test "$(test_oid hexsz)" -eq $(wc -c <actual) &&
> +       test $(( $(test_oid rawsz) * 2)) -eq "$(test_oid hexsz)"
> +'

If $(test_oid rawsz) fails to find "rawsz" and returns nothing, this
expression will be "*2", which will error out in a
less-than-meaningful way. Perhaps it would make more sense to dump the
results of the two test_oid() to file and use test_cmp()?

Similar comment regarding all the other "test ... -eq ..." expressions
here and below: I wonder if it would be better to dump them to files
and compare the files.

> +test_expect_success 'test_oid_info can look up data for SHA-1' '
> +       test_detect_hash sha1 &&
> +       test_oid zero >actual &&
> +       grep "00*" actual &&
> +       test $(wc -c <actual) -eq 40 &&
> +       test "$(test_oid rawsz)" -eq 20 &&
> +       test "$(test_oid hexsz)" -eq 40
> +'
> +
> +test_expect_success 'test_oid_info can look up data for SHA-256' '
> +       test_when_finished "test_detect_hash" &&

Should the previous test also do this test_when_finished() to protect
against someone coming along and re-ordering them some day? Or someone
inserting a test between the two?

> +       test_detect_hash sha256 &&
> +       test_oid zero >actual &&
> +       grep "00*" actual &&
> +       test $(wc -c <actual) -eq 64 &&
> +       test "$(test_oid rawsz)" -eq 32 &&
> +       test "$(test_oid hexsz)" -eq 64
> +'
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> @@ -1147,3 +1147,39 @@ depacketize () {
> +test_detect_hash () {
> +       if test -n "$1"
> +       then
> +               test_hash_algo="$1"
> +       else
> +               test_hash_algo='sha1'
> +       fi
> +}

Mmph. Outside of t0000, do you expect other callers which will need to
set the hash algorithm to an explicit value? If not, this sort of
polymorphic behavior adds extra, perhaps unnecessary, complexity. Even
if you do expect a few other callers, a dedicated test_set_hash()
function might be clearer since test_detect_hash() has a very specific
meaning.

> +test_oid_cache () {
> +       test -n "$test_hash_algo" || test_detect_hash
> +       if test -n "$1"
> +       then
> +               while test -n "$1"
> +               do
> +                       test_oid_cache <"$TEST_DIRECTORY/oid-info/$1"

What is the benefit of placing test-specific OID info in some
dedicated directory? I suppose the idea of lumping all these OID files
together in a single oid-info/ directory is that it makes it easier to
see at a glance what needs to be changed next time a new hash
algorithm is selected. However, that potential long-term benefit comes
at the cost of divorcing test-specific information from the tests
themselves. I imagine (for myself, at least) that it would be easier
to grok a test if its OID's were specified and cached directly in the
test script itself (via test_oid_cache <<here-doc). I could even
imagine a test script invoking test_oid_cache<<here-doc before each
test which has unique OID's in order to localize OID information to
the test which needs it, or perhaps even within a test.

So, I'm having trouble understanding the benefit of the current
approach over merely loading OID's via here-docs in the test scripts
themselves. Perhaps the commit message could say something about why
the current approach was taken.

> +                       shift
> +               done
> +               return $?

Why, specifically, return $? here, as opposed to simply returning?

> +       fi

Mmph. This polymorphic, recursive behavior in which test_oid_cache()
can load data from a list of files or from its own standard input adds
complexity. One alternative would be to have a separate
test_oid_cache_file() function. However, I'm wondering why such
functionality needs to be built in, in the first place, as opposed to
clients merely doing the redirect themselves (test_oid_cache
<whatever). I see that you want to support specifying multiple files
for a single invocation, but is that likely to come up (aside from
t0000)?

> +       while read _tag _rest
> +       do
> +               case $_tag in \#*)
> +                       continue;;
> +               esac

This handles "# comment" lines, but what about blank lines?

> +               _k="${_rest%:*}"
> +               _v="${_rest#*:}"

Should this be doing any sort of validation, such as complaining if _k
or _v is empty? Or if _k contains weird characters?

> +               eval "test_oid_${_k}_$_tag=\"$_v\""
> +       done
> +}
> +
> +test_oid () {
> +       eval "printf '%s' \"\${test_oid_${test_hash_algo}_$1}\""
> +}



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux