View Javadoc

1   /*
2    *   Copyright (C) Christian Schulte, 2005-206
3    *   All rights reserved.
4    *
5    *   Redistribution and use in source and binary forms, with or without
6    *   modification, are permitted provided that the following conditions
7    *   are met:
8    *
9    *     o Redistributions of source code must retain the above copyright
10   *       notice, this list of conditions and the following disclaimer.
11   *
12   *     o Redistributions in binary form must reproduce the above copyright
13   *       notice, this list of conditions and the following disclaimer in
14   *       the documentation and/or other materials provided with the
15   *       distribution.
16   *
17   *   THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
18   *   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19   *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20   *   THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
21   *   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22   *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23   *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24   *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25   *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26   *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27   *
28   *   $JOMC: DefaultModelContextTest.java 4613 2012-09-22 10:07:08Z schulte $
29   *
30   */
31  package org.jomc.modlet.test;
32  
33  import java.io.File;
34  import java.io.FileOutputStream;
35  import java.io.IOException;
36  import java.io.OutputStream;
37  import java.net.URL;
38  import java.util.Properties;
39  import javax.xml.bind.JAXBContext;
40  import javax.xml.bind.Marshaller;
41  import javax.xml.bind.Unmarshaller;
42  import org.jomc.modlet.DefaultModelContext;
43  import org.jomc.modlet.DefaultModletProvider;
44  import org.jomc.modlet.Model;
45  import org.jomc.modlet.ModelException;
46  import org.jomc.modlet.Modlets;
47  import org.jomc.modlet.test.support.IllegalServicesModletProvider;
48  import org.jomc.modlet.test.support.ServicesNotFoundModletProvider;
49  import org.jomc.modlet.test.support.TestModelProcessor;
50  import org.jomc.modlet.test.support.TestModelProvider;
51  import org.jomc.modlet.test.support.TestModelValidator;
52  import org.jomc.modlet.test.support.TestModletProvider;
53  import org.junit.Test;
54  import org.w3c.dom.ls.LSResourceResolver;
55  import org.xml.sax.EntityResolver;
56  import static org.junit.Assert.assertEquals;
57  import static org.junit.Assert.assertFalse;
58  import static org.junit.Assert.assertNotNull;
59  import static org.junit.Assert.assertNull;
60  import static org.junit.Assert.assertTrue;
61  import static org.junit.Assert.fail;
62  
63  /**
64   * Test cases for class {@code org.jomc.modlet.DefaultModelContext}.
65   *
66   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 1.0
67   * @version $JOMC: DefaultModelContextTest.java 4613 2012-09-22 10:07:08Z schulte $
68   */
69  public class DefaultModelContextTest extends ModelContextTest
70  {
71  
72      private static final String MODLET_TEST_NS = "http://jomc.org/modlet/test";
73  
74      /** Creates a new {@code DefaultModelContextTest} instance. */
75      public DefaultModelContextTest()
76      {
77          super();
78      }
79  
80      /** {@inheritDoc} */
81      @Override
82      public DefaultModelContext getModelContext() throws ModelException
83      {
84          return (DefaultModelContext) super.getModelContext();
85      }
86  
87      /** {@inheritDoc} */
88      @Override
89      protected DefaultModelContext newModelContext()
90      {
91          return new DefaultModelContext();
92      }
93  
94      @Test
95      public final void testFindModlets() throws Exception
96      {
97          final File tmpFile = File.createTempFile( this.getClass().getName(), ".properties" );
98          tmpFile.deleteOnExit();
99  
100         final Properties properties = new Properties();
101         properties.setProperty( "org.jomc.modlet.ModletProvider.0", "DOES_NOT_EXIST" );
102         this.writePropertiesFile( properties, tmpFile );
103 
104         try
105         {
106             DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
107             DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
108             this.getModelContext().setPlatformProviderLocation( null );
109             this.getModelContext().setProviderLocation( null );
110 
111             this.getModelContext().findModlets();
112             fail( "Expected ModelException not thrown." );
113         }
114         catch ( final ModelException e )
115         {
116             assertNotNull( e.getMessage() );
117             System.out.println( e );
118         }
119 
120         properties.setProperty( "org.jomc.modlet.ModletProvider.0", "java.lang.Object" );
121         this.writePropertiesFile( properties, tmpFile );
122 
123         try
124         {
125             DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
126             DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
127             this.getModelContext().setPlatformProviderLocation( null );
128             this.getModelContext().setProviderLocation( null );
129 
130             this.getModelContext().findModlets();
131             fail( "Expected ModelException not thrown." );
132         }
133         catch ( final ModelException e )
134         {
135             assertNotNull( e.getMessage() );
136             System.out.println( e );
137         }
138 
139         properties.setProperty( "org.jomc.modlet.ModletProvider.0", TestModletProvider.class.getName() );
140         this.writePropertiesFile( properties, tmpFile );
141 
142         DefaultModelContext.setDefaultPlatformProviderLocation( tmpFile.getAbsolutePath() );
143         DefaultModelContext.setDefaultProviderLocation( "DOES_NOT_EXIST" );
144         this.getModelContext().setPlatformProviderLocation( null );
145         this.getModelContext().setProviderLocation( null );
146 
147         assertNotNull( this.getModelContext().findModlets().getModlet( TestModletProvider.class.getName() ) );
148         tmpFile.delete();
149 
150         try
151         {
152             DefaultModelContext.setDefaultPlatformProviderLocation( null );
153             DefaultModelContext.setDefaultProviderLocation( "META-INF/non-existent-services" );
154             this.getModelContext().setPlatformProviderLocation( null );
155             this.getModelContext().setProviderLocation( null );
156 
157             this.getModelContext().findModlets();
158             fail( "Expected ModelException not thrown." );
159         }
160         catch ( final ModelException e )
161         {
162             assertNotNull( e.getMessage() );
163             System.out.println( e );
164         }
165 
166         try
167         {
168             DefaultModelContext.setDefaultPlatformProviderLocation( null );
169             DefaultModelContext.setDefaultProviderLocation( "META-INF/illegal-services" );
170             this.getModelContext().setPlatformProviderLocation( null );
171             this.getModelContext().setProviderLocation( null );
172 
173             this.getModelContext().findModlets();
174             fail( "Expected ModelException not thrown." );
175         }
176         catch ( final ModelException e )
177         {
178             assertNotNull( e.getMessage() );
179             System.out.println( e );
180         }
181 
182         DefaultModelContext.setDefaultPlatformProviderLocation( null );
183         DefaultModelContext.setDefaultProviderLocation( null );
184         this.getModelContext().setPlatformProviderLocation( null );
185         this.getModelContext().setProviderLocation( null );
186         this.getModelContext().setModlets( null );
187 
188         this.getModelContext().setProviderLocation( "META-INF/illegal-services-modlet" );
189         Modlets modlets = this.getModelContext().findModlets();
190         assertNotNull( modlets );
191 
192         try
193         {
194             this.getModelContext().findModel( IllegalServicesModletProvider.class.getName() );
195             fail( "Expected ModelException not thrown." );
196         }
197         catch ( final ModelException e )
198         {
199             assertNotNull( e.getMessage() );
200             System.out.println( e.toString() );
201         }
202 
203         Model model = new Model();
204         model.setIdentifier( IllegalServicesModletProvider.class.getName() );
205 
206         try
207         {
208             this.getModelContext().processModel( model );
209             fail( "Expected ModelException not thrown." );
210         }
211         catch ( final ModelException e )
212         {
213             assertNotNull( e.getMessage() );
214             System.out.println( e.toString() );
215         }
216 
217         try
218         {
219             this.getModelContext().validateModel( model );
220             fail( "Expected ModelException not thrown." );
221         }
222         catch ( final ModelException e )
223         {
224             assertNotNull( e.getMessage() );
225             System.out.println( e.toString() );
226         }
227 
228         try
229         {
230             this.getModelContext().createMarshaller( model.getIdentifier() );
231             fail( "Expected ModelException not thrown." );
232         }
233         catch ( final ModelException e )
234         {
235             assertNotNull( e.getMessage() );
236             System.out.println( e.toString() );
237         }
238 
239         try
240         {
241             this.getModelContext().createUnmarshaller( model.getIdentifier() );
242             fail( "Expected ModelException not thrown." );
243         }
244         catch ( final ModelException e )
245         {
246             assertNotNull( e.getMessage() );
247             System.out.println( e.toString() );
248         }
249 
250         this.getModelContext().setProviderLocation( "META-INF/non-existent-services-modlet" );
251         this.getModelContext().setModlets( null );
252         modlets = this.getModelContext().findModlets();
253         assertNotNull( modlets );
254 
255         try
256         {
257             this.getModelContext().findModel( ServicesNotFoundModletProvider.class.getName() );
258             fail( "Expected ModelException not thrown." );
259         }
260         catch ( final ModelException e )
261         {
262             assertNotNull( e.getMessage() );
263             System.out.println( e.toString() );
264         }
265 
266         model = new Model();
267         model.setIdentifier( ServicesNotFoundModletProvider.class.getName() );
268 
269         try
270         {
271             this.getModelContext().processModel( model );
272             fail( "Expected ModelException not thrown." );
273         }
274         catch ( final ModelException e )
275         {
276             assertNotNull( e.getMessage() );
277             System.out.println( e.toString() );
278         }
279 
280         try
281         {
282             this.getModelContext().validateModel( model );
283             fail( "Expected ModelException not thrown." );
284         }
285         catch ( final ModelException e )
286         {
287             assertNotNull( e.getMessage() );
288             System.out.println( e.toString() );
289         }
290 
291         try
292         {
293             this.getModelContext().createMarshaller( model.getIdentifier() );
294             fail( "Expected ModelException not thrown." );
295         }
296         catch ( final ModelException e )
297         {
298             assertNotNull( e.getMessage() );
299             System.out.println( e.toString() );
300         }
301 
302         try
303         {
304             this.getModelContext().createUnmarshaller( model.getIdentifier() );
305             fail( "Expected ModelException not thrown." );
306         }
307         catch ( final ModelException e )
308         {
309             assertNotNull( e.getMessage() );
310             System.out.println( e.toString() );
311         }
312 
313         this.getModelContext().setProviderLocation( "META-INF/extended-services" );
314         this.getModelContext().setModlets( null );
315         modlets = this.getModelContext().findModlets();
316         assertNotNull( modlets );
317 
318         final TestModletProvider testModletProvider =
319             (TestModletProvider) this.getModelContext().getAttribute( TestModletProvider.class.getName() );
320 
321         assertNotNull( testModletProvider );
322         assertTrue( testModletProvider.isBooleanProperty() );
323         assertEquals( 'T', testModletProvider.getCharacterProperty() );
324         assertEquals( (byte) -1, testModletProvider.getByteProperty() );
325         assertEquals( (short) -1, testModletProvider.getShortProperty() );
326         assertEquals( -1, testModletProvider.getIntProperty() );
327         assertEquals( -1, testModletProvider.getLongProperty() );
328         assertEquals( -1, testModletProvider.getFloatProperty(), 0 );
329         assertEquals( -1, testModletProvider.getDoubleProperty(), 0 );
330         assertEquals( "TEST", testModletProvider.getStringProperty() );
331         assertEquals( new URL( "file:///tmp" ), testModletProvider.getUrlProperty() );
332         assertEquals( Thread.State.RUNNABLE, testModletProvider.getEnumProperty() );
333         assertNull( testModletProvider.getObjectProperty() );
334 
335         try
336         {
337             this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-1" );
338             this.getModelContext().setModlets( null );
339             this.getModelContext().findModlets();
340             fail( "Expected 'ModelException' not thrown." );
341         }
342         catch ( final ModelException e )
343         {
344             assertNotNull( e.getMessage() );
345             System.out.println( e.toString() );
346         }
347 
348         try
349         {
350             this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-2" );
351             this.getModelContext().setModlets( null );
352             this.getModelContext().findModlets();
353             fail( "Expected 'ModelException' not thrown." );
354         }
355         catch ( final ModelException e )
356         {
357             assertNotNull( e.getMessage() );
358             System.out.println( e.toString() );
359         }
360 
361         try
362         {
363             this.getModelContext().setProviderLocation( "META-INF/illegal-extended-services-3" );
364             this.getModelContext().setModlets( null );
365             this.getModelContext().findModlets();
366             fail( "Expected 'ModelException' not thrown." );
367         }
368         catch ( final ModelException e )
369         {
370             assertNotNull( e.getMessage() );
371             System.out.println( e.toString() );
372         }
373 
374         DefaultModelContext.setDefaultPlatformProviderLocation( null );
375         DefaultModelContext.setDefaultProviderLocation( null );
376         this.getModelContext().setPlatformProviderLocation( null );
377         this.getModelContext().setProviderLocation( null );
378     }
379 
380     @Test
381     public final void testFindModletsWithAttributes() throws Exception
382     {
383         final File tmpFile = File.createTempFile( this.getClass().getName(), ".properties" );
384         tmpFile.deleteOnExit();
385 
386         final Properties properties = new Properties();
387         properties.setProperty( "org.jomc.modlet.ModletProvider.0", "DOES_NOT_EXIST" );
388         this.writePropertiesFile( properties, tmpFile );
389 
390         try
391         {
392             DefaultModelContext.setDefaultPlatformProviderLocation( null );
393             DefaultModelContext.setDefaultProviderLocation( null );
394             this.getModelContext().setPlatformProviderLocation( null );
395             this.getModelContext().setProviderLocation( null );
396             this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
397                                                  tmpFile.getAbsolutePath() );
398 
399             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
400                                                  "DOES_NOT_EXIST" );
401 
402             this.getModelContext().findModlets();
403             fail( "Expected ModelException not thrown." );
404         }
405         catch ( final ModelException e )
406         {
407             assertNotNull( e.getMessage() );
408             System.out.println( e );
409         }
410 
411         properties.setProperty( "org.jomc.modlet.ModletProvider.0", "java.lang.Object" );
412         this.writePropertiesFile( properties, tmpFile );
413 
414         try
415         {
416             DefaultModelContext.setDefaultPlatformProviderLocation( null );
417             DefaultModelContext.setDefaultProviderLocation( null );
418             this.getModelContext().setPlatformProviderLocation( null );
419             this.getModelContext().setProviderLocation( null );
420             this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
421                                                  tmpFile.getAbsolutePath() );
422 
423             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
424                                                  "DOES_NOT_EXIST" );
425 
426             this.getModelContext().findModlets();
427             fail( "Expected ModelException not thrown." );
428         }
429         catch ( final ModelException e )
430         {
431             assertNotNull( e.getMessage() );
432             System.out.println( e );
433         }
434 
435         properties.setProperty( "org.jomc.modlet.ModletProvider.0", TestModletProvider.class.getName() );
436         this.writePropertiesFile( properties, tmpFile );
437 
438         DefaultModelContext.setDefaultPlatformProviderLocation( null );
439         DefaultModelContext.setDefaultProviderLocation( null );
440         this.getModelContext().setPlatformProviderLocation( null );
441         this.getModelContext().setProviderLocation( null );
442         this.getModelContext().setAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME,
443                                              tmpFile.getAbsolutePath() );
444 
445         this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
446                                              "DOES_NOT_EXIST" );
447 
448         assertNotNull( this.getModelContext().findModlets().getModlet( TestModletProvider.class.getName() ) );
449         tmpFile.delete();
450 
451         try
452         {
453             DefaultModelContext.setDefaultPlatformProviderLocation( null );
454             DefaultModelContext.setDefaultProviderLocation( null );
455             this.getModelContext().setPlatformProviderLocation( null );
456             this.getModelContext().setProviderLocation( null );
457             this.getModelContext().clearAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME );
458             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
459                                                  "META-INF/non-existent-services" );
460 
461             this.getModelContext().findModlets();
462             fail( "Expected ModelException not thrown." );
463         }
464         catch ( final ModelException e )
465         {
466             assertNotNull( e.getMessage() );
467             System.out.println( e );
468         }
469 
470         try
471         {
472             DefaultModelContext.setDefaultPlatformProviderLocation( null );
473             DefaultModelContext.setDefaultProviderLocation( null );
474             this.getModelContext().setPlatformProviderLocation( null );
475             this.getModelContext().setProviderLocation( null );
476             this.getModelContext().clearAttribute( DefaultModelContext.PLATFORM_PROVIDER_LOCATION_ATTRIBUTE_NAME );
477             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
478                                                  "META-INF/illegal-services" );
479 
480             this.getModelContext().findModlets();
481             fail( "Expected ModelException not thrown." );
482         }
483         catch ( final ModelException e )
484         {
485             assertNotNull( e.getMessage() );
486             System.out.println( e );
487         }
488 
489         DefaultModelContext.setDefaultPlatformProviderLocation( null );
490         DefaultModelContext.setDefaultProviderLocation( null );
491         this.getModelContext().setPlatformProviderLocation( null );
492         this.getModelContext().setProviderLocation( null );
493         this.getModelContext().setModlets( null );
494         this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
495                                              "META-INF/illegal-services-modlet" );
496 
497         Modlets modlets = this.getModelContext().findModlets();
498         assertNotNull( modlets );
499 
500         try
501         {
502             this.getModelContext().findModel( IllegalServicesModletProvider.class.getName() );
503             fail( "Expected ModelException not thrown." );
504         }
505         catch ( final ModelException e )
506         {
507             assertNotNull( e.getMessage() );
508             System.out.println( e.toString() );
509         }
510 
511         Model model = new Model();
512         model.setIdentifier( IllegalServicesModletProvider.class.getName() );
513 
514         try
515         {
516             this.getModelContext().processModel( model );
517             fail( "Expected ModelException not thrown." );
518         }
519         catch ( final ModelException e )
520         {
521             assertNotNull( e.getMessage() );
522             System.out.println( e.toString() );
523         }
524 
525         try
526         {
527             this.getModelContext().validateModel( model );
528             fail( "Expected ModelException not thrown." );
529         }
530         catch ( final ModelException e )
531         {
532             assertNotNull( e.getMessage() );
533             System.out.println( e.toString() );
534         }
535 
536         try
537         {
538             this.getModelContext().createMarshaller( model.getIdentifier() );
539             fail( "Expected ModelException not thrown." );
540         }
541         catch ( final ModelException e )
542         {
543             assertNotNull( e.getMessage() );
544             System.out.println( e.toString() );
545         }
546 
547         try
548         {
549             this.getModelContext().createUnmarshaller( model.getIdentifier() );
550             fail( "Expected ModelException not thrown." );
551         }
552         catch ( final ModelException e )
553         {
554             assertNotNull( e.getMessage() );
555             System.out.println( e.toString() );
556         }
557 
558         this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
559                                              "META-INF/non-existent-services-modlet" );
560 
561         this.getModelContext().setProviderLocation( null );
562         this.getModelContext().setModlets( null );
563         modlets = this.getModelContext().findModlets();
564         assertNotNull( modlets );
565 
566         try
567         {
568             this.getModelContext().findModel( ServicesNotFoundModletProvider.class.getName() );
569             fail( "Expected ModelException not thrown." );
570         }
571         catch ( final ModelException e )
572         {
573             assertNotNull( e.getMessage() );
574             System.out.println( e.toString() );
575         }
576 
577         model = new Model();
578         model.setIdentifier( ServicesNotFoundModletProvider.class.getName() );
579 
580         try
581         {
582             this.getModelContext().processModel( model );
583             fail( "Expected ModelException not thrown." );
584         }
585         catch ( final ModelException e )
586         {
587             assertNotNull( e.getMessage() );
588             System.out.println( e.toString() );
589         }
590 
591         try
592         {
593             this.getModelContext().validateModel( model );
594             fail( "Expected ModelException not thrown." );
595         }
596         catch ( final ModelException e )
597         {
598             assertNotNull( e.getMessage() );
599             System.out.println( e.toString() );
600         }
601 
602         try
603         {
604             this.getModelContext().createMarshaller( model.getIdentifier() );
605             fail( "Expected ModelException not thrown." );
606         }
607         catch ( final ModelException e )
608         {
609             assertNotNull( e.getMessage() );
610             System.out.println( e.toString() );
611         }
612 
613         try
614         {
615             this.getModelContext().createUnmarshaller( model.getIdentifier() );
616             fail( "Expected ModelException not thrown." );
617         }
618         catch ( final ModelException e )
619         {
620             assertNotNull( e.getMessage() );
621             System.out.println( e.toString() );
622         }
623 
624         this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
625                                              "META-INF/extended-services" );
626 
627         this.getModelContext().setProviderLocation( null );
628         this.getModelContext().setModlets( null );
629         modlets = this.getModelContext().findModlets();
630         assertNotNull( modlets );
631 
632         final TestModletProvider testModletProvider =
633             (TestModletProvider) this.getModelContext().getAttribute( TestModletProvider.class.getName() );
634 
635         assertNotNull( testModletProvider );
636         assertTrue( testModletProvider.isBooleanProperty() );
637         assertEquals( 'T', testModletProvider.getCharacterProperty() );
638         assertEquals( (byte) -1, testModletProvider.getByteProperty() );
639         assertEquals( (short) -1, testModletProvider.getShortProperty() );
640         assertEquals( -1, testModletProvider.getIntProperty() );
641         assertEquals( -1, testModletProvider.getLongProperty() );
642         assertEquals( -1, testModletProvider.getFloatProperty(), 0 );
643         assertEquals( -1, testModletProvider.getDoubleProperty(), 0 );
644         assertEquals( "TEST", testModletProvider.getStringProperty() );
645         assertEquals( new URL( "file:///tmp" ), testModletProvider.getUrlProperty() );
646         assertEquals( Thread.State.RUNNABLE, testModletProvider.getEnumProperty() );
647         assertNull( testModletProvider.getObjectProperty() );
648 
649         try
650         {
651             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
652                                                  "META-INF/illegal-extended-services-1" );
653 
654             this.getModelContext().setProviderLocation( null );
655             this.getModelContext().setModlets( null );
656             this.getModelContext().findModlets();
657             fail( "Expected 'ModelException' not thrown." );
658         }
659         catch ( final ModelException e )
660         {
661             assertNotNull( e.getMessage() );
662             System.out.println( e.toString() );
663         }
664 
665         try
666         {
667             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
668                                                  "META-INF/illegal-extended-services-2" );
669 
670             this.getModelContext().setProviderLocation( null );
671             this.getModelContext().setModlets( null );
672             this.getModelContext().findModlets();
673             fail( "Expected 'ModelException' not thrown." );
674         }
675         catch ( final ModelException e )
676         {
677             assertNotNull( e.getMessage() );
678             System.out.println( e.toString() );
679         }
680 
681         try
682         {
683             this.getModelContext().setAttribute( DefaultModelContext.PROVIDER_LOCATION_ATTRIBUTE_NAME,
684                                                  "META-INF/illegal-extended-services-3" );
685 
686             this.getModelContext().setProviderLocation( null );
687             this.getModelContext().setModlets( null );
688             this.getModelContext().findModlets();
689             fail( "Expected 'ModelException' not thrown." );
690         }
691         catch ( final ModelException e )
692         {
693             assertNotNull( e.getMessage() );
694             System.out.println( e.toString() );
695         }
696 
697         DefaultModelContext.setDefaultPlatformProviderLocation( null );
698         DefaultModelContext.setDefaultProviderLocation( null );
699         this.getModelContext().setPlatformProviderLocation( null );
700         this.getModelContext().setProviderLocation( null );
701     }
702 
703     @Test
704     public final void testGetDefaultProviderLocation() throws Exception
705     {
706         System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation" );
707         DefaultModelContext.setDefaultProviderLocation( null );
708         assertEquals( "META-INF/services", DefaultModelContext.getDefaultProviderLocation() );
709         DefaultModelContext.setDefaultProviderLocation( null );
710         System.setProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation", "TEST" );
711         assertEquals( "TEST", DefaultModelContext.getDefaultProviderLocation() );
712         System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultProviderLocation" );
713         DefaultModelContext.setDefaultProviderLocation( null );
714         assertEquals( "META-INF/services", DefaultModelContext.getDefaultProviderLocation() );
715     }
716 
717     @Test
718     public final void testGetDefaultPlatformProviderLocation() throws Exception
719     {
720         System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation" );
721         DefaultModelContext.setDefaultPlatformProviderLocation( null );
722         assertNotNull( DefaultModelContext.getDefaultPlatformProviderLocation() );
723         DefaultModelContext.setDefaultPlatformProviderLocation( null );
724         System.setProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation", "TEST" );
725         assertEquals( "TEST", DefaultModelContext.getDefaultPlatformProviderLocation() );
726         System.clearProperty( "org.jomc.modlet.DefaultModelContext.defaultPlatformProviderLocation" );
727         DefaultModelContext.setDefaultPlatformProviderLocation( null );
728         assertNotNull( DefaultModelContext.getDefaultPlatformProviderLocation() );
729     }
730 
731     @Test
732     public final void testGetProviderLocation() throws Exception
733     {
734         DefaultModelContext.setDefaultProviderLocation( null );
735         this.getModelContext().setProviderLocation( null );
736         assertNotNull( this.getModelContext().getProviderLocation() );
737 
738         DefaultModelContext.setDefaultProviderLocation( "TEST" );
739         this.getModelContext().setProviderLocation( null );
740         assertEquals( "TEST", this.getModelContext().getProviderLocation() );
741 
742         DefaultModelContext.setDefaultProviderLocation( null );
743         this.getModelContext().setProviderLocation( null );
744     }
745 
746     @Test
747     public final void testGetPlatformProviderLocation() throws Exception
748     {
749         DefaultModelContext.setDefaultPlatformProviderLocation( null );
750         this.getModelContext().setPlatformProviderLocation( null );
751         assertNotNull( this.getModelContext().getPlatformProviderLocation() );
752 
753         DefaultModelContext.setDefaultPlatformProviderLocation( "TEST" );
754         this.getModelContext().setPlatformProviderLocation( null );
755         assertEquals( "TEST", this.getModelContext().getPlatformProviderLocation() );
756 
757         DefaultModelContext.setDefaultPlatformProviderLocation( null );
758         this.getModelContext().setPlatformProviderLocation( null );
759     }
760 
761     @Test
762     public final void testFindTestModel() throws Exception
763     {
764         final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
765 
766         assertNotNull( model );
767         assertEquals( MODLET_TEST_NS, model.getIdentifier() );
768         assertNotNull( this.getModelContext().getAttribute( TestModelProvider.class.getName() ) );
769         assertNotNull( model.getAnyObject( TestComplexType.class ) );
770     }
771 
772     @Test
773     public final void testProcessTestModel() throws Exception
774     {
775         Model model = this.getModelContext().findModel( MODLET_TEST_NS );
776 
777         assertNotNull( model );
778         assertEquals( MODLET_TEST_NS, model.getIdentifier() );
779 
780         model = this.getModelContext().processModel( model );
781         assertNotNull( this.getModelContext().getAttribute( TestModelProcessor.class.getName() ) );
782         assertNotNull( model.getAnyObject( TestComplexType.class ) );
783         assertFalse( model.getAnyObject( TestComplexType.class ).getAny().isEmpty() );
784     }
785 
786     @Test
787     public final void testValidateTestModel() throws Exception
788     {
789         final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
790         assertNotNull( model );
791         assertEquals( MODLET_TEST_NS, model.getIdentifier() );
792 
793         this.getModelContext().validateModel( model );
794         assertNotNull( this.getModelContext().getAttribute( TestModelValidator.class.getName() ) );
795     }
796 
797     @Test
798     public final void testTestModel() throws Exception
799     {
800         this.getModelContext().setModlets( null );
801         final Model model = this.getModelContext().findModel( MODLET_TEST_NS );
802         assertNotNull( model );
803         assertEquals( MODLET_TEST_NS, model.getIdentifier() );
804 
805         try
806         {
807             this.getModelContext().createSchema( MODLET_TEST_NS );
808             fail( "Expected ModelException not thrown." );
809         }
810         catch ( final ModelException e )
811         {
812             assertNotNull( e.getMessage() );
813             System.out.println( e.toString() );
814         }
815 
816         this.getModelContext().setModlets( null );
817         final JAXBContext context = this.getModelContext().createContext( MODLET_TEST_NS );
818         assertNotNull( context );
819 
820         this.getModelContext().setModlets( null );
821         final EntityResolver entityResolver = this.getModelContext().createEntityResolver( MODLET_TEST_NS );
822         assertNotNull( entityResolver );
823 
824         this.getModelContext().setModlets( null );
825         final Marshaller marshaller = this.getModelContext().createMarshaller( MODLET_TEST_NS );
826         assertNotNull( marshaller );
827 
828         this.getModelContext().setModlets( null );
829         final LSResourceResolver resourceResolver = this.getModelContext().createResourceResolver( MODLET_TEST_NS );
830         assertNotNull( resourceResolver );
831 
832         this.getModelContext().setModlets( null );
833         final Unmarshaller unmarshaller = this.getModelContext().createUnmarshaller( MODLET_TEST_NS );
834         assertNotNull( unmarshaller );
835 
836         final File tmpFile = File.createTempFile( this.getClass().getSimpleName(), ".xml" );
837         marshaller.marshal( new org.jomc.modlet.ObjectFactory().createModel( model ), tmpFile );
838         assertNotNull( unmarshaller.unmarshal( tmpFile ) );
839         assertTrue( tmpFile.delete() );
840     }
841 
842     @Test
843     public final void testServiceProperties() throws Exception
844     {
845         this.getModelContext().setModlets( null );
846         DefaultModletProvider.setDefaultModletLocation( "META-INF/properties-test/jomc-modlet.xml" );
847 
848         this.getModelContext().setModlets( null );
849         final JAXBContext context = this.getModelContext().createContext( MODLET_TEST_NS );
850         assertNotNull( context );
851 
852         this.getModelContext().setModlets( null );
853         final EntityResolver entityResolver = this.getModelContext().createEntityResolver( MODLET_TEST_NS );
854         assertNotNull( entityResolver );
855 
856         this.getModelContext().setModlets( null );
857         final LSResourceResolver resourceResolver = this.getModelContext().createResourceResolver( MODLET_TEST_NS );
858         assertNotNull( resourceResolver );
859 
860         try
861         {
862             this.getModelContext().setModlets( null );
863             this.getModelContext().createMarshaller( MODLET_TEST_NS );
864             fail( "Expected 'ModelException' not thrown." );
865         }
866         catch ( final ModelException e )
867         {
868             System.out.println( e.toString() );
869             assertNotNull( e.getMessage() );
870         }
871 
872         try
873         {
874             this.getModelContext().setModlets( null );
875             this.getModelContext().createUnmarshaller( MODLET_TEST_NS );
876             fail( "Expected 'ModelException' not thrown." );
877         }
878         catch ( final ModelException e )
879         {
880             System.out.println( e.toString() );
881             assertNotNull( e.getMessage() );
882         }
883 
884         try
885         {
886             this.getModelContext().setModlets( null );
887             this.getModelContext().findModel( MODLET_TEST_NS );
888             fail( "Expected 'ModelException' not thrown." );
889         }
890         catch ( final ModelException e )
891         {
892             System.out.println( e.toString() );
893             assertNotNull( e.getMessage() );
894         }
895 
896         final Model model = new Model();
897         model.setIdentifier( MODLET_TEST_NS );
898 
899         try
900         {
901             this.getModelContext().setModlets( null );
902             this.getModelContext().findModel( model );
903             fail( "Expected 'ModelException' not thrown." );
904         }
905         catch ( final ModelException e )
906         {
907             System.out.println( e.toString() );
908             assertNotNull( e.getMessage() );
909         }
910 
911         try
912         {
913             this.getModelContext().setModlets( null );
914             this.getModelContext().processModel( model );
915             fail( "Expected 'ModelException' not thrown." );
916         }
917         catch ( final ModelException e )
918         {
919             System.out.println( e.toString() );
920             assertNotNull( e.getMessage() );
921         }
922 
923         try
924         {
925             this.getModelContext().setModlets( null );
926             this.getModelContext().validateModel( model );
927             fail( "Expected 'ModelException' not thrown." );
928         }
929         catch ( final ModelException e )
930         {
931             System.out.println( e.toString() );
932             assertNotNull( e.getMessage() );
933         }
934 
935         DefaultModletProvider.setDefaultModletLocation( null );
936     }
937 
938     private void writePropertiesFile( final Properties properties, final File file ) throws IOException
939     {
940         OutputStream out = null;
941         boolean suppressExceptionOnClose = true;
942 
943         try
944         {
945             out = new FileOutputStream( file );
946             properties.store( out, this.getClass().getName() );
947             suppressExceptionOnClose = false;
948         }
949         finally
950         {
951             try
952             {
953                 if ( out != null )
954                 {
955                     out.close();
956                 }
957             }
958             catch ( final IOException e )
959             {
960                 if ( !suppressExceptionOnClose )
961                 {
962                     throw e;
963                 }
964             }
965         }
966     }
967 
968 }