/* * (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.validators; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.withSettings; import static org.mockito.MockitoAnnotations.initMocks; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.security.AccessControlList; import javax.jcr.security.AccessControlManager; import javax.jcr.security.AccessControlPolicy; import org.apache.jackrabbit.api.security.JackrabbitAccessControlList; import org.apache.sling.jcr.api.SlingRepository; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import biz.netcentric.cq.tools.actool.configmodel.AceBean; import biz.netcentric.cq.tools.actool.configmodel.AuthorizableConfigBean; import biz.netcentric.cq.tools.actool.configreader.ConfigReader; import biz.netcentric.cq.tools.actool.configreader.TestAceBean; import biz.netcentric.cq.tools.actool.configreader.TestAuthorizableConfigBean; import biz.netcentric.cq.tools.actool.configreader.TestYamlConfigReader; import biz.netcentric.cq.tools.actool.helper.Constants; import biz.netcentric.cq.tools.actool.validators.exceptions.AcConfigBeanValidationException; import biz.netcentric.cq.tools.actool.validators.impl.AceBeanValidatorImpl; import biz.netcentric.cq.tools.actool.validators.impl.AuthorizableValidatorImpl; public class BeanValidatorsTest { @Mock SlingRepository repository; @Mock Session session; @Mock AccessControlList accessControlPolicy; @Mock AccessControlManager accessControlManager; @Mock AuthorizableValidator authorizableValidator; @InjectMocks ConfigReader yamlConfigReader = new TestYamlConfigReader(); List<LinkedHashMap> aclList; Set<String> groupsFromConfig; List<AceBean> aceBeanList = new ArrayList<AceBean>(); List<AuthorizableConfigBean> authorizableBeanList = new ArrayList<AuthorizableConfigBean>(); @Before public void setup() throws IOException, RepositoryException, AcConfigBeanValidationException { initMocks(this); doReturn(session).when(repository).loginService(Constants.USER_AC_SERVICE, null); accessControlPolicy = mock(AccessControlList.class, withSettings().extraInterfaces(JackrabbitAccessControlList.class)); doReturn(new String[] { "rep:glob" }).when((JackrabbitAccessControlList) accessControlPolicy).getRestrictionNames(); doReturn(accessControlManager).when(session).getAccessControlManager(); doReturn(new AccessControlPolicy[] { accessControlPolicy }).when(accessControlManager).getPolicies("/"); doThrow(new RepositoryException("invalid permission")).when(accessControlManager).privilegeFromName("read"); doThrow(new RepositoryException("invalid permission")).when(accessControlManager).privilegeFromName("jcr_all"); final List<LinkedHashMap> yamlList = ValidatorTestHelper.getYamlList("testconfig.yaml"); final AuthorizableValidator authorizableValidator = new AuthorizableValidatorImpl("/home/groups", "/home/users"); authorizableValidator.disable(); groupsFromConfig = yamlConfigReader.getGroupConfigurationBeans(yamlList, authorizableValidator).getAuthorizableIds(); ValidatorTestHelper.createAuthorizableTestBeans(yamlList, yamlConfigReader, authorizableBeanList); ValidatorTestHelper.createAceTestBeans(yamlList, yamlConfigReader, groupsFromConfig, aceBeanList, session); } @Test public void testAuthorizableBeans() { final AuthorizableValidator authorizableValidator = new AuthorizableValidatorImpl("/home/groups", "/home/users"); for (final AuthorizableConfigBean authorizableBean : authorizableBeanList) { assertEquals( ValidatorTestHelper.getSimpleValidationException(authorizableBean, authorizableValidator), ((TestAuthorizableConfigBean) authorizableBean).getAssertedExceptionString()); } } @Test public void testAceBeans() { final AceBeanValidator aceBeanValidator = new AceBeanValidatorImpl(groupsFromConfig); for (final AceBean aceBean : aceBeanList) { assertEquals("Problem in bean " + aceBean, ((TestAceBean) aceBean).getAssertedExceptionString(), ValidatorTestHelper.getSimpleValidationException(aceBean, aceBeanValidator, accessControlManager)); } } }