Repository: tomee Updated Branches: refs/heads/master a684da5a0 -> cf5ed054f
Add tests that verify the behaviour of IvmContext bind/unbind Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/12bf481e Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/12bf481e Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/12bf481e Branch: refs/heads/master Commit: 12bf481e9bdbaec232c655abb63e1fd496d98fdd Parents: bfaefb3 Author: Svetlin Zarev <[email protected]> Authored: Thu Jul 20 09:44:11 2017 +0300 Committer: Svetlin Zarev <[email protected]> Committed: Thu Jul 20 10:40:13 2017 +0300 ---------------------------------------------------------------------- .../openejb/ivm/naming/IvmContextTest.java | 118 +++++++++++++++++++ 1 file changed, 118 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/12bf481e/container/openejb-core/src/test/java/org/apache/openejb/ivm/naming/IvmContextTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/ivm/naming/IvmContextTest.java b/container/openejb-core/src/test/java/org/apache/openejb/ivm/naming/IvmContextTest.java index a0c629a..a9265c8 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/ivm/naming/IvmContextTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/ivm/naming/IvmContextTest.java @@ -335,4 +335,122 @@ public class IvmContextTest { return hasErrors; } + + @Test(expected = NameAlreadyBoundException.class) + public void testBindThrowsNameAlreadyBoundException() throws Exception{ + IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/object", new Object()); + + IvmContext b = (IvmContext) root.lookup("a/b"); + //already bound from root -> must fail + b.bind("object", new Object()); + } + + @Test + public void testBindRelativeToRootAndLookupRelativeToTheCurrentContext() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + final Object boundObject = new Object(); + root.bind("a/b/object", boundObject); + + IvmContext b = (IvmContext) root.lookup("a/b"); + final Object lookedUpObject = b.lookup("object"); + assertSame(boundObject, lookedUpObject); + } + + @Test + public void testBindRelativeToRootAndLookupRelativeToRoot() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + final Object boundObject = new Object(); + root.bind("a/b/object", boundObject); + + final Object lookedUpObject = root.lookup("a/b/object"); + assertSame(boundObject, lookedUpObject); + } + + @Test + public void testBindRelativeToCurrentContextAndLookupRelativeToRoot() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/c", null); + + final Object boundObject = new Object(); + IvmContext b = (IvmContext) root.lookup("a/b"); + b.bind("object", boundObject); + + + final Object lookedUpObject = root.lookup("a/b/object"); + assertSame(boundObject, lookedUpObject); + } + + @Test(expected = NameNotFoundException.class) + public void testBindFromRootUnbindFromCurrentContext() throws Exception{ + IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/object", new Object()); + + IvmContext b = (IvmContext) root.lookup("a/b"); + b.unbind("object"); + + //must fail with NameNotFoundException + Object object = root.lookup("a/b/object"); + + fail("Lookup should have failed. Instead it returned: " + object); + } + + @Test(expected = NameNotFoundException.class) + public void testBindFromRootUnbindFromRoot() throws Exception{ + IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/object", new Object()); + root.unbind("a/b/object"); + + //must fail with NameNotFoundException + Object object = root.lookup("a/b/object"); + + fail("Lookup should have failed. Instead it returned: " + object); + } + + @Test + public void testBindFromRootSetsTheCorrectParent_lookupRelativeToRoot() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/c", null); + + IvmContext a = (IvmContext) root.lookup("a"); + //TODO Do we want ROOT to be a parent to the top-level contexts ? + requireCorrectParentChildRelationship(null, a); + + IvmContext b = (IvmContext) root.lookup("a/b"); + requireCorrectParentChildRelationship(a, b); + } + + @Test + public void testBindFromRootSetsTheCorrectParent_lookupRelativeToTheCurrentNode() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/c", null); + + IvmContext a = (IvmContext) root.lookup("a"); + //TODO Do we want ROOT to be a parent to the top-level contexts ? + requireCorrectParentChildRelationship(null, a); + + IvmContext b = (IvmContext) a.lookup("b"); + requireCorrectParentChildRelationship(a, b); + } + + @Test + public void testBindFromCorrectContextSetsTheCorrectParent_lookupRelativeToTheCurrentNode() throws Exception{ + final IvmContext root = IvmContext.createRootContext(); + root.bind("a/b/c", null); + + IvmContext a = (IvmContext) root.lookup("a"); + a.bind("object", null); + requireCorrectParentChildRelationship(a, (IvmContext) a.lookup("object")); + + IvmContext b = (IvmContext) a.lookup("b"); + b.bind("object", null); + requireCorrectParentChildRelationship(b, (IvmContext) b.lookup("object")); + } + + private void requireCorrectParentChildRelationship(IvmContext parent, IvmContext child){ + final NameNode parentNode = null == parent ? null : parent.mynode; + final NameNode childNode = child.mynode; + + assertSame(parentNode, childNode.getParent()); + } }
