001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /**
019: * @author Maxim V. Makarov
020: * @version $Revision$
021: */package org.apache.harmony.auth.tests.javax.security.auth.kerberos;
022:
023: import java.security.AllPermission;
024: import java.security.Permission;
025: import java.security.PermissionCollection;
026: import java.util.ArrayList;
027: import java.util.Collection;
028: import java.util.Enumeration;
029: import java.util.NoSuchElementException;
030:
031: import javax.security.auth.kerberos.DelegationPermission;
032: import javax.security.auth.kerberos.ServicePermission;
033:
034: import junit.framework.TestCase;
035:
036: /**
037: * Tests ServicePermission class implementation.
038: */
039: public class ServicePermissionTest extends TestCase {
040:
041: /**
042: * @tests javax.security.auth.kerberos.ServicePermission#ServicePermission(
043: * java.lang.String,java.lang.String)
044: */
045: public void testCtor() {
046: ServicePermission sp = new ServicePermission(
047: "krbtgt/AAA.COM@BBB.COM", "initiate");
048: ServicePermission sp1 = new ServicePermission(
049: "host/AAA.COM@BBB.COM", "accept");
050: assertEquals("krbtgt/AAA.COM@BBB.COM", sp.getName());
051: assertEquals("initiate", sp.getActions());
052: assertEquals("host/AAA.COM@BBB.COM", sp1.getName());
053: assertEquals("accept", sp1.getActions());
054: ServicePermission sp2 = new ServicePermission(
055: "host/AAA.COM@BBB.COM", "accept, initiate");
056: assertEquals("initiate,accept", sp2.getActions());
057:
058: try {
059: // Regression for HARMONY-769
060: // checks exception order: action parameter is verified first
061: new ServicePermission(null, "initiate accept");
062: fail("No expected IllegalArgumentException");
063: } catch (IllegalArgumentException e) {
064: }
065: }
066:
067: public void testFailedCtor() {
068: try {
069: new ServicePermission("krbtgt/AAA.COM@BBB.COM", "read");
070: fail("incorrect actions");
071: } catch (IllegalArgumentException e) {
072: }
073:
074: try {
075: new ServicePermission("krbtgt/AAA.COM@BBB.COM", "");
076: fail("actions is empty");
077: } catch (IllegalArgumentException e) {
078: }
079:
080: try {
081: new ServicePermission("krbtgt/AAA.COM@BBB.COM", null);
082: fail("actions is null");
083: } catch (NullPointerException e) {
084: } catch (IllegalArgumentException e) {
085: }
086:
087: try {
088: new ServicePermission(null, "accept");
089: fail("permission is null");
090: } catch (NullPointerException e) {
091: }
092: try {
093: new ServicePermission("", "accept");
094: //TODO: fail("No expected IAE"); //
095: } catch (IllegalArgumentException e) {
096: }
097: try {
098: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
099: "accept, read");
100: fail("Incorrect actions");
101: } catch (IllegalArgumentException e) {
102: }
103: try {
104: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
105: "initiate, read");
106: fail("Incorrect actions");
107: } catch (IllegalArgumentException e) {
108: }
109: try {
110: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
111: "read, initiate ");
112: fail("Incorrect actions");
113: } catch (Exception e) {
114: }
115: try {
116: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
117: "read, accept ");
118: fail("Incorrect actions");
119: } catch (IllegalArgumentException e) {
120: }
121: try {
122: new ServicePermission("krbtgt/AAA.COM@BBB.COM", ", accept ");
123: //TODO: fail("No expected IAE");
124: } catch (IllegalArgumentException e) {
125: }
126: try {
127: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
128: "initiate, accept, read");
129: fail("Incorrect actions");
130: } catch (IllegalArgumentException e) {
131: }
132: try {
133: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
134: "initiate, read, accept");
135: fail("Incorrect actions");
136: } catch (IllegalArgumentException e) {
137: }
138: try {
139: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
140: "initiate, accept, accept");
141: //TODO: fail("Incorrect actions");
142: } catch (IllegalArgumentException e) {
143: }
144: try {
145: new ServicePermission("krbtgt/AAA.COM@BBB.COM",
146: "initiate accept");
147: fail("Incorrect actions");
148: } catch (IllegalArgumentException e) {
149: }
150: }
151:
152: public void testEquals() {
153: ServicePermission sp = new ServicePermission(
154: "host/AAA.COM@BBB.COM", "accept");
155: ServicePermission sp1 = new ServicePermission(
156: "host/AAA.COM@BBB.COM", "initiate");
157: ServicePermission sp2 = new ServicePermission(
158: "host/AAA.COM@BBB.COM", "initiate, accept");
159: assertTrue(sp.equals(sp));
160: assertTrue(sp.hashCode() == sp.hashCode());
161: assertFalse(sp.equals(sp1));
162: assertFalse(sp.hashCode() == sp1.hashCode());
163: assertFalse(sp.equals(sp2));
164: assertFalse(sp1.equals(sp2));
165: assertTrue(sp2.equals(sp2));
166: assertFalse(sp.equals(new DelegationPermission(
167: "\"AAA\" \"BBB\"", "action")));
168: assertFalse(sp.equals(null));
169: }
170:
171: public void testImplies() {
172: ServicePermission sp1;
173: ServicePermission sp = new ServicePermission(
174: "host/AAA.COM@BBB.COM", "accept");
175: sp1 = new ServicePermission("*", "initiate, accept");
176: assertTrue(sp.implies(sp));
177: assertFalse(sp.implies(sp1));
178: assertTrue(sp1.implies(sp));
179: assertTrue(sp1.implies(sp1));
180: sp1 = new ServicePermission("*", "accept");
181: assertTrue(sp1.implies(sp));
182: sp1 = new ServicePermission("*", "initiate");
183: assertFalse(sp1.implies(sp));
184: assertFalse(sp1.implies(new ServicePermission("*",
185: "accept, initiate")));
186: assertTrue(new ServicePermission("host/AAA.COM@BBB.COM",
187: "initiate, accept").implies(sp));
188: assertTrue(new ServicePermission("host/AAA.COM@BBB.COM",
189: "accept").implies(sp));
190: assertFalse(new ServicePermission("host/AAA.COM@BBB.COM",
191: "initiate").implies(sp));
192: assertFalse(sp1.implies(null));
193: }
194:
195: // tests for KrbServicePermissionCollection
196:
197: public void testAddCollection() {
198: ServicePermission sp = new ServicePermission("AAA", "accept");
199: PermissionCollection pc = sp.newPermissionCollection();
200:
201: try {
202: pc.add(new DelegationPermission("\"aaa\" \"bbb\""));
203: fail("Should not add non DelegationPermission");
204: } catch (IllegalArgumentException e) {
205: }
206:
207: try {
208: pc.add(null);
209: fail("no expected IAE");
210: } catch (IllegalArgumentException e) {
211: }
212:
213: pc.add(new ServicePermission("AAA", "accept"));
214: pc.add(new ServicePermission("BBB", "accept, initiate"));
215:
216: pc.setReadOnly();
217: try {
218: pc.add(sp);
219: fail("read-only flag is ignored");
220: } catch (SecurityException e) {
221: }
222: }
223:
224: public void testImpliesCollection() {
225:
226: Permission ap = new AllPermission();
227: Permission p = new ServicePermission("AAA", "accept");
228: PermissionCollection pc = p.newPermissionCollection();
229: assertFalse(pc.implies(ap));
230: assertFalse(pc.implies(p));
231: pc.add(p);
232: assertTrue(pc.implies(p));
233: assertFalse(pc.implies(null));
234: assertFalse(pc
235: .implies(new ServicePermission("BBB", "initiate")));
236: assertFalse(pc.implies(new ServicePermission("CCC", "accept")));
237: pc.add(new ServicePermission("*", "accept, initiate"));
238: assertTrue(pc.implies(new ServicePermission("*", "accept")));
239: assertTrue(pc.implies(new ServicePermission("*", "initiate")));
240: assertTrue(pc.implies(new ServicePermission("BBB", "initiate")));
241: assertTrue(pc.implies(new ServicePermission("CCC", "accept")));
242:
243: }
244:
245: public void testElements() {
246: Permission p = new ServicePermission("AAA", "accept");
247: PermissionCollection pc = p.newPermissionCollection();
248:
249: try {
250: pc.elements().nextElement();
251: fail("expected NoSuchElementException");
252: } catch (NoSuchElementException e) {
253: }
254:
255: Enumeration<Permission> en = pc.elements();
256: assertNotNull(en);
257: assertFalse(en.hasMoreElements());
258:
259: Permission sp1 = new ServicePermission("BBB",
260: "accept, initiate");
261: Permission sp2 = new ServicePermission("CCC", "initiate");
262: Permission sp3 = new ServicePermission("DDD", "accept");
263:
264: pc.add(sp1);
265: en = pc.elements();
266: assertTrue(en.hasMoreElements());
267: assertTrue(sp1.equals(en.nextElement()));
268: assertFalse(en.hasMoreElements());
269: pc.add(sp2);
270: pc.add(sp3);
271: en = pc.elements();
272: Collection<Permission> c = new ArrayList<Permission>();
273: while (en.hasMoreElements()) {
274: c.add(en.nextElement());
275: }
276: assertFalse(en.hasMoreElements());
277: assertEquals(3, c.size());
278: assertTrue(c.contains(sp1) && c.contains(sp2)
279: && c.contains(sp3));
280: }
281:
282: public void testActions() {
283:
284: String[] validActions = new String[] {
285: " accept ", // spaces
286: "accept,ACCEPT,accept", "initiate,INITIATE,initiate",
287: "\naccept,accept,accept\n", // leading & trailing \n
288: "\naccept,accept,accept\n", // leading & trailing \n
289: "\naccept,initiate,accept\n", // leading & trailing \n
290: "\ninitiate\n,\raccept,initiate\n", // leading & trailing \n
291: "\naccept\n", // leading & trailing \n
292: "\naccept\n", // leading & trailing \n
293: "\taccept\t", // leading & trailing \t
294: "\taccept\t", // leading & trailing \r
295: "accept , initiate", // spaces
296: "accept\n,\ninitiate", // \n
297: "accept\t,\tinitiate", // \t
298: "accept\r,\rinitiate", // \r
299: "AccepT", // first & last upper case
300: "InitiatE", // first & last upper case
301: "Accept, initiatE" // first & last upper case
302: };
303:
304: for (String element : validActions) {
305: new ServicePermission("*", element);
306: }
307:
308: String[] invalidActions = new String[] { "accept initiate", // space
309: "accept\ninitiate", // delimiter \n
310: "accept\tinitiate", // delimiter \t
311: "accept\tinitiate", // delimiter \r
312: "accept, ", // ','
313: "accept,", // ','
314: " ,accept" // ','
315: };
316: for (String element : invalidActions) {
317: try {
318: new ServicePermission("*", element);
319: fail("No expected IllegalArgumentException for action: "
320: + element);
321: } catch (IllegalArgumentException e) {
322: }
323: }
324: }
325: }
|