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);
}