/* * 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.jackrabbit.spi.commons.privilege; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import junit.framework.TestCase; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.NameFactory; import org.apache.jackrabbit.spi.PrivilegeDefinition; import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl; /** * <code>PrivilegeReadTest</code>... */ public class PrivilegeHandlerTest extends TestCase { private static final NameFactory NF = NameFactoryImpl.getInstance(); /* <privilege name="foo:testRead"/> <privilege name="foo:testWrite"/> <privilege abstract="true" name="foo:testAbstract"/> <privilege abstract="false" name="foo:testNonAbstract"/> <privilege name="foo:testAll"> <contains name="foo:testRead"/> <contains name="foo:testWrite"/> </privilege> */ private static final String TEST_PREFIX = "foo"; private static final String TEST_URI = "http://www.foo.com/1.0"; private static final String CONTENT_TYPE = "text/xml"; private static PrivilegeDefinition DEF_READ = new PrivilegeDefinitionImpl(NF.create(TEST_URI,"testRead"), false, null); private static PrivilegeDefinition DEF_WRITE = new PrivilegeDefinitionImpl(NF.create(TEST_URI,"testWrite"), false, null); private static PrivilegeDefinition DEF_ABSTRACT = new PrivilegeDefinitionImpl(NF.create(TEST_URI,"testAbstract"), true, null); private static PrivilegeDefinition DEF_NON_ABSTRACT = new PrivilegeDefinitionImpl(NF.create(TEST_URI,"testNonAbstract"), false, null); private static Set<Name> aggr = new LinkedHashSet<Name>(); static { aggr.add(DEF_READ.getName()); aggr.add(DEF_WRITE.getName()); } private static PrivilegeDefinition DEF_ALL = new PrivilegeDefinitionImpl(NF.create(TEST_URI,"testAll"), false, aggr); private static PrivilegeDefinition[] DEF_EXPECTED = new PrivilegeDefinition[]{ DEF_READ, DEF_WRITE, DEF_ABSTRACT, DEF_NON_ABSTRACT, DEF_ALL }; public void testReadInputStream() throws Exception { InputStream in = getClass().getResourceAsStream("readtest.xml"); PrivilegeDefinitionReader reader = new PrivilegeDefinitionReader(in, CONTENT_TYPE); Map<Name, PrivilegeDefinition> defs = new HashMap<Name, PrivilegeDefinition>(); for (PrivilegeDefinition def: reader.getPrivilegeDefinitions()) { defs.put(def.getName(), def); } for (PrivilegeDefinition def: DEF_EXPECTED) { PrivilegeDefinition e = defs.remove(def.getName()); assertNotNull("Definition " + def.getName() + " missing"); assertEquals("Definition mismatch.", def, e); } assertTrue("Not all definitions present", defs.isEmpty()); // check for namespace String fooUri = reader.getNamespaces().get(TEST_PREFIX); assertEquals("Namespace included", TEST_URI, fooUri); } public void testReadReader() throws Exception { InputStream in = getClass().getResourceAsStream("readtest.xml"); PrivilegeDefinitionReader reader = new PrivilegeDefinitionReader(new InputStreamReader(in), CONTENT_TYPE); Map<Name, PrivilegeDefinition> defs = new HashMap<Name, PrivilegeDefinition>(); for (PrivilegeDefinition def: reader.getPrivilegeDefinitions()) { defs.put(def.getName(), def); } for (PrivilegeDefinition def: DEF_EXPECTED) { PrivilegeDefinition e = defs.remove(def.getName()); assertNotNull("Definition " + def.getName() + " missing"); assertEquals("Definition mismatch.", def, e); } assertTrue("Not all definitions present", defs.isEmpty()); // check for namespace String fooUri = reader.getNamespaces().get(TEST_PREFIX); assertEquals("Namespace included", TEST_URI, fooUri); } public void testWriteOutputStream() throws Exception { PrivilegeDefinitionWriter writer = new PrivilegeDefinitionWriter(CONTENT_TYPE); Map<String, String> namespaces = new HashMap<String, String>(); namespaces.put(TEST_PREFIX, TEST_URI); ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.writeDefinitions(out, DEF_EXPECTED, namespaces); String result = out.toString("utf-8").trim(); PrivilegeDefinitionReader pdr = new PrivilegeDefinitionReader(new StringReader(result), CONTENT_TYPE); PrivilegeDefinition[] definitions = pdr.getPrivilegeDefinitions(); assertTrue("Write", Arrays.equals(DEF_EXPECTED, definitions)); } public void testWriteWriter() throws Exception { PrivilegeDefinitionWriter writer = new PrivilegeDefinitionWriter(CONTENT_TYPE); Map<String, String> namespaces = new HashMap<String, String>(); namespaces.put(TEST_PREFIX, TEST_URI); Writer w = new StringWriter(); writer.writeDefinitions(w, DEF_EXPECTED, namespaces); String result = w.toString(); PrivilegeDefinitionReader pdr = new PrivilegeDefinitionReader(new StringReader(result), CONTENT_TYPE); PrivilegeDefinition[] definitions = pdr.getPrivilegeDefinitions(); assertTrue("Write", Arrays.equals(DEF_EXPECTED, definitions)); } }