blob: 56c81132fe4e0ff00ceed112d088b4a2dfa93e3c [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at 2016-10-20 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JAMES Mail Protocol Tester (MPT) -
Overview</title>
<style type="text/css" media="all">
@import url("./css/james.css");
@import url("./css/maven-base.css");
@import url("./css/maven-theme.css");
@import url("./css/site.css");
@import url("./js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
@import url("./js/jquery/css/print.css");
@import url("./js/fancybox/jquery.fancybox-1.3.4.css");
</style>
<script type="text/javascript" src="./js/jquery/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="./js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
<script type="text/javascript" src="./js/fancybox/jquery.fancybox-1.3.4.js"></script>
<link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
<meta name="author" content="Mail Protocol Tester" />
<meta name="Date-Revision-yyyymmdd" content="20161020" />
<meta http-equiv="Content-Language" content="en" />
<link title="DOAP" rel="meta" type="application/rdf+xml" href="http://james.apache.org//doap_james-project.rdf"/>
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1384591-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body class="composite">
<div id="banner">
<a href="../index.html" id="bannerLeft" title="james-logo.png">
<img src="images/logos/james-logo.png" alt="JAMES MPT" />
</a>
<a href="http://www.apache.org/index.html" id="bannerRight">
<img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
</a>
<div class="clear">
<hr/>
</div>
</div>
<div id="breadcrumbs">
<div class="xleft">
<span id="publishDate">Last Published: 2016-10-20</span>
</div>
<div class="xright"> <a href="../../index.html" title="Home">Home</a>
|
<a href="../../server/index.html" title="Server">Server</a>
|
<a href="../../hupa/index.html" title="Hupa">Hupa</a>
|
<a href="../../protocols/index.html" title="Protocols">Protocols</a>
|
<a href="../../mailet/index.html" title="Mailets">Mailets</a>
|
<a href="../../mailbox/index.html" title="Mailbox">Mailbox</a>
|
<a href="../../mime4j/index.html" title="Mime4J">Mime4J</a>
|
<a href="../../jsieve/index.html" title="jSieve">jSieve</a>
|
<a href="../../jspf/index.html" title="jSPF">jSPF</a>
|
<a href="../../jdkim/index.html" title="jDKIM">jDKIM</a>
|
<a href="../index.html" title="MPT">MPT</a>
|
<a href="../../postage/index.html" title="Postage">Postage</a>
</div>
<div class="clear">
<hr/>
</div>
</div>
<div id="leftColumn">
<div id="navcolumn">
<h5>Parent Project</h5>
<ul>
<li class="none">
<a href="../index.html" title="Apache James MPT">Apache James MPT</a>
</li>
</ul>
<h5>Mail Protocol Tester</h5>
<ul>
<li class="none">
<strong>Overview</strong>
</li>
<li class="none">
<a href="doap_apache-james-mpt.rdf" title="DOAP"> <img class="imageLink" src="http://www.w3.org/RDF/icons/rdf_metadata_button.32" alt=""/>
DOAP</a>
</li>
</ul>
<h5>Project Documentation</h5>
<ul>
<li class="collapsed">
<a href="project-info.html" title="Project Information">Project Information</a>
</li>
</ul>
<h5>Mail Protocol Tester</h5>
<ul>
<li class="none">
<a href="../index.html" title="Overview">Overview</a>
</li>
<li class="none">
<a href="../release-notes.html" title="Release Notes">Release Notes</a>
</li>
<li class="none">
<a href="./" title="Main Library">Main Library</a>
</li>
<li class="none">
<a href="../antlib" title="AntLib">AntLib</a>
</li>
<li class="none">
<a href="../app" title="Application">Application</a>
</li>
</ul>
<h5>Releases</h5>
<ul>
<li class="none">
<a href="../0.1" title="0.1 Documentation">0.1 Documentation</a>
</li>
<li class="none">
<a href="../0.1/release-notes.html" title="0.1 Release Notes">0.1 Release Notes</a>
</li>
</ul>
<h5>About James</h5>
<ul>
<li class="none">
<a href="../../index.html" title="Overview">Overview</a>
</li>
<li class="none">
<a href="../../newsarchive.html" title="News">News</a>
</li>
<li class="none">
<a href="../../mail.html" title="Mailing Lists">Mailing Lists</a>
</li>
<li class="none">
<a href="../../contribute.html" title="Contributing">Contributing</a>
</li>
<li class="none">
<a href="../../guidelines.html" title="Guidelines">Guidelines</a>
</li>
<li class="none">
<a href="http://wiki.apache.org/james" title="Wiki">Wiki</a>
</li>
<li class="none">
<a href="../../team-list.html" title="Who We Are">Who We Are</a>
</li>
<li class="none">
<a href="../../license.html" title="License">License</a>
</li>
<li class="none">
<a href="../../thanks.html" title="Thanks">Thanks</a>
</li>
<li class="none">
<a href="../../support.html" title="Professional support">Professional support</a>
</li>
</ul>
<h5>Download</h5>
<ul>
<li class="none">
<a href="../../download.cgi" title="Releases">Releases</a>
</li>
</ul>
<h5>Apache Software Foundation</h5>
<ul>
<li>
<strong>
<a title="ASF" href="http://www.apache.org/">ASF</a>
</strong>
</li>
<li>
<a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
</li>
<li>
<a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
</li>
<li>
<a title="License" href="http://www.apache.org/licenses/" >License</a>
</li>
<li>
<a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a title="Security" href="http://www.apache.org/security/">Security</a>
</li>
</ul>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
<img class="poweredBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
</a>
</div>
</div>
<div id="bodyColumn">
<div id="contentBox">
<!-- Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License. -->
<div class="section">
<h2>What is the Apache James MPT?<a name="What_is_the_Apache_James_MPT"></a></h2>
<p>
Apache James Mail Protocol Tester (MPT) is a library providing a framework for the
scritable functional testing of ASCII based line protocols.</p>
<p>
This contains a lightweight scripting framework suitable for the
functional testing of the ASCII line based protocols common in mail.
A script contains a list of client requests and templated server
responses. The framework runs the client lines against a host system
and then compares the server lines received in response against the
template responses.
</p>
</div>
<div class="section">
<h2>Using MPT<a name="Using_MPT"></a></h2>
<div class="section">
<h3>Host System<a name="Host_System"></a></h3>
<p>
MPT is a lightweight, flexible framework which is capable of being used
in a variety of ways. <tt>HostSystem</tt> is pivotal, defining the
interface between the framework and the server system under test.
</p>
<ul>
<li>
The <tt>ExternalHostSystem</tt> implementation connects to a port on a server.
This is typically used to test a complete running server (including the sockets).
<a href="../antlib">MPT AntLib</a> provides an
<a class="externalLink" href="http://ant.apache.org" rel="tag">Ant</a> task suitable for this use case.
</li>
<li>
When performing in-JVM testing (without a live server socket) a custom implementation
must be created connecting the framework to the components under test. This use case
is typically developed as a <a class="externalLink" href="http://www.junit.org">JUnit</a> test case.
</li>
</ul>
</div>
<div class="section">
<h3>With JUnit<a name="With_JUnit"></a></h3>
<p>
In-JVM JUnit testing is a typical use case. The framework provides
abstract superclasses which setup up appropriate fixtures.
</p>
</div>
</div>
<div class="section">
<h2>Script Features<a name="Script_Features"></a></h2>
<div class="section">
<h3>Basic Syntax<a name="Basic_Syntax"></a></h3>
<p>
MPT scripts are line based plain text files. The initial letter of each line determines it's type:
</p>
<table border="0" class="bodyTable">
<tr class="a">
<td><b>Line Prefix</b></td>
<td><b>Description</b></td>
</tr>
<tr class="b">
<td>#</td>
<td>A comment: the rest of the line will be ignored</td>
</tr>
<tr class="a">
<td>C: </td>
<td>A client request: the rest of the line will be sent to the server</td>
</tr>
<tr class="b">
<td>S: </td>
<td>A server response: the framework will read one line of response from the server,
and compare it to the rest of the line (see
<a href="#Regex_Matching_Of_Server_Responses">regex matching</a>)</td>
</tr>
</table>
<p>
Example:
</p>
<div class="source">
<pre>
<div>
<pre>
#
# This script is a basic SMTP HELO.
#
S: 220 localhost. SMTP Server \(JAMES SMTP Server .*
C: HELO example.org
S: 250 localhost. Hello example.org .*
C: QUIT
S: 221 2.0.0 localhost. Service closing transmission channel
</pre></div></pre></div>
</div>
<div class="section">
<h3>Regex Matching Of Server Responses<a name="Regex_Matching_Of_Server_Responses"></a></h3>
<p>
The server responses in the script support regex matching.
<a class="externalLink" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">Java Pattern</a>
is used for the regex comparison and so the syntax is identical.
</p>
</div>
<div class="section">
<h3>Variable Substitution<a name="Variable_Substitution"></a></h3>
<p>
Variables of form <tt>${<i>variable-name</i>}</tt> may be substituted by values
passed into the script builder before interpretation.
</p>
</div>
</div>
</div>
</div>
<div class="clear">
<hr/>
</div>
<div id="footer">
<div class="xright">Copyright &#169; 2008-2016
<a href="http://www.apache.org/">The Apache Software Foundation</a>.
All Rights Reserved.
</div>
<div class="clear">
<hr/>
</div>
</div>
</body>
</html>