1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.jsieve.util.check;
21  
22  import java.util.List;
23  
24  import junit.framework.TestCase;
25  
26  import org.apache.jsieve.javaxmail.MockMimeMessage;
27  
28  public class ScriptCheckMailAdapterHeadersTest extends TestCase {
29      private static final String BCC = "Bcc";
30  
31      private static final String TO = "To";
32  
33      private static final String FROM = "From";
34  
35      private static final int MESSAGE_SIZE = 100;
36  
37      private static final String BCC_ADDRESS_ONE = "bugs@toons.example.org";
38  
39      private static final String BCC_ADDRESS_TWO = "daffy@toons.example.org";
40  
41      private static final String TO_ADDRESS = "roadrunner@acme.example.com";
42  
43      private static final String X_HEADER_NAME = "X-Toon";
44  
45      private static final String X_HEADER_WITH_WS = "   "
46              + X_HEADER_NAME.toLowerCase();
47  
48      private static final String X_HEADER_VALUE = "Road Runner";
49  
50      private static final String X_HEADER_VALUE_ALT = "Wile E. Coyote And Road Runner";
51  
52      private static final String FROM_ADDRESS = "coyote@desert.example.org";
53  
54      ScriptCheckMailAdapter adapter;
55  
56      MockMimeMessage message;
57  
58      protected void setUp() throws Exception {
59          super.setUp();
60          adapter = new ScriptCheckMailAdapter();
61          message = new MockMimeMessage();
62          message.addHeader(FROM, FROM_ADDRESS);
63          message.addHeader(TO, TO_ADDRESS);
64          message.addHeader(BCC, BCC_ADDRESS_ONE);
65          message.addHeader(BCC, BCC_ADDRESS_TWO);
66          message.addHeader(X_HEADER_NAME, X_HEADER_VALUE);
67          message.addHeader(X_HEADER_NAME.toLowerCase(), X_HEADER_VALUE
68                  .toLowerCase());
69          message.addHeader(X_HEADER_WITH_WS, X_HEADER_VALUE_ALT);
70          message.setSize(MESSAGE_SIZE);
71          adapter.setMail(message);
72      }
73  
74      public void testGetHeader() throws Exception {
75          List<String> headers = adapter.getHeader(FROM);
76          assertNotNull(headers);
77          assertEquals("From header", 1, headers.size());
78          assertEquals("From header", FROM_ADDRESS, headers.get(0));
79          headers = adapter.getHeader(BCC);
80          assertEquals("Bcc headers", 2, headers.size());
81          assertTrue("Bcc headers", headers.contains(BCC_ADDRESS_ONE));
82          assertTrue("Bcc headers", headers.contains(BCC_ADDRESS_TWO));
83          headers = adapter.getHeader(X_HEADER_NAME);
84          assertEquals("Case and whitespace sensitive", 1, headers.size());
85          assertEquals("Case and whitespace sensitive", X_HEADER_VALUE, headers
86                  .get(0));
87          headers = adapter.getHeader(X_HEADER_NAME.toLowerCase());
88          assertEquals("Case and whitespace sensitive", 1, headers.size());
89          assertEquals("Case and whitespace sensitive", X_HEADER_VALUE
90                  .toLowerCase(), headers.get(0));
91          headers = adapter.getHeader(X_HEADER_WITH_WS);
92          assertEquals("Case and whitespace sensitive", 1, headers.size());
93          assertEquals("Case and whitespace sensitive", X_HEADER_VALUE_ALT,
94                  headers.get(0));
95      }
96  
97      public void testGetHeaderNames() throws Exception {
98          List headers = adapter.getHeaderNames();
99          assertNotNull(headers);
100         assertEquals("All headers set returned", 6, headers.size());
101         assertTrue("All headers set returned", headers.contains(BCC));
102         assertTrue("All headers set returned", headers.contains(TO));
103         assertTrue("All headers set returned", headers.contains(FROM));
104         assertTrue("All headers set returned", headers.contains(X_HEADER_NAME));
105         assertTrue("All headers set returned", headers.contains(X_HEADER_NAME
106                 .toLowerCase()));
107         assertTrue("All headers set returned", headers
108                 .contains(X_HEADER_WITH_WS));
109     }
110 
111     public void testGetMatchingHeader() throws Exception {
112         List<String> headers = adapter.getMatchingHeader(FROM);
113         assertNotNull(headers);
114         assertEquals("From headers set returned", 1, headers.size());
115         assertTrue("From headers set returned", headers.contains(FROM_ADDRESS));
116         headers = adapter.getMatchingHeader(X_HEADER_NAME);
117         assertNotNull(headers);
118         assertEquals(
119                 "Matches ignoring whitespace and capitalisation headers set returned",
120                 3, headers.size());
121         assertTrue(
122                 "Matches ignoring whitespace and capitalisation headers set returned",
123                 headers.contains(X_HEADER_VALUE));
124         assertTrue(
125                 "Matches ignoring whitespace and capitalisation headers set returned",
126                 headers.contains(X_HEADER_VALUE_ALT));
127         assertTrue(
128                 "Matches ignoring whitespace and capitalisation headers set returned",
129                 headers.contains(X_HEADER_VALUE.toLowerCase()));
130     }
131 
132     public void testGetSize() throws Exception {
133         int size = adapter.getSize();
134         assertEquals("Message size set", MESSAGE_SIZE, size);
135     }
136 }