* [PATCH 0/2] t/helper/test-tool: implement 'sha1-unsafe' helper
@ 2024-10-11 18:37 Taylor Blau
2024-10-11 18:37 ` [PATCH 1/2] t/helper/test-sha1: prepare for an unsafe mode Taylor Blau
2024-10-11 18:37 ` [PATCH 2/2] t/helper/test-tool: implement sha1-unsafe helper Taylor Blau
0 siblings, 2 replies; 3+ messages in thread
From: Taylor Blau @ 2024-10-11 18:37 UTC (permalink / raw)
To: git; +Cc: Elijah Newren, Jeff King, Junio C Hamano, brian m. carlson
This series implements a new 'sha1-unsafe' test helper, similar to
't/helper/test-tool sha1'.
I have found such a helper to be really handy when debugging the new
SHA1_UNSAFE build knobs, e.g., to easily compare the performance of the
safe versus unsafe routines, different unsafe variants, etc.
Taylor Blau (2):
t/helper/test-sha1: prepare for an unsafe mode
t/helper/test-tool: implement sha1-unsafe helper
t/helper/test-hash.c | 17 +++++++++++++----
t/helper/test-sha1.c | 7 ++++++-
t/helper/test-sha1.sh | 38 ++++++++++++++++++++++----------------
t/helper/test-sha256.c | 2 +-
t/helper/test-tool.c | 1 +
t/helper/test-tool.h | 3 ++-
6 files changed, 45 insertions(+), 23 deletions(-)
base-commit: 777489f9e09c8d0dd6b12f9d90de6376330577a2
--
2.47.0.2.gd343f5dc9e5
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] t/helper/test-sha1: prepare for an unsafe mode
2024-10-11 18:37 [PATCH 0/2] t/helper/test-tool: implement 'sha1-unsafe' helper Taylor Blau
@ 2024-10-11 18:37 ` Taylor Blau
2024-10-11 18:37 ` [PATCH 2/2] t/helper/test-tool: implement sha1-unsafe helper Taylor Blau
1 sibling, 0 replies; 3+ messages in thread
From: Taylor Blau @ 2024-10-11 18:37 UTC (permalink / raw)
To: git; +Cc: Elijah Newren, Jeff King, Junio C Hamano, brian m. carlson
With the new "unsafe" SHA-1 build knob, it would be convenient to have
a test-tool that can exercise Git's unsafe SHA-1 wrappers for testing,
similar to 't/helper/test-tool sha1'.
Prepare for such a helper by altering the implementation of that
test-tool (in cmd_hash_impl(), which is generic and parameterized over
different hash functions) to conditionally run the unsafe variants of
the chosen hash function.
The following commit will add a new test-tool which makes use of this
new parameter.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
t/helper/test-hash.c | 17 +++++++++++++----
t/helper/test-sha1.c | 2 +-
t/helper/test-sha256.c | 2 +-
t/helper/test-tool.h | 2 +-
4 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/t/helper/test-hash.c b/t/helper/test-hash.c
index 45d829c908f..d0ee668df95 100644
--- a/t/helper/test-hash.c
+++ b/t/helper/test-hash.c
@@ -1,7 +1,7 @@
#include "test-tool.h"
#include "hex.h"
-int cmd_hash_impl(int ac, const char **av, int algo)
+int cmd_hash_impl(int ac, const char **av, int algo, int unsafe)
{
git_hash_ctx ctx;
unsigned char hash[GIT_MAX_HEXSZ];
@@ -27,7 +27,10 @@ int cmd_hash_impl(int ac, const char **av, int algo)
die("OOPS");
}
- algop->init_fn(&ctx);
+ if (unsafe)
+ algop->unsafe_init_fn(&ctx);
+ else
+ algop->init_fn(&ctx);
while (1) {
ssize_t sz, this_sz;
@@ -46,9 +49,15 @@ int cmd_hash_impl(int ac, const char **av, int algo)
}
if (this_sz == 0)
break;
- algop->update_fn(&ctx, buffer, this_sz);
+ if (unsafe)
+ algop->unsafe_update_fn(&ctx, buffer, this_sz);
+ else
+ algop->update_fn(&ctx, buffer, this_sz);
}
- algop->final_fn(hash, &ctx);
+ if (unsafe)
+ algop->unsafe_final_fn(hash, &ctx);
+ else
+ algop->final_fn(hash, &ctx);
if (binary)
fwrite(hash, 1, algop->rawsz, stdout);
diff --git a/t/helper/test-sha1.c b/t/helper/test-sha1.c
index e60d000c039..1c1272cc1f9 100644
--- a/t/helper/test-sha1.c
+++ b/t/helper/test-sha1.c
@@ -3,7 +3,7 @@
int cmd__sha1(int ac, const char **av)
{
- return cmd_hash_impl(ac, av, GIT_HASH_SHA1);
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA1, 0);
}
int cmd__sha1_is_sha1dc(int argc UNUSED, const char **argv UNUSED)
diff --git a/t/helper/test-sha256.c b/t/helper/test-sha256.c
index 2fb20438f3c..7fd0aa1fcd3 100644
--- a/t/helper/test-sha256.c
+++ b/t/helper/test-sha256.c
@@ -3,5 +3,5 @@
int cmd__sha256(int ac, const char **av)
{
- return cmd_hash_impl(ac, av, GIT_HASH_SHA256);
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA256, 0);
}
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 21802ac27da..f3524d9a0f6 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -81,6 +81,6 @@ int cmd__windows_named_pipe(int argc, const char **argv);
#endif
int cmd__write_cache(int argc, const char **argv);
-int cmd_hash_impl(int ac, const char **av, int algo);
+int cmd_hash_impl(int ac, const char **av, int algo, int unsafe);
#endif
--
2.47.0.2.gd343f5dc9e5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] t/helper/test-tool: implement sha1-unsafe helper
2024-10-11 18:37 [PATCH 0/2] t/helper/test-tool: implement 'sha1-unsafe' helper Taylor Blau
2024-10-11 18:37 ` [PATCH 1/2] t/helper/test-sha1: prepare for an unsafe mode Taylor Blau
@ 2024-10-11 18:37 ` Taylor Blau
1 sibling, 0 replies; 3+ messages in thread
From: Taylor Blau @ 2024-10-11 18:37 UTC (permalink / raw)
To: git; +Cc: Elijah Newren, Jeff King, Junio C Hamano, brian m. carlson
Add a new helper similar to 't/helper/test-tool sha1' called instead
"sha1-unsafe" which uses the unsafe variant of Git's SHA-1 wrappers.
While we're at it, modify the test-sha1.sh script to exercise both
the sha1 and sha1-unsafe test tools to ensure that both produce the
expected hash values.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
t/helper/test-sha1.c | 5 +++++
t/helper/test-sha1.sh | 38 ++++++++++++++++++++++----------------
t/helper/test-tool.c | 1 +
t/helper/test-tool.h | 1 +
4 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/t/helper/test-sha1.c b/t/helper/test-sha1.c
index 1c1272cc1f9..349540c4df8 100644
--- a/t/helper/test-sha1.c
+++ b/t/helper/test-sha1.c
@@ -13,3 +13,8 @@ int cmd__sha1_is_sha1dc(int argc UNUSED, const char **argv UNUSED)
#endif
return 1;
}
+
+int cmd__sha1_unsafe(int ac, const char **av)
+{
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA1, 1);
+}
diff --git a/t/helper/test-sha1.sh b/t/helper/test-sha1.sh
index 84594885c70..bf387d3db14 100755
--- a/t/helper/test-sha1.sh
+++ b/t/helper/test-sha1.sh
@@ -3,25 +3,31 @@
dd if=/dev/zero bs=1048576 count=100 2>/dev/null |
/usr/bin/time t/helper/test-tool sha1 >/dev/null
+dd if=/dev/zero bs=1048576 count=100 2>/dev/null |
+/usr/bin/time t/helper/test-tool sha1-unsafe >/dev/null
+
while read expect cnt pfx
do
case "$expect" in '#'*) continue ;; esac
- actual=$(
- {
- test -z "$pfx" || echo "$pfx"
- dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
- perl -pe 'y/\000/g/'
- } | ./t/helper/test-tool sha1 $cnt
- )
- if test "$expect" = "$actual"
- then
- echo "OK: $expect $cnt $pfx"
- else
- echo >&2 "OOPS: $cnt"
- echo >&2 "expect: $expect"
- echo >&2 "actual: $actual"
- exit 1
- fi
+ for sha1 in sha1 sha1-unsafe
+ do
+ actual=$(
+ {
+ test -z "$pfx" || echo "$pfx"
+ dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
+ perl -pe 'y/\000/g/'
+ } | ./t/helper/test-tool $sha1 $cnt
+ )
+ if test "$expect" = "$actual"
+ then
+ echo "OK ($sha1): $expect $cnt $pfx"
+ else
+ echo >&2 "OOPS ($sha1): $cnt"
+ echo >&2 "expect ($sha1): $expect"
+ echo >&2 "actual ($sha1): $actual"
+ exit 1
+ fi
+ done
done <<EOF
da39a3ee5e6b4b0d3255bfef95601890afd80709 0
3f786850e387550fdab836ed7e6dc881de23001b 0 a
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 1ebb69a5dc4..51ed25c07e2 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -70,6 +70,7 @@ static struct test_cmd cmds[] = {
{ "serve-v2", cmd__serve_v2 },
{ "sha1", cmd__sha1 },
{ "sha1-is-sha1dc", cmd__sha1_is_sha1dc },
+ { "sha1-unsafe", cmd__sha1_unsafe },
{ "sha256", cmd__sha256 },
{ "sigchain", cmd__sigchain },
{ "simple-ipc", cmd__simple_ipc },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index f3524d9a0f6..24149edd414 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -63,6 +63,7 @@ int cmd__scrap_cache_tree(int argc, const char **argv);
int cmd__serve_v2(int argc, const char **argv);
int cmd__sha1(int argc, const char **argv);
int cmd__sha1_is_sha1dc(int argc, const char **argv);
+int cmd__sha1_unsafe(int argc, const char **argv);
int cmd__sha256(int argc, const char **argv);
int cmd__sigchain(int argc, const char **argv);
int cmd__simple_ipc(int argc, const char **argv);
--
2.47.0.2.gd343f5dc9e5
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-10-11 18:37 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-11 18:37 [PATCH 0/2] t/helper/test-tool: implement 'sha1-unsafe' helper Taylor Blau
2024-10-11 18:37 ` [PATCH 1/2] t/helper/test-sha1: prepare for an unsafe mode Taylor Blau
2024-10-11 18:37 ` [PATCH 2/2] t/helper/test-tool: implement sha1-unsafe helper Taylor Blau
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.