/* * (C) Copyright 2015 Netcentric AG. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package biz.netcentric.cq.tools.actool.configreader; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.MockitoAnnotations.initMocks; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.commons.io.IOUtils; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.yaml.snakeyaml.Yaml; import biz.netcentric.cq.tools.actool.configmodel.AceBean; import biz.netcentric.cq.tools.actool.configmodel.AcesConfig; import biz.netcentric.cq.tools.actool.configmodel.AuthorizableConfigBean; import biz.netcentric.cq.tools.actool.validators.exceptions.AcConfigBeanValidationException; public class YamlConfigReaderTest { @Mock Session session; @Before public void setup() { initMocks(this); } @Test public void testNullActions() throws IOException, AcConfigBeanValidationException, RepositoryException { final ConfigReader yamlConfigReader = new YamlConfigReader(); final List<LinkedHashMap> yamlList = getYamlList("test-null-actions.yaml"); final AcesConfig acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); final Set<AceBean> acl = acls.filterByPrincipalName("groupA"); for (final AceBean ace : acl) { assertNotNull("Testing null actions", ace.getActions()); } } @Test public void testNoActions() throws IOException, AcConfigBeanValidationException, RepositoryException { final ConfigReader yamlConfigReader = new YamlConfigReader(); final List<LinkedHashMap> yamlList = getYamlList("test-no-actions.yaml"); final AcesConfig acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); final Set<AceBean> acl = acls.filterByPrincipalName("groupA"); final AceBean ace = acl.iterator().next(); assertEquals("Number of actions", 0, ace.getActions().length); } @Test public void testMultipleAcesSamePath() throws IOException, AcConfigBeanValidationException, RepositoryException { final ConfigReader yamlConfigReader = new YamlConfigReader(); final List<LinkedHashMap> yamlList = getYamlList("test-multiple-aces-same-path.yaml"); final AcesConfig acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); assertEquals("Number of ACLs", 3, acls.filterByPrincipalName("groupA").size()); } @Test public void testEmptyGlobVsNoGlob() throws Exception { final ConfigReader yamlConfigReader = new YamlConfigReader(); final List<LinkedHashMap> yamlList = getYamlList("test-empty-glob.yaml"); final AcesConfig acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); final Iterator<AceBean> it = acls.filterByPrincipalName("groupA").iterator(); final AceBean ace1 = it.next(); assertNull("repGlob", ace1.getRepGlob()); final AceBean ace2 = it.next(); assertEquals("repGlob", "", ace2.getRepGlob()); } @Test public void testOptionalSections() throws Exception { final ConfigReader yamlConfigReader = new YamlConfigReader(); List<LinkedHashMap> yamlList = getYamlList("test-no-aces.yaml"); Set<AuthorizableConfigBean> groups = yamlConfigReader.getGroupConfigurationBeans(yamlList, null); AcesConfig acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); assertNull("No ACEs", acls); yamlList = getYamlList("test-no-groups.yaml"); groups = yamlConfigReader.getGroupConfigurationBeans(yamlList, null); assertNull("No groups", groups); acls = yamlConfigReader.getAceConfigurationBeans(yamlList, null, session); assertNotNull("ACL for groupA", acls.filterByPrincipalName("groupA")); assertEquals("Number of ACEs", 1, acls.filterByPrincipalName("groupA").size()); } @Test public void testMemberGroups() throws IOException, AcConfigBeanValidationException, RepositoryException { final ConfigReader yamlConfigReader = new YamlConfigReader(); final List<LinkedHashMap> yamlList = getYamlList("test-membergroups.yaml"); final Set<AuthorizableConfigBean> groups = yamlConfigReader.getGroupConfigurationBeans(yamlList, null); assertEquals("Number of groups", 4, groups.size()); Iterator<AuthorizableConfigBean> groupsIt = groups.iterator(); AuthorizableConfigBean firstGroup = groupsIt.next(); assertEquals("", firstGroup.getMembersStringFromConfig()); assertEquals("groupA", firstGroup.getAuthorizableId()); AuthorizableConfigBean secondGroup = groupsIt.next(); assertEquals("groupB", secondGroup.getAuthorizableId()); assertEquals("groupA", secondGroup.getMembersStringFromConfig()); } static List<LinkedHashMap> getYamlList(final String filename) throws IOException { final String configString = getTestConfigAsString(filename); final Yaml yaml = new Yaml(); List<LinkedHashMap> yamlList = (List<LinkedHashMap>) yaml.load(configString); return yamlList; } static String getTestConfigAsString(final String resourceName) throws IOException { final ClassLoader classloader = Thread.currentThread() .getContextClassLoader(); final InputStream is = classloader.getResourceAsStream(resourceName); final StringWriter stringWriter = new StringWriter(); IOUtils.copy(is, stringWriter, "UTF-8"); return stringWriter.toString(); } }