From: Jeff King <peff@peff.net>
To: Han-Wen Nienhuys <hanwen@google.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>,
git <git@vger.kernel.org>, Han-Wen Nienhuys <hanwenn@gmail.com>
Subject: Re: [PATCH 6/6] fixup! reftable: rest of library
Date: Wed, 2 Dec 2020 07:43:44 -0500 [thread overview]
Message-ID: <X8eMAI4703sDpTzM@coredump.intra.peff.net> (raw)
In-Reply-To: <CAFQ2z_P3WmSyBJvhCQi-rOQRvUwbK9RH6CGvS2Br0zW-=xwa4A@mail.gmail.com>
On Wed, Dec 02, 2020 at 12:01:49PM +0100, Han-Wen Nienhuys wrote:
> > I'm not sure if the long-term goal is to have this opaque unit-test
> > program or not. If it is, I was likewise going to suggest that its
> > ad-hoc output be replaced with TAP. But it looks like on your branch
> > that "test-tool reftable" does not produce output at all. So I may be a
> > bit behind on what the current state and forward plans are...
>
> The most important requirement is that something fails if the
> unittests don't work. I surmised that that meant running tests from
> test-helper in some way, so this is what happens now. Looking for
> "unit.?test" across the git codebase didn't turn up much info. Happy
> to explore other solutions if you can give me pointers.
Normally we do a combination of:
- git plumbing exposes scriptable commands, and we make sure those
work. This is a much coarser-grained unit than testing individual C
functions, but produces resilient tests because that interface is
user-visible and stable (and in fact seeing test breakages is often
a sign that one will be breaking real users).
These are obviously driven by shell script tests emulating what
users might run.
- for unit tests of individual data types where it's not appropriate
to have a user-facing command, we often add a test-tool helper that
exposes specific functions (e.g., t/helper/test-date.c exposes date
parsing and formatting routines, test-oid-array.c exercises methods
of that data type, etc).
The C parts of these are usually generic, and then are driven by
shell scripts providing the actual data in individual tests (and
handling success/failure, skipping tests, etc).
This is still coarser than you might get unit-testing inside C.
E.g., you could not generally check the difference between passing
an empty array vs NULL to a function. But our philosophy has
generally been _not_ to test at that level. The C interfaces are
internal, and Git is not that big a project. If there's a function
whose caller does something unexpected, it's usually easier to fix
the caller and add a test that triggers the caller's code path.
I agree that a test that simply runs a bunch of C code and either exits
with failure or success is better than nothing, in the sense of finding
tests. And wrapping that with a single test_expect_success does that.
But it's unfortunate that we get none of the fine-grained control that
the test suite provides, nor much support in debugging failing tests.
One middle ground would be for a battery of C tests to output
TAP-compatible output (outputting "ok 1 - foo works", and "not ok 2 -
bar does not work", etc). That at least gives more info on what fails,
and does it in a way that the rest of the test suite can interpret
(though not manipulate).
-Peff
next prev parent reply other threads:[~2020-12-02 12:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-28 6:44 [PATCH 0/6] Minimal patches to let reftable pass the CI builds Johannes Schindelin via GitGitGadget
2020-11-28 6:44 ` [PATCH 1/6] fixup! reftable: rest of library Johannes Schindelin via GitGitGadget
2020-12-01 14:32 ` Han-Wen Nienhuys
2020-12-02 10:57 ` Johannes Schindelin
2020-12-02 18:31 ` Reftable locking on Windows (Re: [PATCH 1/6] fixup! reftable: rest of library) Han-Wen Nienhuys
2020-12-03 12:24 ` Ævar Arnfjörð Bjarmason
2020-12-03 13:56 ` Han-Wen Nienhuys
2020-11-28 6:44 ` [PATCH 2/6] fixup! reftable: utility functions Johannes Schindelin via GitGitGadget
2020-11-28 6:44 ` [PATCH 3/6] fixup! reftable: rest of library Johannes Schindelin via GitGitGadget
2020-12-01 10:26 ` Jeff King
2020-12-01 11:10 ` Han-Wen Nienhuys
2020-12-01 11:57 ` Jeff King
2020-11-28 6:44 ` [PATCH 4/6] " Johannes Schindelin via GitGitGadget
2020-11-28 6:44 ` [PATCH 5/6] " Johannes Schindelin via GitGitGadget
2020-11-28 6:44 ` [PATCH 6/6] " Johannes Schindelin via GitGitGadget
2020-12-01 10:28 ` Jeff King
2020-12-01 14:24 ` Johannes Schindelin
2020-12-02 1:50 ` Jeff King
2020-12-02 11:01 ` Han-Wen Nienhuys
2020-12-02 12:43 ` Jeff King [this message]
2020-11-30 14:26 ` [PATCH 0/6] Minimal patches to let reftable pass the CI builds Han-Wen Nienhuys
2020-12-01 14:18 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=X8eMAI4703sDpTzM@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=hanwen@google.com \
--cc=hanwenn@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).