BIND 10 #2353: write tests for all methods of Bob
BIND 10 Development
do-not-reply at isc.org
Mon Dec 10 03:17:01 UTC 2012
#2353: write tests for all methods of Bob
-------------------------------------+-------------------------------------
Reporter: jinmei | Owner:
Type: defect | jinmei
Priority: medium | Status:
Component: Boss of BIND | reviewing
Keywords: | Milestone:
Sensitive: 0 | Sprint-20121218
Sub-Project: DNS | Resolution:
Estimated Difficulty: 8 | CVSS Scoring:
Total Hours: 0 | Defect Severity: N/A
| Feature Depending on Ticket:
| Add Hours to Ticket: 0
| Internal?: 0
-------------------------------------+-------------------------------------
Changes (by muks):
* owner: muks => jinmei
Comment:
Hi Jinmei
Replying to [comment:13 jinmei]:
> Replying to [comment:12 muks]:
>
> > > - test_kill_started_components: I guess I commented about this in
the
> > > previous cycle, but: isn't it better to check the value of
> > > components directly, rather than indirect check via get_processes?
> > > {{{#!python
> > > self.assertEqual([[53, 'test', 'Test']],
bob.get_processes())
> > > ...
> > > self.assertFalse(bob.get_processes())
> > > }}}
> > > (besides, `assertFalse` doesn't seem to be a good choice for non
> > > boolean object)
> >
> > Done. This True/False check works similar to how we test for
true/false
> > in `scoped_ptr`, etc. in C++. Anyway, the suggested syntax makes it
> > clearer.
>
> Is this addressed? I don't see changes on this point, or am I missing
> something?
The `assertFalse()` bit was addressed. But I feel that the
`get_processes()` interface is the right way to test components in this
particular test (for other tests, I have changed it to directly query
`BoB.components`). I'm sorry I didn't reply to this particular review
comment last time.
> > > - test_start_msgq: I'd use a non trivial (non empty) value for
pi.env:
> > > {{{#!python
> > > self.assertEqual({}, pi.env)
> > > }}}
> > > this applies to other similar cases.
> >
> > All are fixed.
>
> What about test_start_cfgmgr and test_start_simple?
I had left a couple of them as empty to have an empty env test (the others
had a populated environment). Anyway, have populated them now. :)
> Some other points:
>
> '''bind10_src.py.in'''
>
> - I'd rename `Bob.run_under_unittests` to `_run_under_unittests` to
> (weakly) indicate apps shouldn't touch/refer to it. I'd also
> add a comment about what it is where it's defined.
Done.
> '''bind10_test.py.in'''
>
> - test_start_msgq_timeout: this comment doesn't seem to be really
correct:
> {{{#!python
> # keep the timeout small for the test to complete quickly
> bob.msgq_timeout = 1
> }}}
> Even if it's 5 the test will be done "quickly".
Updated.
> - test_start_msgq_timeout: this comment doesn't seem to be correct or
> at least confusing:
> {{{#!python
> # 1 second of attempts every 0.1 seconds should result in 10
> # attempts. 1 attempt happens at the start. 2 more attempts seem
> # to happen inside start_msgq().
> self.assertEqual(attempts, 13)
> }}}
> time.time() should be called 12 times within the while loop:
> starting from 0, and 11 more times from 0.1 to 1.1. There's another
> call to time.time() outside the loop, which makes it 13.
Replaced the old comment with the text above.
> - test_start_cfgmgr_timeout: awkward comment. see above.
> {{{#!python
> # keep the wait time small for the test to complete quickly
> bob.wait_time = 2
> }}}
Updated.
> - test_start_cfgmgr_timeout: this should use `assertRaises`:
> {{{#!python
> thrown = False
> # An exception will be thrown here when it eventually times out.
> try:
> pi = bob.start_cfgmgr()
> except bind10_src.ProcessStartError as e:
> thrown = True
>
> # We just check that an exception was thrown, and that several
> # attempts were made to connect.
> self.assertTrue(thrown)
> }}}
Eek. I thought I had got all of them the last time. Fixed.
> > > - test_socket_data: what's the rationale of the magic number of 15?
> > > {{{#!python
> > > if self.throw and self.i > 15:
> > > raise socket.error(errno.EAGAIN, 'Try again')
> > > }}}
> >
> > This has been clarified with a comment. It's just to check that it
saves back the read data when `EAGAIN` is returned.
>
> So it's just an arbitrary choice? In that case I'd simply say so in
> the comment.
This is now explained with a comment.
Also made some cleanup.
--
Ticket URL: <http://bind10.isc.org/ticket/2353#comment:15>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list