This is an automated email from the ASF dual-hosted git repository.

baedke pushed a commit to branch OAK-11561
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/OAK-11561 by this push:
     new 38ad9bf996 OAK-11561: Oak to Jcr name conversion is behaving 
inconsistently
38ad9bf996 is described below

commit 38ad9bf9962db81d6e7303074942cdffd3b4a2ca
Author: Manfred Baedke <[email protected]>
AuthorDate: Thu Mar 6 15:16:12 2025 +0100

    OAK-11561: Oak to Jcr name conversion is behaving inconsistently
    
    Added test case.
---
 .../oak/jcr/{ => repository}/RepositoryTest.java   | 49 +++++++++++++++++++++-
 1 file changed, 47 insertions(+), 2 deletions(-)

diff --git 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryTest.java
similarity index 96%
rename from 
oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
rename to 
oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryTest.java
index e9203a1a0a..e1829df677 100644
--- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
+++ 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryTest.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.jcr;
+package org.apache.jackrabbit.oak.jcr.repository;
 
 import static java.util.Arrays.asList;
 import static javax.jcr.ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW;
 import static 
javax.jcr.Repository.OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED;
 import static org.apache.jackrabbit.commons.JcrUtils.getChildNodes;
+import static org.apache.jackrabbit.commons.JcrUtils.getRepository;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -30,6 +31,9 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -86,14 +90,26 @@ import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.api.JackrabbitNode;
 import org.apache.jackrabbit.api.JackrabbitRepository;
 import org.apache.jackrabbit.api.ReferenceBinary;
+import org.apache.jackrabbit.api.stats.RepositoryStatistics;
 import org.apache.jackrabbit.commons.cnd.CndImporter;
 import org.apache.jackrabbit.commons.cnd.ParseException;
 import org.apache.jackrabbit.commons.jackrabbit.SimpleReferenceBinary;
 import org.apache.jackrabbit.core.data.RandomInputStream;
 import org.apache.jackrabbit.core.security.principal.AdminPrincipal;
+import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
-import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
+import org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest;
+import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
+import org.apache.jackrabbit.oak.jcr.session.SessionContext;
+import org.apache.jackrabbit.oak.jcr.session.SessionNamespaces;
+import org.apache.jackrabbit.oak.jcr.session.SessionStats;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
+import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
+import org.apache.jackrabbit.oak.plugins.tree.factories.RootFactory;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.stats.NoopStats;
+import org.apache.jackrabbit.oak.stats.StatisticManager;
 import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
 import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl;
@@ -2331,6 +2347,35 @@ public class RepositoryTest extends 
AbstractRepositoryTest {
                 logMessages.toString(), containsString(p2.getPath()));
     }
 
+    @Test
+    public void testConsistencyOfNameConversion() throws RepositoryException {
+        NamespaceRegistry namespaceRegistry = 
getAdminSession().getWorkspace().getNamespaceRegistry();
+        Root root = RootFactory.createReadOnlyRoot(EmptyNodeState.EMPTY_NODE);
+
+        SessionDelegate sessionDelegateMock = mock(SessionDelegate.class);
+        
when(sessionDelegateMock.getSessionStats()).thenReturn(mock(SessionStats.class));
+        when(sessionDelegateMock.getRoot()).thenReturn(root);
+        SessionNamespaces sessionNamespaces = new SessionNamespaces(root);
+        
when(sessionDelegateMock.getNamespaces()).thenReturn(sessionNamespaces);
+        StatisticManager statisticManagerMock = mock(StatisticManager.class);
+        
when(statisticManagerMock.getStatsCounter(any(RepositoryStatistics.Type.class))).thenReturn(NoopStats.INSTANCE);
+        
when(statisticManagerMock.getMeter(any(RepositoryStatistics.Type.class))).thenReturn(NoopStats.INSTANCE);
+        SessionContext sessionContext = ((RepositoryImpl) 
getRepository()).createSessionContext(statisticManagerMock, 
mock(SecurityProvider.class), Collections.emptyMap(), sessionDelegateMock, 100, 
mock(CommitRateLimiter.class));
+
+        //register global namespaces
+        namespaceRegistry.registerNamespace("sample", 
"http://www.example.com";);
+        namespaceRegistry.registerNamespace("globalPrefix", 
"http://www.secondexample.com";);
+
+        //should fail (but doesn't, see OAK-xyz), because the prefix foo is 
not registered
+        assertEquals("foo:bar", sessionContext.getJcrName("foo:bar"));
+
+        //create a local mapping for a completely unrelated namespace
+        sessionContext.getSession().setNamespacePrefix("localPrefix", 
"http://www.secondexample.com";);
+
+        //Now (in the presence of a local re-mapping) it will fail
+        assertEquals("foo:bar", sessionContext.getJcrName("foo:bar"));
+    }
+
     private static ch.qos.logback.classic.Logger rootLogger() {
         return ((LoggerContext) 
LoggerFactory.getILoggerFactory()).getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
     }

Reply via email to