1 /*
2 * Copyright (C) The Spice Group. All rights reserved.
3 *
4 * This software is published under the terms of the Spice
5 * Software License version 1.1, a copy of which has been included
6 * with this distribution in the LICENSE.txt file.
7 */
8 package org.codehaus.spice.xmlpolicy.builder;
9
10 import java.net.URL;
11 import java.security.AllPermission;
12 import java.security.CodeSource;
13 import java.security.PermissionCollection;
14 import java.security.Policy;
15 import java.security.UnresolvedPermission;
16 import java.security.cert.Certificate;
17 import java.util.Enumeration;
18 import java.io.FilePermission;
19 import junit.framework.TestCase;
20 import org.codehaus.spice.xmlpolicy.metadata.GrantMetaData;
21 import org.codehaus.spice.xmlpolicy.metadata.KeyStoreMetaData;
22 import org.codehaus.spice.xmlpolicy.metadata.PermissionMetaData;
23 import org.codehaus.spice.xmlpolicy.metadata.PolicyMetaData;
24
25 /***
26 * TestCase for Builder package.
27 *
28 * @author Peter Donald
29 */
30 public class BuilderTestCase
31 extends TestCase
32 {
33 public BuilderTestCase( final String name )
34 {
35 super( name );
36 }
37
38 public void testEmptyMetaData()
39 throws Exception
40 {
41 final PolicyBuilder builder = new PolicyBuilder();
42 final PolicyMetaData metaData =
43 new PolicyMetaData( new KeyStoreMetaData[ 0 ], new GrantMetaData[ 0 ] );
44 final TestResolver resolver = new TestResolver();
45 try
46 {
47 final Policy policy = builder.buildPolicy( metaData, resolver );
48 final PermissionCollection permissions =
49 policy.getPermissions( new CodeSource( null, new Certificate[ 0 ] ) );
50 assertEquals( "Expect no permissions for empty metaData",
51 false,
52 permissions.elements().hasMoreElements() );
53 }
54 catch( final Exception e )
55 {
56 fail( "Expected to be able to build Policy with empty metadata" );
57 }
58 }
59
60 public void testNullResolverInBuildPolicy()
61 throws Exception
62 {
63 final PolicyBuilder builder = new PolicyBuilder();
64 final PolicyMetaData metaData =
65 new PolicyMetaData( new KeyStoreMetaData[ 0 ], new GrantMetaData[ 0 ] );
66 try
67 {
68 builder.buildPolicy( metaData, null );
69 fail( "Expected to fail due to null pointer in buildPolicy" );
70 }
71 catch( final NullPointerException npe )
72 {
73 assertEquals( "NPE message",
74 "resolver",
75 npe.getMessage() );
76 }
77 }
78
79 public void testNullMetaDataInBuildPolicy()
80 throws Exception
81 {
82 final PolicyBuilder builder = new PolicyBuilder();
83 try
84 {
85 builder.buildPolicy( null, new TestResolver() );
86 fail( "Expected to fail due to null pointer in buildPolicy" );
87 }
88 catch( final NullPointerException npe )
89 {
90 assertEquals( "NPE message",
91 "policy",
92 npe.getMessage() );
93 }
94
95 }
96
97 public void testMetaDataWithAPermission()
98 throws Exception
99 {
100 final PolicyBuilder builder = new PolicyBuilder();
101 final PermissionMetaData permission =
102 new PermissionMetaData( AllPermission.class.getName(), null, null, null, null );
103 final GrantMetaData grant =
104 new GrantMetaData( "file:/", null, null,
105 new PermissionMetaData[]{permission} );
106 final PolicyMetaData metaData =
107 new PolicyMetaData( new KeyStoreMetaData[ 0 ], new GrantMetaData[]{grant} );
108 final TestResolver resolver = new TestResolver();
109 try
110 {
111 final Policy policy = builder.buildPolicy( metaData, resolver );
112 final CodeSource codesource =
113 new CodeSource( new URL( "file:/" ), new Certificate[ 0 ] );
114 final PermissionCollection permissions = policy.getPermissions( codesource );
115 final Enumeration enumeration = permissions.elements();
116 while( enumeration.hasMoreElements() )
117 {
118 final Object perm = enumeration.nextElement();
119 if( perm instanceof AllPermission )
120 {
121 return;
122 }
123 }
124 fail( "Expected to get permission set with ALlPermission contained" );
125 }
126 catch( final Exception e )
127 {
128 fail( "Expected to be able to build Policy with empty metadata" );
129 }
130 }
131
132 public void testMetaDataWithAPermissionAndCerts()
133 throws Exception
134 {
135 final PolicyBuilder builder = new TestPolicyBuilder();
136 final PermissionMetaData permission =
137 new PermissionMetaData( FilePermission.class.getName(), "/", "read",
138 null, null );
139 final GrantMetaData grant =
140 new GrantMetaData( "file:/", "jenny", "default",
141 new PermissionMetaData[]{permission} );
142 final KeyStoreMetaData keyStore =
143 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
144 final PolicyMetaData metaData =
145 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
146 final TestResolver resolver = new TestResolver();
147 final Policy policy = builder.buildPolicy( metaData, resolver );
148 final CodeSource codesource =
149 new CodeSource( new URL( "file:/" ), new Certificate[]{MockCertificate.JENNY_CERTIFICATE} );
150 final PermissionCollection permissions = policy.getPermissions( codesource );
151 final Enumeration enumeration = permissions.elements();
152 while( enumeration.hasMoreElements() )
153 {
154 final Object perm = enumeration.nextElement();
155 if( perm instanceof FilePermission )
156 {
157 return;
158 }
159 }
160 fail( "Expected to get permission set with ALlPermission contained" );
161 }
162
163 public void testMetaDataWithAPermissionAndMultipleCerts()
164 throws Exception
165 {
166 final PolicyBuilder builder = new TestPolicyBuilder();
167 final PermissionMetaData permission =
168 new PermissionMetaData( RuntimePermission.class.getName(), "getFactory", null,
169 null, null );
170 final GrantMetaData grant =
171 new GrantMetaData( "file:/", "jenny,mischelle,jenny", "default",
172 new PermissionMetaData[]{permission} );
173 final KeyStoreMetaData keyStore =
174 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
175 final PolicyMetaData metaData =
176 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
177 final TestResolver resolver = new TestResolver();
178 final Policy policy = builder.buildPolicy( metaData, resolver );
179 final CodeSource codesource =
180 new CodeSource( new URL( "file:/" ), new Certificate[]{MockCertificate.JENNY_CERTIFICATE} );
181 final PermissionCollection permissions = policy.getPermissions( codesource );
182 final Enumeration enumeration = permissions.elements();
183 while( enumeration.hasMoreElements() )
184 {
185 final Object perm = enumeration.nextElement();
186 if( perm instanceof RuntimePermission )
187 {
188 return;
189 }
190 }
191 fail( "Expected to get permission set with ALlPermission contained" );
192 }
193
194 public void testMetaDataWithAPermissionAndCertsAndUnResolverPerm()
195 throws Exception
196 {
197 final PolicyBuilder builder = new TestPolicyBuilder();
198 final PermissionMetaData permission =
199 new PermissionMetaData( AllPermission.class.getName(), null, null,
200 "jenny", "default" );
201 final GrantMetaData grant =
202 new GrantMetaData( "file:/", "jenny", "default",
203 new PermissionMetaData[]{permission} );
204 final KeyStoreMetaData keyStore =
205 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
206 final PolicyMetaData metaData =
207 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
208 final TestResolver resolver = new TestResolver();
209 final Policy policy = builder.buildPolicy( metaData, resolver );
210 final CodeSource codesource =
211 new CodeSource( new URL( "file:/" ), new Certificate[]{MockCertificate.JENNY_CERTIFICATE} );
212 final PermissionCollection permissions = policy.getPermissions( codesource );
213 final Enumeration enumeration = permissions.elements();
214 while( enumeration.hasMoreElements() )
215 {
216 final Object perm = enumeration.nextElement();
217 if( perm instanceof UnresolvedPermission )
218 {
219 return;
220 }
221 }
222 fail( "Expected to get permission set with UnresolvedPermission contained" );
223 }
224
225 public void testMetaDataWithAPermissionAndCertsAndMisnamedPerm()
226 throws Exception
227 {
228 final PolicyBuilder builder = new TestPolicyBuilder();
229 final PermissionMetaData permission =
230 new PermissionMetaData( AllPermission.class.getName() + "sss", null, null,
231 null, null );
232 final GrantMetaData grant =
233 new GrantMetaData( "file:/", "jenny", "default",
234 new PermissionMetaData[]{permission} );
235 final KeyStoreMetaData keyStore =
236 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
237 final PolicyMetaData metaData =
238 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
239 final TestResolver resolver = new TestResolver();
240 final Policy policy = builder.buildPolicy( metaData, resolver );
241 final CodeSource codesource =
242 new CodeSource( new URL( "file:/" ), new Certificate[]{MockCertificate.JENNY_CERTIFICATE} );
243 final PermissionCollection permissions = policy.getPermissions( codesource );
244 final Enumeration enumeration = permissions.elements();
245 while( enumeration.hasMoreElements() )
246 {
247 final Object perm = enumeration.nextElement();
248 if( perm instanceof UnresolvedPermission )
249 {
250 return;
251 }
252 }
253 fail( "Expected to get permission set with UnresolvedPermission contained" );
254 }
255
256 public void testFailureWhenCreatingKeyStore()
257 throws Exception
258 {
259 final PolicyBuilder builder = new TestPolicyBuilder();
260 final PermissionMetaData permission =
261 new PermissionMetaData( AllPermission.class.getName() + "sss", null, null,
262 null, null );
263 final GrantMetaData grant =
264 new GrantMetaData( "file:/", "jenny", "default",
265 new PermissionMetaData[]{permission} );
266 final KeyStoreMetaData keyStore =
267 new KeyStoreMetaData( "default", "http://spice.sourceforge.net/NoExist", "DoDgY" );
268 final PolicyMetaData metaData =
269 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
270 final TestResolver resolver = new TestResolver();
271 try
272 {
273 builder.buildPolicy( metaData, resolver );
274 fail( "Expected to fail when creating policy as unable to create store" );
275 }
276 catch( Exception e )
277 {
278 }
279 }
280
281 public void testFailureRetrievingCertForAlias()
282 throws Exception
283 {
284 final PolicyBuilder builder = new TestNoInitPolicyBuilder();
285 final PermissionMetaData permission =
286 new PermissionMetaData( AllPermission.class.getName() + "sss", null, null,
287 null, null );
288 final GrantMetaData grant =
289 new GrantMetaData( "file:/", "peter", "default",
290 new PermissionMetaData[]{permission} );
291 final KeyStoreMetaData keyStore =
292 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
293 final PolicyMetaData metaData =
294 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
295 final TestResolver resolver = new TestResolver();
296 try
297 {
298 builder.buildPolicy( metaData, resolver );
299 fail( "Expected to fail when creating policy as unable to create store" );
300 }
301 catch( Exception e )
302 {
303 }
304 }
305
306 public void testAliasNoExist()
307 throws Exception
308 {
309 final PolicyBuilder builder = new TestPolicyBuilder();
310 final PermissionMetaData permission =
311 new PermissionMetaData( AllPermission.class.getName() + "sss", null, null,
312 null, null );
313 final GrantMetaData grant =
314 new GrantMetaData( "file:/", "peter", "default",
315 new PermissionMetaData[]{permission} );
316 final KeyStoreMetaData keyStore =
317 new KeyStoreMetaData( "default", "http://spice.sourceforge.net", "DoDgY" );
318 final PolicyMetaData metaData =
319 new PolicyMetaData( new KeyStoreMetaData[]{keyStore}, new GrantMetaData[]{grant} );
320 final TestResolver resolver = new TestResolver();
321 try
322 {
323 builder.buildPolicy( metaData, resolver );
324 fail( "Expected to fail when creating policy as unable to load alias" );
325 }
326 catch( Exception e )
327 {
328 }
329 }
330
331 public void testNoKeyStore()
332 throws Exception
333 {
334 final PolicyBuilder builder = new TestPolicyBuilder();
335 final PermissionMetaData permission =
336 new PermissionMetaData( AllPermission.class.getName(), null, null,
337 null, null );
338 final GrantMetaData grant =
339 new GrantMetaData( "file:/", "peter", "default",
340 new PermissionMetaData[]{permission} );
341 final PolicyMetaData metaData =
342 new PolicyMetaData( new KeyStoreMetaData[]{}, new GrantMetaData[]{grant} );
343 final TestResolver resolver = new TestResolver();
344 try
345 {
346 builder.buildPolicy( metaData, resolver );
347 fail( "Expected to fail when creating policy as missing keystore" );
348 }
349 catch( Exception e )
350 {
351 }
352 }
353 }
This page was automatically generated by Maven