[Dnsmasq-discuss] unittests

Geert Stappers stappers at stappers.nl
Sat Oct 2 12:40:22 UTC 2021


In-Reply-To: <8a018620-25a7-a292-c951-dd2017d54236 at redhat.com>
On Mon, May 03, 2021 at 12:53:39PM +0200, Petr Menšík wrote:
> On 4/30/21 12:42 AM, Simon Kelley wrote:
> > On 14/04/2021 18:35, Petr Menšík wrote:
> >> Hi Simon and other dnsmasq friends,
> >>
> >> after some struggling with Makefile support, I am sending my dnsmasq
> >> unit tests. It uses another directory with tests specific code. I moved
> >> some common parts to Makefile.config, in order to be able to reuse them.
> >> Unit tests are under tests directory with own Makefile.
> >>
> >> New target make check should work also from top directory. Some checks
> >> would work only from tests directory (make kyua). Current coverage is
> >> rather poor, but I hope can be used as a building block to better tests.
> >> Especially option parsing tests are easy to write. Testing of sending
> >> and receiving packets seems to be difficult, it should be tested by
> >> different kind of test IMHO.
> >>
> >> First is attempt to refactor, the second is what evolved into more
> >> complex set of tests.
> >>
> >> Original separate commits are still available on github [1].
> >>
> >> What do you think?
> > 
> > Well, I applied the patch, and run "make check" and all the tests passed!
> > 
> > Now I have to understand how to write new tests.
> 
> Configuration parsing tests are easy, just provide input parameters
> similar way to existing test and then check expected values are provided.
> > 
> > Would it make sense to consider some changes to the main code to make
> > the tests easier? I see that die() is a problem. Can we change the code
> > in die() to do something useful when testing?
> 
> I have chosen to omit dnsmasq.c code from tests. It contains main()
> function, cannot be part of test anyway. Sure, some code changes would
> help with reducing needed repetitions in tests. Especially init code
> required in tests should be moved out of dnsmasq.c, where it could be
> called directly from tests. Shared init code must not be static
> functions of course.
> 
> die does make sense everywhere where it is a corner case. If we move
> die() calls to dnsmasq.c, it would be okay. Other files should return
> indication of fatal error, but not die directly. It would need
> additional wrappers in dnsmasq.c, but such functions would be more testable.
> > 
> > Also the tests seem to can copies of initialisation code, does it make
> > sense to abstract the initialisation in main() so that it can be used by
> > the tests standalone?
> Yes, it make sense to move parts of initialization to subsystem-specific
> initialization functions. I would move dns_init() into rfc1035.c,
> dhcp_init() into dhcp-common.c etc. It should make main source file
> shorter and it would be more obvious, which subsystems are initialized
> in which order, whether they depend on anything before it. I think the
> best practice is to break long functions into several shorter, more
> readable functions. I think current main() is a great example to break
> into more smaller functions and move some of them to shareable files.
> Parts required by current tests are small enough.
> > 
> > I'm thinking of changing the existing main()
> > 
> > main()
> > {
> >     <initialise stuff>
> >     while (1)
> >         events()
> > }
> > 
> > into
> > 
> > main()
> > {
> >     init();
> >     while (1)
> >       events()
> > }
> > 
> > So that init() is available for testing.
> > 
> > 
> > Cheers,
> > 
> > Simon.
> > 
> >>
> >> PS: sending this message again, because patch #2 were big enough to
> >> require moderator's approval. Compressed it as a workaround.
> >>
> >> Cheers,
> >> Petr
> >>
> >> 1. https://github.com/InfrastructureServices/dnsmasq/tree/unittests
> 

What was / is the posting from Simon asking something

  Would unittest have detect this side-effect of the change?



I couldn't find it, but could find the above posting.
Reason for starting a fresh thread is for
having fresh attention for unittests.


Groeten
Geert Stappers
-- 
Silence is hard to parse
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/attachments/20211002/93f3c6c6/attachment.sig>


More information about the Dnsmasq-discuss mailing list