CUnit testing

Greg Banks gnb at
Thu Oct 28 21:13:35 EDT 2010

On 29/10/10 01:04, Björn Fahller wrote:
> On Thursday 28 October 2010 15.52.49 Jeroen van Meeuwen (Kolab Systems) wrote:
>> Greg Banks wrote:
>>> In the short term I was hoping to get some point regression tests for
>>> some of the lower-level code happening.  I was thinking of using CUnit
>>> to help manage the tests.  Thoughts?
> I obviously missed this discussion. What are the specifics you want to test
> for?

I want to write some unit tests for parts of the Cyrus code, starting 
with low-level library code and working upwards to more complex parts of 
the code.  At the moment I have some mostly-working infrastructure and a 
few tests, like this:

### Making check in /home/gnb/software/cyrus/imapd/cunit
make[1]: Entering directory `/home/gnb/software/cyrus/imapd/cunit'

      CUnit - A Unit testing framework for C - Version 2.1-0

Suite: lib/glob
   Test: star ... passed
   Test: percent ... passed
   Test: percent_percent ... passed
   Test: questionmark ... passed
   Test: star_substring ... passed
   Test: star_icase ... passed
Suite: lib/md5
   Test: single ... passed
   Test: multiple ... passed
Suite: lib/parseaddr
   Test: single ... passed
   Test: single_append ... passed
   Test: multiple ... passed
   Test: quoted_name ... passed
   Test: quoted_name_comma ... passed
   Test: comment_name ... passed
   Test: quoted_mailbox ... passed
   Test: mailbox_comment ... FAILED
     1. test/parseaddr.c:135  - CU_ASSERT_STRING_EQUAL(a->mailbox="Wilt . Chamberlain","Wilt.Chamberlain"="Wilt.Chamberlain")
   Test: domain_literal ... passed
   Test: dotted_mailbox ... passed
   Test: long_domain ... passed
   Test: group ... passed
Suite: imap/times
   Test: rfc3501 ... passed
   Test: military_timezones ... passed
Suite: imap/message
   Test: parse_mapped ... passed

--Run Summary: Type      Total     Ran  Passed  Failed
                suites        5       5     n/a       0
                tests        23      23      22       1
                asserts     175     175     174       1
make[1]: Leaving directory `/home/gnb/software/cyrus/imapd/cunit'

> Depending on your needs, may I humbly and shamelessly plug
> ?'s always nice to see yet another test infrastructure 

I've only scanned the User's Guide, so please correct me if I'm wrong, 
but I don't see any significant advantage over CUnit + Valgrind?  And it 
requires C++, which nothing in Cyrus uses so far (and hopefully nothing 
ever will).  Also, rather conveniently CUnit is already packaged on 
Ubunbtu where I do my development.

> Advantage: Very easy to test pesky low level failures that are quite difficult
> to achieve in a controlled way in a running system (close() fails, broken
> connections, disk full, read() corrupts, out of memory, etc.)

I'm quite a way away from testing abnormal conditions, although that 
will be very useful when testing the mailbox code.


More information about the Cyrus-devel mailing list