Thanks!

> Sveltin, if you’re up for it I can probably use this as an excuse to pull
some Arquillian devs over for some fun hacking :)

I'm not that knowledgeable in Arquillian, but I'll help with whatever I can
:)

> I also say +1.  I’d love to see the layers thinned out of the Arquillian
test, but this could be done in another PR

I removed the servlet, maybe I can remove the bean as well. It's not needed
as long as the test is executed against the IvmContext.

Kind regards,
Svetlin




2017-07-19 10:53 GMT+03:00 Jean-Louis Monteiro <jlmonte...@tomitribe.com>:

> Looks like we are all ok. I'll proceed and merge.
> Thanks
>
> Le 19 juil. 2017 00:56, "David Blevins" <david.blev...@gmail.com> a écrit
> :
>
> I also say +1.  I’d love to see the layers thinned out of the Arquillian
> test, but this could be done in another PR.
>
> Sveltin, if you’re up for it I can probably use this as an excuse to pull
> some Arquillian devs over for some fun hacking :)
>
>
> --
> David Blevins
> http://twitter.com/dblevins
> http://www.tomitribe.com
>
> > On Jul 14, 2017, at 5:14 AM, Romain Manni-Bucau <rmannibu...@gmail.com>
> wrote:
> >
> > looks good to apply to me
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > <http://rmannibucau.wordpress.com> | Github <https://github.com/
> rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > <https://javaeefactory-rmannibucau.rhcloud.com>
> >
> > 2017-07-14 12:55 GMT+02:00 Svetlin Zarev <svetlin.angelov.zarev@gmail.
> com
> >:
> >
> >> Hi,
> >>
> >> Do you have any comments ? Do you thing that something is missing or
> maybe
> >> that something additional is needed ?
> >>
> >> Kind regards,
> >> Svetlin
> >>
> >> 2017-07-11 15:07 GMT+03:00 Romain Manni-Bucau <rmannibu...@gmail.com>:
> >>
> >>> 2017-07-11 12:38 GMT+02:00 Svetlin Zarev <svetlin.angelov.zarev@gmail.
> >> com
> >>>> :
> >>>
> >>>> I've added several JUnit test cases in openejb-core that should verify
> >>>> IvmContext.list() behaviour, yet I'll feel safer if we keep the
> >>> arquillian
> >>>> test as well.
> >>>>
> >>>
> >>> +1, both are needed
> >>>
> >>>
> >>>>
> >>>> 2017-07-11 10:10 GMT+03:00 Romain Manni-Bucau <rmannibu...@gmail.com
> >:
> >>>>
> >>>>> side note: embedded (not tomcat based) testing is needed to ensure we
> >>>> don't
> >>>>> break but doesn't fully test the ivmcontext code because the
> >> federation
> >>>> is
> >>>>> different so guess starting with tomcat is not that bad.
> >>>>>
> >>>>>
> >>>>> Romain Manni-Bucau
> >>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> >>>>> <http://rmannibucau.wordpress.com> | Github <https://github.com/
> >>>>> rmannibucau> |
> >>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> >>>>> <https://javaeefactory-rmannibucau.rhcloud.com>
> >>>>>
> >>>>> 2017-07-11 8:28 GMT+02:00 Svetlin Zarev <svetlin.angelov.zarev@gmail.
> >>> com
> >>>>> :
> >>>>>
> >>>>>> Hi David,
> >>>>>>
> >>>>>> Thank you for sparing some time to look into my PR !
> >>>>>>
> >>>>>>> I’m not sure I can see how the test actually works
> >>>>>>
> >>>>>> The issue is that IvmContext.list() returns objects that are not
> >>> really
> >>>>>> bound into the listed context. For instance if you run the MCVE
> >>>> attached
> >>>>> to
> >>>>>> the jira ticket you'll see that it returns [1]. There you can see
> >>> that
> >>>>>> TestEJB is bound in "java:" (and even appears several times!) or
> >> that
> >>>>>> "java:global" is bound in "java:module". But if you try to look up
> >>>> those
> >>>>>> entries, the lookup fails with a NameNotFoundException, because all
> >>>> these
> >>>>>> references are not really bound there. So the test recursively
> >> lists
> >>>> all
> >>>>>> contexts in the JNDI tree and tries to lookup up every name-class
> >>> pair
> >>>>> that
> >>>>>> is returned. If the lookup fails, it means that list() has returned
> >>>>>> something that is not really there. You can compare [1] and [2]
> >>> 9after
> >>>>> the
> >>>>>> fix) to see the difference in list()'s behaviour
> >>>>>>
> >>>>>>> Is there a test for listBindings?  It’s mentioned as also broken,
> >>>> but I
> >>>>>> didn’t see a test for it.
> >>>>>>
> >>>>>> IvmContext.listBindings() and IvmContext.list() use the very same
> >>>>>> IvmContext.MyNamingEnumeration abstract class and share the very
> >> same
> >>>>> logic
> >>>>>> to traverse the naming tree. I didn't write test for it because
> >> they
> >>>>> share
> >>>>>> the same code, but I can easily modify it to run aginst both
> >> methods.
> >>>>>>
> >>>>>>> What is the PrintWriter used for?  It seems it could be useful to
> >>>>> assert
> >>>>>> it prints what we expect.  Not sure if that is there and I am
> >> missing
> >>>> it.
> >>>>>>
> >>>>>> I thought it would be helpful to be able to see what went wrong if
> >>> the
> >>>>> test
> >>>>>> fails. The IvmContextTest class collects the output from the
> >>> servlet's
> >>>>>> output stream (the print writer) and if the test fails it prints it
> >>> in
> >>>>> the
> >>>>>> console.
> >>>>>>
> >>>>>>> There is an IvmContextTest, could we put the test there?
> >>>>>>
> >>>>>> That was my initial idea, but AppComposer's naming tree is very
> >>>> different
> >>>>>> that tomee's. For instance it does not have the "app", "global",
> >> etc
> >>>> top
> >>>>>> level contexts and my fix has special code for such top-level
> >>>> contexts. I
> >>>>>> also was not bale to bind any env-entries to my EJB (I'm not really
> >>>>>> familiar with how to write a proper appcomposer test, so I guess I
> >>>> didn't
> >>>>>> do something that I should have.). The env-entries are needed just
> >> to
> >>>>>> create a couple of branches to the tree in order to test if
> >>>>>> MyNamingEnumeration.isMyChild() works correctly
> >>>>>>
> >>>>>>> so we could potentially skip the plumbing of the
> >>> test->servlet->ejb.
> >>>>>>
> >>>>>> I'll look into it. I also have a few ideas for additioanl tests.
> >>>>>>
> >>>>>> [1] https://gist.github.com/SvetlinZarev/
> >>>> 6b9377fe05b7887d681491c3e9e538
> >>>>> 21
> >>>>>> [2] https://gist.github.com/SvetlinZarev/
> >>>> db3b59404198cd494b45b23db7129e
> >>>>> dd
> >>>>>>
> >>>>>> Bets regards,
> >>>>>> Svetlin
> >>>>>>
> >>>>>> 2017-07-11 2:28 GMT+03:00 David Blevins <david.blev...@gmail.com>:
> >>>>>>
> >>>>>>> Hi Svetlin!
> >>>>>>>
> >>>>>>> This is an awesome catch.  Also, my apologies for the time you
> >> had
> >>> to
> >>>>>>> spend in that code.  It literally hasn’t changed much since
> >>> 1999/2000
> >>>>> and
> >>>>>>> it shows. :)
> >>>>>>>
> >>>>>>> Looking at the PR I’m not sure I can see how the test actually
> >>> works.
> >>>>>>> Here’s what I can follow, any gaps you can fill in are excellent:
> >>>>>>>
> >>>>>>> The call chain as I can see it:
> >>>>>>>
> >>>>>>> - IvmContextTest.testListContextTree
> >>>>>>> - IvmContextTest.validateTest("testListContextTree”)
> >>>>>>> [network call]
> >>>>>>> - IvmContextServlet.doGet     # invokes itself via reflection,
> >>>> returns
> >>>>>>> “true” if no exception
> >>>>>>> [reflection call]
> >>>>>>> - IvmContextServlet.testListContextTree
> >>>>>>> - NamingBean.verifyListContext  # throws exception if
> >> listContext
> >>>>>> returns
> >>>>>>> false
> >>>>>>> - NamingBean.listContext
> >>>>>>>
> >>>>>>> Looks like the essence of the test is in NamingBean.listContext.
> >>>>> Inside
> >>>>>>> it looks like the heart of it is that if we can’t lookup an item
> >>>>> listed,
> >>>>>> we
> >>>>>>> return false.
> >>>>>>>
> >>>>>>> Not sure if I got it perfectly, so definitely say so :)
> >>>>>>>
> >>>>>>> Couple questions:
> >>>>>>>
> >>>>>>>  - Is there a test for listBindings?  It’s mentioned as also
> >>> broken,
> >>>>> but
> >>>>>>> I didn’t see a test for it.
> >>>>>>>
> >>>>>>>  - What is the PrintWriter used for?  It seems it could be
> >> useful
> >>> to
> >>>>>>> assert it prints what we expect.  Not sure if that is there and I
> >>> am
> >>>>>>> missing it.
> >>>>>>>
> >>>>>>>  - There is an IvmContextTest, could we put the test there?
> >>>>>>>    https://github.com/apache/tomee/blob/master/container/
> >>>>>>> openejb-core/src/test/java/org/apache/openejb/ivm/naming/
> >>>>>>> IvmContextTest.java
> >>>>>>>
> >>>>>>> On the last one I noted the patched code mentions Tomcat, so
> >> maybe
> >>> it
> >>>>>> does
> >>>>>>> have to be Arquillian based.  If so, maybe we could still trim
> >> out
> >>>> some
> >>>>>> of
> >>>>>>> those layers.  I think Arquillian has the ability to execute
> >> remote
> >>>>> code,
> >>>>>>> so we could potentially skip the plumbing of the
> >>> test->servlet->ejb.
> >>>>>>>
> >>>>>>> Regardless, looking IvmContext always makes my brain hurt so
> >>>> incredibly
> >>>>>>> well done surviving it.  You’re clearly quite sharp.
> >>>>>>>
> >>>>>>>
> >>>>>>> -David
> >>>>>>>
> >>>>>>>
> >>>>>>>> On Jul 10, 2017, at 4:08 AM, Svetlin Zarev
> >>>>>> <svetlin.angelov.zarev@gmail.
> >>>>>>> com> wrote:
> >>>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> I'd like to propose the following fix: [1]. It fixes
> >>>>>>>> IvmContext.list()/listBindings(). There are several issues
> >> that
> >>>> are
> >>>>>>> being
> >>>>>>>> addressed:
> >>>>>>>>
> >>>>>>>> * MyNamingEnumeration.gatherNodes() adds the wrong federated
> >>>> context
> >>>>>>>> entries in the result set. It should add the nodes belonging to
> >>> the
> >>>>>>>> "initiallyRequestedNode", otherwise in some cases we are adding
> >>>> nodes
> >>>>>>> from
> >>>>>>>> two different parents (in other words we are mixing two
> >> different
> >>>>>>>> sub-contexts), which is incorrect.
> >>>>>>>>
> >>>>>>>> * MyNamingEnumeration.isMyChild() considers entries that are
> >> NOT
> >>>>>>> children
> >>>>>>>> to the "parent" tree as such - the original code was using
> >>>>>> "parentTree",
> >>>>>>> to
> >>>>>>>> check if a given node is a child to another one, which is
> >> wrong.
> >>>> The
> >>>>>>>> "parentTree" relationship indicates only the physical layout of
> >>> the
> >>>>>> tree,
> >>>>>>>> and NOT the relationship between the sub-contexts and their
> >>>> entries.
> >>>>>>> Hence
> >>>>>>>> it considers for instance "java:global" to be a child of
> >>>>> "java:module"
> >>>>>>>> which is obviously incorrect. The relationship between a
> >> context
> >>>> and
> >>>>>> the
> >>>>>>>> bound entries is denoted by the "parent" node. So when listing
> >> a
> >>>>>> context
> >>>>>>>> isMyChild should rely only on the "parent" node. There is one
> >>>>>> exception -
> >>>>>>>> the top level contexts (app, global, etc) which do not have a
> >>>> parent.
> >>>>>>>>
> >>>>>>>> * Wrong parentNode is passed as argument to gatherNodes in case
> >>> we
> >>>>> are
> >>>>>>>> listing the context for any "IvmContext != this. When we call
> >>>>>>>> IvmContext.list(), it looks up the relevant IvmContext and
> >> tries
> >>> to
> >>>>>>> build a
> >>>>>>>> NamingEnumeration for its sub-tree. So far so good, but the
> >>> looked
> >>>> up
> >>>>>>>> context might be different than the context on which we called
> >>>>> list().
> >>>>>> If
> >>>>>>>> that's the case, the wrong NameNode is passed as "parent" to
> >>>>>>> gatherNodes()
> >>>>>>>> and as a result some nodes are not listed.
> >>>>>>>>
> >>>>>>>> PS: This issue is relevant for tomee 1.7.x as well. i noticed
> >> it
> >>>> does
> >>>>>> not
> >>>>>>>> correctly list the naming tree as well. It also does not list
> >> the
> >>>>>>> federated
> >>>>>>>> contexts which was implemented in  [3].
> >>>>>>>>
> >>>>>>>> [1] https://github.com/apache/tomee/pull/88
> >>>>>>>> [2] https://issues.apache.org/jira/browse/TOMEE-2087
> >>>>>>>> [3] https://github.com/apache/tomee/pull/81
> >>>>>>>>
> >>>>>>>> Best regards,
> >>>>>>>> Svetlin
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
>

Reply via email to