View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.mail.resolver;
18  
19  import junit.framework.TestCase;
20  import org.apache.commons.io.IOUtils;
21  import org.apache.commons.mail.DataSourceResolver;
22  
23  import javax.activation.DataSource;
24  import java.io.IOException;
25  import java.io.InputStream;
26  import java.net.URL;
27  
28  /**
29   * JUnit test case for DateSourceResolver.
30   *
31   * @since 1.3
32   */
33  public class DataSourceCompositeResolverTest extends TestCase
34  {
35      public DataSourceCompositeResolverTest(String name)
36      {
37          super(name);
38      }
39  
40      public void testResolvingFilesLenient() throws Exception
41      {
42          DataSourceResolver urlResolver = new DataSourceUrlResolver(new URL("http://www.apache.org"), false);
43          DataSourceResolver classPathResolver = new DataSourceClassPathResolver("/images", false);
44          DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[] { urlResolver, classPathResolver };
45          DataSourceResolver dataSourceResolver = new DataSourceCompositeResolver(dataSourceResolvers, true);
46  
47          // resolve using HTTP
48          assertTrue(toByteArray(dataSourceResolver.resolve("/images/feather-small.gif")).length > 0);
49  
50          // resolve using class path
51          assertTrue(toByteArray(dataSourceResolver.resolve("/contentTypeTest.gif")).length > 0);
52      }
53  
54      public void testResolvingFilesNonLenient() throws Exception
55      {
56          DataSourceResolver urlResolver = new DataSourceUrlResolver(new URL("http://www.apache.org"), false);
57          DataSourceResolver classPathResolver = new DataSourceClassPathResolver("/images", false);
58          DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[] { urlResolver, classPathResolver };
59          DataSourceResolver dataSourceResolver = new DataSourceCompositeResolver(dataSourceResolvers, false);
60  
61          try
62          {
63              dataSourceResolver.resolve("./image/does-not-exist.gif");
64              fail("Expected an IOException");
65          }
66          catch(IOException e)
67          {
68              // expected
69              return;
70          }
71      }
72  
73      public void testExternalModification() throws Exception
74      {
75          DataSourceResolver urlResolver = new DataSourceUrlResolver(new URL("http://www.apache.org"), false);
76          DataSourceResolver classPathResolver = new DataSourceClassPathResolver("/images", false);
77          DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[] { urlResolver, classPathResolver };
78          DataSourceCompositeResolver dataSourceResolver = new DataSourceCompositeResolver(dataSourceResolvers, true);
79  
80          DataSourceResolver[] arr = dataSourceResolver.getDataSourceResolvers();
81          
82          // modify an element in the returned array
83          arr[0] = null;
84          
85          DataSourceResolver[] arr2 = dataSourceResolver.getDataSourceResolvers();
86          
87          // assert that the external modification is not propagated to the internal array
88          assertNotNull(arr2[0]);        
89      }
90  
91      private byte[] toByteArray(DataSource dataSource) throws IOException
92      {
93          if(dataSource != null)
94          {
95              InputStream is = dataSource.getInputStream();
96              return IOUtils.toByteArray(is);
97          }
98          else
99          {
100             return null;
101         }
102     }
103 }