On Thu, 2011-05-05 at 14:40 -0400, Greg Stein wrote:
> On Thu, May 5, 2011 at 11:20, Julian Foad <julian.foad_at_wandisco.com> wrote:
> > I keep coming across simple bugs in untested APIs, and sometimes I try
> > to write simple unit tests for those APIs. To make this easier, I have
> > started to create a "svn_test__sandbox" class, with which a C test can
> > very easily set up a repository and a working copy, like the Python
> > tests do. Then it can run the low-level functions that it is
> > unit-testing.
>
> Sounds like a good idea.
>
> >...
> > {
> > svn_test__sandbox_t b;
> >
> > SVN_ERR(svn_test__sandbox_create(&b, "del_replace_not_present",
> > opts, pool));
> > SVN_ERR(wc_mkdir(&b, "A"));
> > SVN_ERR(wc_mkdir(&b, "A/B"));
> > SVN_ERR(wc_mkdir(&b, "A/B/X"));
> > SVN_ERR(wc_mkdir(&b, "A/B/Y"));
> > SVN_ERR(wc_mkdir(&b, "A/B/Z"));
> > SVN_ERR(wc_commit(&b, ""));
> > ...
> > }
>
> <bikeshed>
>
> * call the variable "sbox" rather than the rather barren "b" (baton?)
Heh. That variable *was* an anonymous baton until I abstracted the
baton's content from that old code to create this new 'sandbox' struct
type and switched it over :-) I've used 'sbox' in new code.
> * wc_mkdir() and friends will need prefixes...
Sure.
> </bikeshed>
>
> :-)
>
> I would also recommend some commentary about pool usage.
> Implementation-wise, I would recommend creating a subpool in the
> create() function, putting the struct in there, and having a
> sandbox_destroy() function which throws out that pool. I don't like
> the idea of a test suite growing without bound because the individual
> test cases aren't clearing some pool. The sandbox lifetime seems a
> good marker for when to clear the pool.
I don't get it. Roughly there's one sandbox used per test. Each test
passes its own (scratch) pool to sandbox_create(). The test runner is
responsible for clearing that (scratch) pool between one test and the
next, I assume.
- Julian
Received on 2011-05-10 00:37:27 CEST