This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12412 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit 78d72dfd1f5d7854ab2d8de0cffeffb488a722be Author: Julian Reschke <[email protected]> AuthorDate: Wed Aug 21 13:23:08 2024 +0100 SLING-12412: ResourceResolver: add test coverage for empty aliases, blank aliases, and invalid aliases --- .../impl/mapping/MapEntriesTest.java | 52 ++++++++++++++++++---- .../impl/mapping/PathGeneratorTest.java | 14 ++++++ 2 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java index 47917e7..ea4512c 100644 --- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java +++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java @@ -178,6 +178,49 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest { @Test public void test_simple_alias_support() { + // SLING-12399 - empty alias is returned back (might be a bug) + for (String validAlias : List.of("alias", "")) { + prepareMapEntriesForAlias(validAlias); + mapEntries.doInit(); + Map<String, Collection<String>> aliasMap = mapEntries.getAliasMap("/parent"); + assertNotNull(aliasMap); + assertTrue(aliasMap.containsKey("child")); + assertEquals(List.of(validAlias), aliasMap.get("child")); + } + } + + @Test + public void test_simple_multi_alias_support() { + prepareMapEntriesForAlias("foo", "bar"); + mapEntries.doInit(); + Map<String, Collection<String>> aliasMap = mapEntries.getAliasMap("/parent"); + assertNotNull(aliasMap); + assertTrue(aliasMap.containsKey("child")); + assertEquals(List.of("foo", "bar"), aliasMap.get("child")); + } + + @Test + public void test_simple_multi_alias_support_with_blank_and_invalid() { + // SLING-12399 - invalid aliases filtered out (but empty string not considered invalid) + prepareMapEntriesForAlias("", "foo", ".", "bar", "x/y", "qux", " "); + mapEntries.doInit(); + Map<String, Collection<String>> aliasMap = mapEntries.getAliasMap("/parent"); + assertNotNull(aliasMap); + assertTrue(aliasMap.containsKey("child")); + assertEquals(List.of("", "foo", "bar", "qux", " "), aliasMap.get("child")); + } + + @Test + public void test_alias_support_invalid() { + for (String invalidAlias : List.of(".", "..", "foo/bar")) { + prepareMapEntriesForAlias(invalidAlias); + mapEntries.doInit(); + Map<String, Collection<String>> aliasMap = mapEntries.getAliasMap("/parent"); + assertEquals(Collections.emptyMap(), aliasMap); + } + } + + private void prepareMapEntriesForAlias(String... alias) { Resource parent = mock(Resource.class); when(parent.getPath()).thenReturn("/parent"); @@ -185,7 +228,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest { when(result.getParent()).thenReturn(parent); when(result.getPath()).thenReturn("/parent/child"); when(result.getName()).thenReturn("child"); - when(result.getValueMap()).thenReturn(buildValueMap(ResourceResolverImpl.PROP_ALIAS, "alias")); + when(result.getValueMap()).thenReturn(buildValueMap(ResourceResolverImpl.PROP_ALIAS, alias)); when(resourceResolver.findResources(anyString(), eq("JCR-SQL2"))).thenAnswer(new Answer<Iterator<Resource>>() { @@ -198,13 +241,6 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest { } } }); - - mapEntries.doInit(); - - Map<String, Collection<String>> aliasMap = mapEntries.getAliasMap("/parent"); - assertNotNull(aliasMap); - assertTrue(aliasMap.containsKey("child")); - assertEquals(Collections.singletonList("alias"), aliasMap.get("child")); } @Test diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PathGeneratorTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PathGeneratorTest.java index 36b8bb0..b429124 100644 --- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PathGeneratorTest.java +++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/PathGeneratorTest.java @@ -103,6 +103,20 @@ public class PathGeneratorTest { assertThat(paths, Matchers.hasItems("/alias1/bar", "/alias2/bar", "/foo/bar")); } + // test for SLING-12399 + @Test + public void subPathWithMultipleIncludingEmptyAliases() { + + PathGenerator builder = new PathGenerator(); + builder.insertSegment(emptyList(), "bar"); + builder.insertSegment(asList("", "alias1"), "foo"); + + List<String> paths = builder.generatePaths(); + + assertThat(paths, Matchers.hasSize(2)); + assertThat(paths, Matchers.hasItems("/alias1/bar", "/foo/bar")); + } + @Test public void subPathWithComplexAliasesSetup() {
