package com.adobe.acs.commons.users.impl;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(MockitoJUnitRunner.class)
public class ServiceUserTest {
@Test
public void testServiceUser() throws EnsureServiceUserException {
String[] aces = new String[1];
aces[0] = "type=allow;privileges=jcr:read,rep:write;path=/content/dam;rep:glob=/jcr:content/*;rep:ntNames=cq:Page,dam:Asset;rep:itemNames=jcr:title,jcr:description;rep:prefixes=cq,dam";
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "test-service-user");
config.put(EnsureServiceUser.PROP_ACES, aces);
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system", serviceUser.getIntermediatePath());
for (Ace ace : serviceUser.getAces()) {
assertEquals(true, ace.isAllow());
assertEquals("jcr:read", ace.getPrivilegeNames().get(0));
assertEquals("rep:write", ace.getPrivilegeNames().get(1));
assertEquals("/content/dam", ace.getContentPath());
assertTrue(ace.hasRepGlob());
assertEquals("/jcr:content/*", ace.getRepGlob());
assertTrue(ace.hasRepNtNames());
assertEquals("cq:Page", ace.getRepNtNames().get(0));
assertEquals("dam:Asset", ace.getRepNtNames().get(1));
assertTrue(ace.hasRepItemNames());
assertEquals("jcr:title", ace.getRepItemNames().get(0));
assertEquals("jcr:description", ace.getRepItemNames().get(1));
assertTrue(ace.hasRepPrefixes());
assertEquals("cq", ace.getRepPrefixes().get(0));
assertEquals("dam", ace.getRepPrefixes().get(1));
}
assertTrue(serviceUser.hasAceAt("/content/dam"));
}
public void testServiceUser_blankGlob() throws EnsureServiceUserException {
String[] aces = new String[1];
aces[0] = "type=allow;privileges=jcr:read;path=/content/dam;rep:glob=;";
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "test-service-user");
config.put(EnsureServiceUser.PROP_ACES, aces);
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system", serviceUser.getIntermediatePath());
for (Ace ace : serviceUser.getAces()) {
assertTrue(ace.hasRepGlob());
assertEquals("", ace.getRepGlob());
}
}
public void testServiceUser_NoGlob() throws EnsureServiceUserException {
String[] aces = new String[1];
aces[0] = "type=allow;privileges=jcr:read;path=/content/dam;";
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "test-service-user");
config.put(EnsureServiceUser.PROP_ACES, aces);
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system", serviceUser.getIntermediatePath());
for (Ace ace : serviceUser.getAces()) {
assertTrue(!ace.hasRepGlob());
assertEquals(null, ace.getRepGlob());
}
}
@Test(expected=EnsureServiceUserException.class)
public void testServiceUser_ProtectedSystemUser() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "cryptoservice");
new ServiceUser(config);
}
@Test
public void testServiceUser_principalName() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "test-service-user");
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system", serviceUser.getIntermediatePath());
}
@Test
public void testServiceUser_relativePrincipalName1() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "folder/test-service-user");
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system/folder", serviceUser.getIntermediatePath());
}
@Test
public void testServiceUser_relativePrincipalName2() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "./folder/test-service-user");
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system/folder", serviceUser.getIntermediatePath());
}
@Test
public void testServiceUser_relativePrincipalName3() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "/folder/test-service-user");
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system/folder", serviceUser.getIntermediatePath());
}
@Test
public void testServiceUser_absoluteRealtivePrincipalName2() throws EnsureServiceUserException {
Map<String, Object> config = new HashMap<String, Object>();
config.put(EnsureServiceUser.PROP_PRINCIPAL_NAME, "/home/users/system/folder/test-service-user");
ServiceUser serviceUser = new ServiceUser(config);
Assert.assertEquals("test-service-user", serviceUser.getPrincipalName());
Assert.assertEquals("/home/users/system/folder", serviceUser.getIntermediatePath());
}
}