BlackJumboDogのWebAPI
自動テストにおけるSMTPモックとして

2013.10.19 CLR/H #85
自己紹介
 識別子

SIN/札幌ワークス

 Twitter

@furuya02

 仕事
 スタッフ

某社でシステムサポート
CLR/H

 Microsoft MVP for Visual C# (2013/1~)
BlackJumboDogによるテスト自動化
メール送信機能の自動テストに使用する
//exercise
var actual = sut.mailsend()

テスト対象
プロダクト

SMTP

テスト実行

WebAPI
//verify
AsertThat(actual,expected)
SMTPサーバを起動
「オプション」-「メールサーバ」-「SMTPサーバ」
ユーザ設定
「オプション」-「メールサーバ」-「メールボックス」
他ドメイン宛のメールをキューに保持する
「キュー常時処理」のチェックを外すと、外部への転送はされない
WebAPIサーバを起動
「オプション」-「WebAPIサーバ」
WebAPIサーバを使用する
デフォルトでポートは5050
http://localhost:5050/message
JSON形式でデータ取得できます
BlackJumboDogのメールボックス構造
自ドメイン宛のメールは各ユーザ、他ドメイン宛のメールはキューに溜まる

example.com

user1

user2

他ドメイン

…

mqueue
パラメータ owner
特定のユーザのメールのみを取得の対象とする
Example.com

user1

GET
GET
GET
GET

user2

他ドメイン

…

/mail/message
/mail/message?owner=user1
/mail/message?owner=user1,user2
/mail/message?owner=mqueue

mqueue

//指定が無ければ全部
//user1のみ
//user1及びuser2
//mqueueのみ
フィールド指定(date)
data指定で日付
http://localhost:5050/mail/message?Fields=date&limit=1
{"data":[
{
“date":"Fri, 20 Sep 2013 04:50:43 +0900“
},
]}
フィールド指定(size)
size指定でメールのサイズ
http://localhost:5050/mail/message?Fields=size&limit=3
{"data":[
{
“size":593
},
{
“size":591
},
{
“size":587
},
]}
フィールド指定(from,to)
fromで送信者、toで受信者
http://localhost:5050/mail/message?Fields=from,to&owner=mqueue
{"data":[
{
"from":"user1@example.com",
"to":“aaa@aaa.com”
},
{
"from":"user1@example.com",
"to":“bbb@bbb.com"
}
]}
フィールド指定
fields=
subject 件名
date
日付
size
サイズ
from
送信者
to
受信者
all
メール全部
body
本文
uid
UID
filename ファイル名

Fieldsの指定が無い場合は、subjectのみが指定される
パラメータ limit
指定した件数以上は取得しない
http://localhost:5050/mail/message

http://localhost:5050/mail/message?limit=2

{"data":[
{
"subject":"テストメール(その1)“
},
{
"subject":"テストメール(その2)“
},
{
"subject":"テストメール(その4)“
}
{
“subject”:“テストメール(その5)“
}
{
“subject”:“テストメール(その6)“
}
{

{"data":[
{
"subject":"テストメール(その1)“
},
{
"subject":"テストメール(その2)“
},
]}
メール削除(Delete)
パラメータのowner及びlimitが使用可能

DELETE
DELETE
DELETE
DELETE

/mail/message
//指定が無ければ全部削除
/mail/message?owner=user1
//user1のみ削除
/mail/message?owner=user1,user2 //user1及びuser2削除
/mail/message?owner=mqueue
//mqueueのみ削除

DELETE /mail/message?limit=30

//最大30件を削除
サーバコントロール
SMTPサーバの動作の制御
PUT /mail/control?service=start
PUT /mail/control?service=stop

//メールサーバ起動
//メールサーバ停止

PUT /mail/control?init

//すべてのコントロールの初期化
レスポンス制御
SMTPサーバの応答コードを制御
PUT /mail/response?mail=450
PUT /mail/response?rcpt=452

//MAILコマンドに対し450を返す
//RCPTコマンドに対し452を返す

PUT /mail/response?mail=450&rcpt=452 //複数指定可能

PUT /mail/response?init

//すべてのレスポンス制御の初期化
テストのためのWebAPIのテストコード
がっつりTDDで作成されてます。色々な拡張要望に耐えれると思います。
WebAPIのACLは必須
WebAPIの解放は危険すぎます
メールはV6対応
無駄にWebAPIもIPv6対応
DNSサーバ
MXも引けるので、実環境のFQDNでテストできます
ご清聴ありがとうございました

札幌ワークス
http://www.sapporoworks.ne.jp/spw

Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして