View Javadoc

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.james.mpt;
21  
22  import java.io.InputStream;
23  import java.util.Locale;
24  
25  
26  /**
27   * A Protocol test which reads the test protocol session from a file. The file
28   * read is taken as "<test-name>.test", where <test-name> is the value passed
29   * into the constructor. Subclasses of this test can set up pre-
30   * and post elements for extra elements not defined in the protocol
31   * session file.
32   */
33  public abstract class AbstractSimpleScriptedTestProtocol extends
34          AbstractProtocolTestFramework {
35      private ProtocolSessionBuilder builder = new ProtocolSessionBuilder();
36  
37      private static final Locale BASE_DEFAULT_LOCALE = Locale.getDefault();
38      
39      /**
40       * Constructs a scripted test.
41       * @param hostSystem not null
42       * @param userName user name
43       * @param password password for user
44       */
45      public AbstractSimpleScriptedTestProtocol(HostSystem hostSystem, String userName, String password) {
46          super(hostSystem, userName, password);
47      }
48      
49      protected void tearDown() throws Exception {
50          Locale.setDefault(BASE_DEFAULT_LOCALE);
51          super.tearDown();
52      }
53  
54      /**
55       * Reads test elements from the protocol session file and adds them to the
56       * ProtocolSession. Then calls {@link #runSessions()}.
57       * 
58       * @param locale test under this default locale, not null
59       */
60      protected void scriptTest(String fileName, Locale locale) throws Exception {
61          Locale.setDefault(locale);
62          addTestFile(fileName + ".test", runner.getTestElements());
63          runSessions();
64      }
65  
66      /**
67       * Finds the protocol session file identified by the test name, and builds
68       * protocol elements from it. All elements from the definition file are
69       * added to the supplied ProtocolSession.
70       * 
71       * @param fileName
72       *            The name of the file to read
73       * @param session
74       *            The ProtocolSession to add elements to.
75       */
76      protected void addTestFile(String fileName, ProtocolInteractor session)
77              throws Exception {
78          // Need to find local resource.
79          InputStream is = this.getClass().getResourceAsStream(fileName);
80          if (is == null) {
81              throw new Exception("Test Resource '" + fileName + "' not found.");
82          }
83  
84          builder.addProtocolLines(fileName, is, session);
85      }
86  }