Back to a thread from 3 months ago, read up previous exchange to jump in:

On Fri, Aug 12, 2016 at 1:50 PM, Michael Vorburger <vorbur...@redhat.com>
wrote:

> Tomas, tx for your prompt reply. I hadn't seen Mockito's [1] [2] timeout()
> before, thanks for pointing it out. Similar to e.g. awaitility [3], but
> built in to Mockito - nice.
>
> FYI This particular test is an "end-to-end" test, so the listeners aren't
> mocked but the real thing.. but the general approach you outline may still
> work. I'd probably have to wrap the real ones somehow.. perhaps even just
> Mock and use Mockito CallsRealMethods (or via my
> CallsRealOrExceptionAnswer.java
> <https://git.opendaylight.org/gerrit/#/c/42529/8/common/testutils/src/main/java/org/opendaylight/yangtools/testutils/mockito/CallsRealOrExceptionAnswer.java>
> from [5], but not needed here) may help - I need to see if it's possible to
> combine. I'd need to hook into the instantiation of the real listeners,
> which ties in with some thinking I'm doing re. in-bundle DI (full
> disclosure & tangent: I'm not a big fan of blueprints for that, in-bundle;
> I see blueprints as one possible answer to the problem of wiring between
> bundles; with DS another choice).
>
> All: Before jumping into pursuing this,
>

I now have jumped into this, and would like to propose
https://git.opendaylight.org/gerrit/#/c/48077/ - how do you guys like the
proposed idea?

https://git.opendaylight.org/gerrit/#/c/48078/ has a usage example which
illustrates how by introducing this I can avoid silly Thread.sleep() - and
thus make those component tests run a bit faster.

BTW: Testing async stuff is just a PITA in general;
https://git.opendaylight.org/gerrit/#/c/48061/ has another thingie like
that; that one isn't directly related to this thread re.  listeners, just
mentioning it as a related proposed gerrit in the same area.


> could I just ask once again if there isn't another way to tackle this
> problem from "the other side" - instead of waiting on the Listener(s!),
> could one not ask a DataBroker "have all of your listeners already
> processed all of your pending puts" ?  From the POV of writing a functional
> end2end test, this would seem easier to me. No way?
>

FTR: There never was any reply to this question, and from the little
investigation I did, I couldn't figure out how to tackle this on that side
- thus the approach proposed above.


>
> [1] http://site.mockito.org/mockito/docs/current/org/
> mockito/Mockito.html#timeout(long)
> [2]  https://github.com/mockito/mockito/blob/master/src/test/
> java/org/mockitousage/verification/VerificationWithTimeoutTest.java
> [3] https://github.com/awaitility/awaitility
> [4] https://git.opendaylight.org/gerrit/#/c/42529/
>
> Tx,
> M.
> --
> Michael Vorburger <vorbur...@redhat.com> | IRC: vorburger @freenode | ~ =
> http://vorburger.ch
>
>
> On Thu, Aug 11, 2016 at 6:05 PM, Tomas Cere -X (tcere - PANTHEON
> TECHNOLOGIES at Cisco) <tc...@cisco.com> wrote:
>
>> Did you try mocking the listeners? With mockito you can verify if/how
>> many times a method has been called with a timeout and also
>>
>> use argument captors to check the value was as expected. I recently did
>> something similar in [1]
>>
>>
>>
>> [1]: https://github.com/opendaylight/mdsal/blob/28e0ef3b11e12112c
>> 0acc89ba07f59cc742f7417/dom/mdsal-dom-broker/src/test/
>> java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeP
>> roducerMultiShardTest.java#L192-L214
>>
>>
>>
>> Tomas
>>
>>
>>
>> *From:* controller-dev-boun...@lists.opendaylight.org [mailto:
>> controller-dev-boun...@lists.opendaylight.org] *On Behalf Of *Michael
>> Vorburger
>> *Sent:* Thursday, August 11, 2016 17:47
>> *To:* controller-dev; Kitt, Stephen; Alexis de Talhouƫt; Tom Pantelis;
>> Sam Hague; Robert Varga
>> *Subject:* [controller-dev] How to correctly wait for events to have
>> been processed in an AbstractDataBrokerTest?
>>
>>
>>
>> Ahoi controller-dev and others who may have an idea (please + anyone else
>> applicable),
>>
>> How do you write an AbstractDataBrokerTest and in it wait for a put on
>> the DataBroker to have processed by all of its registered
>> DataTreeChangeListener ?
>>
>> Background with concrete example: The (Abstract)AclServiceTest  in
>> https://git.opendaylight.org/gerrit/#/c/42109/ (see [1]) puts two
>> entries into the DataBroker, the 2nd of which triggers a
>> DataTreeChangeListener which ultimately calls some service. The test
>> asserts that this service got called (slightly simplified, but that's the
>> gist of that test).
>>
>> I've inserted a Thread.sleep(500) after the DataBroker put and before the
>> assert, to give the DataTreeChangeListener a chance - I understand runs
>> asynchronously, right?
>>
>> This sleep makes that test work just fine (contrary to without any sleep,
>> when it fails, but just sometimes; that's always fun) - but I'm wondering
>> if there would be better way to write these kind of tests, without sleep
>> ... but not quite clear in my mind yet how.
>>
>> I've written tests like this before, using e.g.
>> https://github.com/awaitility/awaitility, which is just a nice utility
>> to poll say every 100ms for max. 2s for a certain condition to be true -
>> but what is that condition in this scenario - what API / helper would one
>> use to ask a DataBroker "have all of your listeners already processed all
>> of your pending puts" ? If this is impossible as is today, would this seem
>> like a fair enhancement request - would you consider adding something like
>> this, specifically to aid in writing tests?
>>
>>
>> [1] (Abstract)AclServiceTest is an AbstractDataBrokerTest, even if it
>> doesn't extend AbstractDataBrokerTest; ignore that, it's just because of
>> https://git.opendaylight.org/gerrit/#/c/43645/
>>
>> Thanks a lot,
>>
>> M.
>>
>> --
>>
>> Michael Vorburger <vorbur...@redhat.com> | IRC: vorburger @freenode | ~
>> = http://vorburger.ch
>>
>
>


-- 

Tx,
M.
--
Michael Vorburger <vorbur...@redhat.com> | IRC: vorburger @freenode | ~ =
http://vorburger.ch
_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to