This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.repoinit-1.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git
commit e569605e399f793034433944c858c85e7b20c596 Author: Carsten Ziegeler <[email protected]> AuthorDate: Mon Nov 7 16:33:35 2016 +0000 SLING-6219 : Allow to create users with repoinit git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/repoinit@1768548 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/sling/jcr/repoinit/CreateUsersTest.java | 98 ++++++++++++++++++++++ .../apache/sling/jcr/repoinit/impl/TestUtil.java | 39 ++++++--- 2 files changed, 124 insertions(+), 13 deletions(-) diff --git a/src/test/java/org/apache/sling/jcr/repoinit/CreateUsersTest.java b/src/test/java/org/apache/sling/jcr/repoinit/CreateUsersTest.java new file mode 100644 index 0000000..30d6b40 --- /dev/null +++ b/src/test/java/org/apache/sling/jcr/repoinit/CreateUsersTest.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sling.jcr.repoinit; + +import java.util.Random; + +import javax.jcr.RepositoryException; + +import org.apache.sling.jcr.repoinit.impl.TestUtil; +import org.apache.sling.testing.mock.sling.ResourceResolverType; +import org.apache.sling.testing.mock.sling.junit.SlingContext; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +/** Test the creation and delete of users */ +public class CreateUsersTest { + + @Rule + public final SlingContext context = new SlingContext(ResourceResolverType.JCR_OAK); + + private static final Random random = new Random(42); + private String namePrefix; + private TestUtil U; + + @Before + public void setup() throws RepositoryException { + U = new TestUtil(context); + namePrefix = "user_" + random.nextInt(); + } + + @Test + public void createDeleteSingleTest() throws Exception { + final String userId = namePrefix + "_cdst"; + U.assertUser("at start of test", userId, false); + U.parseAndExecute("create user " + userId); + U.assertUser("after creating user", userId, true); + U.parseAndExecute("delete user " + userId); + U.assertUser("after deleting user", userId, false); + } + + private String user(int index) { + return namePrefix + "_" + index; + } + + @Test + public void createUserMultipleTimes() throws Exception { + final String username = namePrefix + "_multiple"; + U.assertUser("before test", username, false); + final String input = "create user " + username; + for(int i=0; i < 50; i++) { + U.parseAndExecute(input); + } + U.assertUser("after creating it multiple times", username, true); + } + + @Test + public void createDeleteMultipleTest() throws Exception { + final int n = 50; + + { + final StringBuilder input = new StringBuilder(); + for(int i=0; i < n; i++) { + U.assertUser("at start of test", user(i), false); + input.append("create user ").append(user(i)).append("\n"); + } + U.parseAndExecute(input.toString()); + } + + { + final StringBuilder input = new StringBuilder(); + for(int i=0; i < n; i++) { + U.assertUser("before deleting user", user(i), true); + input.append("delete user ").append(user(i)).append("\n"); + } + U.parseAndExecute(input.toString()); + } + + + for(int i=0; i < n; i++) { + U.assertUser("after deleting users", user(i), false); + } + } +} diff --git a/src/test/java/org/apache/sling/jcr/repoinit/impl/TestUtil.java b/src/test/java/org/apache/sling/jcr/repoinit/impl/TestUtil.java index 7ad7b82..2ff0101 100644 --- a/src/test/java/org/apache/sling/jcr/repoinit/impl/TestUtil.java +++ b/src/test/java/org/apache/sling/jcr/repoinit/impl/TestUtil.java @@ -16,8 +16,10 @@ */ package org.apache.sling.jcr.repoinit.impl; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.Reader; @@ -40,18 +42,18 @@ import org.apache.sling.testing.mock.sling.junit.SlingContext; /** Test utilities */ public class TestUtil { - + public static final String JCR_PRIMARY_TYPE = "jcr:primaryType"; public final Session adminSession; public final String id; public final String username; - + public TestUtil(SlingContext ctx) { adminSession = ctx.resourceResolver().adaptTo(Session.class); id = UUID.randomUUID().toString(); username = "user_" + id; } - + public List<Operation> parse(String input) throws RepoInitParsingException { final Reader r = new StringReader(input); try { @@ -61,6 +63,17 @@ public class TestUtil { } } + public void assertUser(String info, String id, boolean expectToExist) throws RepositoryException { + final Authorizable a = UserUtil.getUserManager(adminSession).getAuthorizable(id); + if(!expectToExist) { + assertNull(info + ", expecting Principal to be absent:" + id, a); + } else { + assertNotNull(info + ", expecting Principal to exist:" + id, a); + final User u = (User)a; + assertFalse(info + ", expecting Principal to be a plain user:" + id, u.isSystemUser()); + } + } + public void assertServiceUser(String info, String id, boolean expectToExist) throws RepositoryException { final Authorizable a = UserUtil.getUserManager(adminSession).getAuthorizable(id); if(!expectToExist) { @@ -68,14 +81,14 @@ public class TestUtil { } else { assertNotNull(info + ", expecting Principal to exist:" + id, a); final User u = (User)a; - assertNotNull(info + ", expecting Principal to be a System user:" + id, u.isSystemUser()); + assertTrue(info + ", expecting Principal to be a System user:" + id, u.isSystemUser()); } } - + public void assertNodeExists(String path) throws RepositoryException { assertNodeExists(path, null); } - + public void assertNodeExists(String path, String primaryType) throws RepositoryException { if(!adminSession.nodeExists(path)) { fail("Node does not exist:" + path); @@ -91,31 +104,31 @@ public class TestUtil { } } } - + public void parseAndExecute(String input) throws RepositoryException, RepoInitParsingException { final JcrRepoInitOpsProcessorImpl p = new JcrRepoInitOpsProcessorImpl(); p.apply(adminSession, parse(input)); adminSession.save(); } - + public void cleanupUser() throws RepositoryException, RepoInitParsingException { parseAndExecute("delete service user " + username); assertServiceUser("in cleanupUser()", username, false); } - + public Session loginService(String serviceUsername) throws RepositoryException { final SimpleCredentials cred = new SimpleCredentials(serviceUsername, new char[0]); return adminSession.impersonate(cred); } - + public Session getAdminSession() { return adminSession; } - + public void cleanup() { adminSession.logout(); } - + public String getTestCndStatement(String nsPrefix, String nsURI) throws RepositoryException, RepoInitParsingException { return "register nodetypes\n" + "<<===\n" @@ -123,7 +136,7 @@ public class TestUtil { + "===>>\n" ; } - + public String getTestCND(String nsPrefix, String nsURI) { return "<" + nsPrefix + "='" + nsURI + "'>\n" + "[" + nsPrefix + ":foo] > nt:unstructured\n"; -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
