/* * #%L * pro-grade * %% * Copyright (C) 2013 - 2014 Ondřej Lukáš, Josef Cacek * %% * Licensed 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. * #L% */ package net.sourceforge.prograde.policyparser; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.util.List; import net.sourceforge.prograde.type.Priority; import org.junit.Test; /** * * @author Ondrej Lukas */ public class ParserTestCase { @Test public void testParsingCompleteValidFile() { Parser parser = new Parser(); ParsedPolicy parsedPolicy = null; try { parsedPolicy = parser .parse(new File("src/test/java/net/sourceforge/prograde/policyparser/policyFiles/full.policy")); } catch (Exception ex) { fail("Valid policy file wasn't successfully parsed due to thrown exception: " + ex); } assertEquals("KeystorePasswordURL entry wasn't successfully parsed.", "pass.txt", parsedPolicy.getKeystorePasswordURL()); assertEquals("Keystore entry (url part) wasn't successfully parsed.", "prograde.keystore", parsedPolicy.getKeystore() .getKeystoreURL()); assertEquals("Keystore entry (type part) wasn't successfully parsed.", "type", parsedPolicy.getKeystore() .getKeystoreType()); assertEquals("Keystore entry (provider part) wasn't successfully parsed.", "provider", parsedPolicy.getKeystore() .getKeystoreProvider()); assertTrue("Priority entry wasn't successfully parsed.", Priority.GRANT == parsedPolicy.getPriority()); List<ParsedPolicyEntry> grantEntries = parsedPolicy.getGrantEntries(); assertTrue("Wrong number of grant entries was parsed.", grantEntries.size() == 2); boolean first = false; boolean second = false; for (ParsedPolicyEntry ppe : grantEntries) { if (ppe.getCodebase().equals("file:./One.jar")) { first = true; assertEquals("SignedBy entry wasn't successfully parsed.", "duke", ppe.getSignedBy()); assertTrue("Wrong number of principal entries was parsed.", ppe.getPrincipals().size() == 2); boolean contained = false; for (ParsedPrincipal principal : ppe.getPrincipals()) { if (principal.getPrincipalName().equals("user1")) { assertEquals("Principal class name wasn't successfully parsed.", "sample.principal.SamplePrincipal", principal.getPrincipalClass()); contained = true; break; } } if (!contained) { fail("Principal with principal name user1 wasn' parsed."); } contained = false; for (ParsedPrincipal principal : ppe.getPrincipals()) { if (principal.getPrincipalName().equals("user2")) { assertEquals("Principal class name wasn't successfully parsed.", "sample.principal.NotSamplePrincipal", principal.getPrincipalClass()); contained = true; break; } } if (!contained) { fail("Principal with principal name user2 wasn' parsed."); } assertTrue("Wrong number of permission was parsed.", ppe.getPermissions().size() == 2); contained = false; for (ParsedPermission perm : ppe.getPermissions()) { if (perm.getPermissionName().equals("java.home")) { assertEquals("Permission type wasn't successfully parsed.", "java.util.PropertyPermission", perm.getPermissionType()); assertEquals("Permission actions weren't successfully parsed.", "read,write", perm.getActions()); assertEquals("Permission signedBy wasn't successfully parsed.", "adam", perm.getSignedBy()); contained = true; break; } } if (!contained) { fail("PropertyPermission with name \"java.home\" wasn' parsed."); } contained = false; for (ParsedPermission perm : ppe.getPermissions()) { if (perm.getPermissionName().equals("user.home")) { assertEquals("Permission type wasn't successfully parsed.", "java.util.PropertyPermission", perm.getPermissionType()); assertEquals("Permission actions weren't successfully parsed.", "read", perm.getActions()); assertEquals("Permission signedBy wasn't successfully parsed.", "bob", perm.getSignedBy()); contained = true; break; } } if (!contained) { fail("PropertyPermission with name \"user.home\" wasn' parsed."); } } else { if (ppe.getCodebase().equals("file:./Two.jar")) { second = true; assertTrue("Wrong number of principal entries was parsed.", ppe.getPrincipals().isEmpty()); assertNull("Wrong number of signedBy entries was parsed.", ppe.getSignedBy()); assertTrue("Wrong number of permission entries was parsed.", ppe.getPermissions().size() == 1); for (ParsedPermission perm : ppe.getPermissions()) { assertEquals("Permission name wasn't successfully parsed.", "java.security.AllPermission", perm.getPermissionType()); assertNull("Permission type wasn't defined but isn't null.", perm.getPermissionName()); assertNull("Permission action wasn't defined but isn't null.", perm.getActions()); assertNull("Permission signedBy wasn't defined but isn't null.", perm.getSignedBy()); } } else { fail("Codebase in grant entry wasn't successfully parsed."); } } } if (!first || !second) { fail("Two different entries were in policy file but only one of them was parsed but saved twice."); } List<ParsedPolicyEntry> denyEntries = parsedPolicy.getDenyEntries(); assertTrue("Wrong number of deny entries was parsed.", denyEntries.size() == 1); for (ParsedPolicyEntry ppe : denyEntries) { assertTrue("Principal wasn't defined but isn't empty.", ppe.getPrincipals().isEmpty()); assertNull("SignedBy wasn't defined but isn't null.", ppe.getSignedBy()); assertNull("Codebase wasn't defined but isn't null.", ppe.getCodebase()); assertTrue("Wrong number of permission entries was parsed.", ppe.getPermissions().size() == 1); for (ParsedPermission perm : ppe.getPermissions()) { assertEquals("Permission name wasn't successfully parsed.", "javax.security.auth.AuthPermission", perm.getPermissionType()); assertEquals("Permission type wasn't defined but isn't null.", "doAsPrivileged", perm.getPermissionName()); assertNull("Permission action wasn't defined but isn't null.", perm.getActions()); assertNull("Permission signedBy wasn't defined but isn't null.", perm.getSignedBy()); } } } @Test public void testKeystoreAndKeystorePassTwiceAndNotPriority() { Parser parser = new Parser(); ParsedPolicy parsedPolicy = null; try { parsedPolicy = parser.parse(new File("src/test/java/net/sourceforge/prograde/policyparser/policyFiles/" + "keystoreAndKeystorePassTwiceAndNotPriority.policy")); } catch (Exception ex) { fail("Valid policy file wasn't successfully parsed due to thrown exception: " + ex); } assertEquals("It doesn't contain right KeystorePasswordURL.", "rightpass.txt", parsedPolicy.getKeystorePasswordURL()); assertEquals("It doesn't contain right Keystore entry.", "right.keystore", parsedPolicy.getKeystore().getKeystoreURL()); assertNull("Priority wasn't defined. It should be null.", parsedPolicy.getPriority()); } @Test public void testCodebaseTwice() { Parser parser = new Parser(); try { parser.parse(new File("src/test/java/net/sourceforge/prograde/policyparser/policyFiles/codebaseTwice.policy")); fail("There was definition of two codebase in one entry, it should throw Exception, but is passed."); } catch (Exception ex) { } } @Test public void testSignedByTwice() { Parser parser = new Parser(); try { parser.parse(new File("src/test/java/net/sourceforge/prograde/policyparser/policyFiles/signedByTwice.policy")); fail("There was definition of two codebase in one entry, it should throw Exception, but is passed."); } catch (Exception ex) { } } @Test public void testAliasPrincipal() { Parser parser = new Parser(); ParsedPolicy parsedPolicy = null; try { parsedPolicy = parser.parse(new File( "src/test/java/net/sourceforge/prograde/policyparser/policyFiles/aliasPrincipal.policy")); } catch (Exception ex) { fail("Valid policy file wasn't successfully parsed due to thrown exception: " + ex); } List<ParsedPolicyEntry> grantEntries = parsedPolicy.getGrantEntries(); assertTrue("Wrong number of grant entries was parsed.", grantEntries.size() == 1); List<ParsedPrincipal> principals = grantEntries.get(0).getPrincipals(); assertTrue("Wrong number of principal entries was parsed.", principals.size() == 1); ParsedPrincipal principal = principals.get(0); assertTrue("hasAlias return false but it has alias.", principal.hasAlias()); assertEquals("Alias wasn't parsed right", "alias", principal.getAlias()); } @Test public void testTwoWildCardsPrincipal() { Parser parser = new Parser(); ParsedPolicy parsedPolicy = null; try { parsedPolicy = parser.parse(new File( "src/test/java/net/sourceforge/prograde/policyparser/policyFiles/twoWildCardsPrincipal.policy")); } catch (Exception ex) { fail("Valid policy file wasn't successfully parsed due to thrown exception: " + ex); } List<ParsedPolicyEntry> grantEntries = parsedPolicy.getGrantEntries(); assertTrue("Wrong number of grant entries was parsed.", grantEntries.size() == 1); List<ParsedPrincipal> principals = grantEntries.get(0).getPrincipals(); assertTrue("Wrong number of principal entries was parsed.", principals.size() == 1); ParsedPrincipal principal = principals.get(0); assertTrue("hasClassWildcard return false but it has this wildcard.", principal.hasClassWildcard()); assertTrue("hasNameWildcard return false but it has this wildcard.", principal.hasNameWildcard()); } @Test public void testOneWildCardPrincipal() { Parser parser = new Parser(); ParsedPolicy parsedPolicy = null; try { parsedPolicy = parser.parse(new File( "src/test/java/net/sourceforge/prograde/policyparser/policyFiles/oneWildCardPrincipal.policy")); } catch (Exception ex) { fail("Valid policy file wasn't successfully parsed due to thrown exception: " + ex); } List<ParsedPolicyEntry> grantEntries = parsedPolicy.getGrantEntries(); assertTrue("Wrong number of grant entries was parsed.", grantEntries.size() == 1); List<ParsedPrincipal> principals = grantEntries.get(0).getPrincipals(); assertTrue("Wrong number of principal entries was parsed.", principals.size() == 1); ParsedPrincipal principal = principals.get(0); assertTrue("hasNameWildcard return false but it has this wildcard.", principal.hasNameWildcard()); assertEquals("Principal class name wasn't successfully parsed.", "sample.principal.SamplePrincipal", principal.getPrincipalClass()); } }