package net.assemble.emailnotify.test;
import junit.framework.TestCase;
import net.assemble.emailnotify.core.WapPdu;
import net.assemble.emailnotify.core.preferences.EmailNotifyPreferences;
import net.orleaf.android.HexUtils;
public class WapPduTest extends TestCase {
/**
* mopera Uメール (WAP PDU)
*/
public void testMoperaPdu() {
byte[] pdu = HexUtils.hex2bytes(
// header
"000606" +
"0302030aaf89" +
// body
"030d6a0085" +
"0703" + "796831323234406d6f7065726100" + "87" +
"05c307" + "20110123012345" +
"01");
WapPdu wapPdu = new WapPdu(pdu);
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
assertEquals(9, wapPdu.getBinaryApplicationId());
assertEquals("x-wap-application:emn.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_MOPERA, wapPdu.getServiceName());
assertEquals("mailat:yh1224@mopera.net", wapPdu.getMailbox());
assertEquals("20110123012345", wapPdu.getTimestampString());
}
/**
* mopera Uメール (WAP BODY)
*/
public void testMoperaBody() {
String ctype = "application/vnd.wap.emn+wbxml";
int appId = 9;
byte[] body = HexUtils.hex2bytes(
"030d6a0085" +
"0703" + "796831323234406d6f7065726100" + "87" +
"05c307" + "20110123012345" +
"01");
WapPdu wapPdu = new WapPdu(ctype, appId, body);
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
assertEquals(9, wapPdu.getBinaryApplicationId());
assertEquals("x-wap-application:emn.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_MOPERA, wapPdu.getServiceName());
assertEquals("mailat:yh1224@mopera.net", wapPdu.getMailbox());
assertEquals("20110123012345", wapPdu.getTimestampString());
}
/**
* spモードメール (WAP PDU)
*/
public void testSpmodePdu() {
byte[] pdu = HexUtils.hex2bytes(
// header
"000608" +
"0302030aaf02905c" +
// body
"030d6a0085" +
"0703" + "6869726f73652d79313232342d737040646f636f6d6f2e6e652e6a700" + "00" +
"5c307" + "20110123012345" +
"01");
WapPdu wapPdu = new WapPdu(pdu);
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
assertEquals(0x905c, wapPdu.getBinaryApplicationId());
assertEquals("x-oma-docomo:xmd.mail.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_SPMODE, wapPdu.getServiceName());
assertEquals("mailat:hirose-y1224-sp@docomo.ne.jp", wapPdu.getMailbox());
assertEquals("20110123012345", wapPdu.getTimestampString());
}
/**
* spモードメール
*/
public void testSpmodeNull() {
WapPdu wapPdu = new WapPdu(EmailNotifyPreferences.SERVICE_SPMODE, "docomo.ne.jp");
assertEquals(0, wapPdu.getBinaryContentType());
assertNull(wapPdu.getContentType());
assertEquals(0, wapPdu.getBinaryApplicationId());
assertNull(wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_SPMODE, wapPdu.getServiceName());
assertEquals("docomo.ne.jp", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* iモードメール (WAP PDU)
*/
public void testImodePdu() {
byte[] pdu = HexUtils.hex2bytes(
// header
"000605" +
"b0af028002" +
// body
"02066a0085" +
"0903" + "646f636f6d6f2e6e652e6a703f50493d303600" +
"01");
WapPdu wapPdu = new WapPdu(pdu);
assertTrue(wapPdu.decode());
assertEquals(0x30, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
assertEquals(32770, wapPdu.getBinaryApplicationId());
assertEquals("x-wap-docomo:imode.mail.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_IMODE, wapPdu.getServiceName());
assertEquals("imap://docomo.ne.jp?PI=06", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* iモードメール (WAP BODY)
*/
public void testImodeBody() {
String ctype = "application/vnd.wap.slc";
int appId = 0;
byte[] body = HexUtils.hex2bytes(
"02066a0085" +
"0903" + "646f636f6d6f2e6e652e6a703f50493d303600" +
"01");
WapPdu wapPdu = new WapPdu(ctype, appId, body);
assertTrue(wapPdu.decode());
assertEquals(0x30, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
assertEquals(EmailNotifyPreferences.SERVICE_IMODE, wapPdu.getServiceName());
assertEquals("imap://docomo.ne.jp?PI=06", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* 不明 (WAP BODY)
*/
public void testUnknown2() {
String ctype = "application/vnd.wap.emn+wbxml";
int appId = 0;
byte[] body = HexUtils.hex2bytes("01");
WapPdu wapPdu = new WapPdu(ctype, appId, body);
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
assertEquals(EmailNotifyPreferences.SERVICE_UNKNOWN, wapPdu.getServiceName());
assertEquals("unknown", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* 不特定
*/
public void testUnspec() {
WapPdu wapPdu = new WapPdu(EmailNotifyPreferences.SERVICE_UNSPEC, "");
assertEquals(0, wapPdu.getBinaryContentType());
assertNull(wapPdu.getContentType());
assertEquals(0, wapPdu.getBinaryApplicationId());
assertNull(wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_UNSPEC, wapPdu.getServiceName());
assertEquals("", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* spモード?
*/
public void testXXX1() {
byte[] pdu = HexUtils.hex2bytes(
// header
"000605" +
"b0af029062" +
// body
"02066a0085" +
"0b03" + "73706d6f64652e6e652e6a703f44493d303700" +
"01");
WapPdu wapPdu = new WapPdu(pdu);
assertTrue(wapPdu.decode());
assertEquals(0x30, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
assertEquals(0x9062, wapPdu.getBinaryApplicationId());
assertEquals("x-oma-docomo:xmd.agent.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_UNKNOWN, wapPdu.getServiceName());
assertEquals("http://www.spmode.ne.jp?DI=07", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* spモード?
*/
public void testXXX2() {
byte[] header = HexUtils.hex2bytes("b0af02905f");
byte[] body = HexUtils.hex2bytes(
"02066a0085" +
"0b03" + "6261636b75702e73706d6f64652e6e652e6a703f53493d3831323000" +
"01");
WapPdu wapPdu = new WapPdu(header, body);
assertTrue(wapPdu.decode());
assertEquals(0x30, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
assertEquals(0x905f, wapPdu.getBinaryApplicationId());
assertEquals("x-oma-docomo:xmd.storage.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_UNKNOWN, wapPdu.getServiceName());
assertEquals("http://www.backup.spmode.ne.jp?SI=8120", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* モバイルアプリ?
*/
public void testXXX3() {
byte[] pdu = HexUtils.hex2bytes(
"00060803020310af029056" +
"2f2f535641674943645445415141446b6e507879766b535170416b4f4b644a6342664845593769314b754a484368712b347a6f6570585667765966436a456d514f684f5a4e644b6651642f346e71776c615878464b6a42714e5752744954314957566c332f2f5653");
WapPdu wapPdu = new WapPdu(pdu);
assertTrue(wapPdu.decode());
assertEquals(0x310, wapPdu.getBinaryContentType());
assertEquals("application/vnd.docomo.pf", wapPdu.getContentType());
assertEquals(0x9056, wapPdu.getBinaryApplicationId());
assertEquals("x-oma-docomo:sp.mail.ua", wapPdu.getApplicationId());
assertEquals(EmailNotifyPreferences.SERVICE_UNKNOWN, wapPdu.getServiceName());
assertEquals("unknown", wapPdu.getMailbox());
assertNull(wapPdu.getTimestampString());
}
/**
* Content-Type
*/
public void testContentType1() {
WapPdu wapPdu;
// application/vnd.wap.emn+wbxml (0x030a)
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aaf8901"));
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
// application/vnd.docomo.pf (0x0310)
wapPdu = new WapPdu(HexUtils.hex2bytes("00060603020310af8901"));
assertTrue(wapPdu.decode());
assertEquals(0x0310, wapPdu.getBinaryContentType());
assertEquals("application/vnd.docomo.pf", wapPdu.getContentType());
// application/vnd.docomo.ub (0x0311)
wapPdu = new WapPdu(HexUtils.hex2bytes("00060603020311af8901"));
assertTrue(wapPdu.decode());
assertEquals(0x0311, wapPdu.getBinaryContentType());
assertEquals("application/vnd.docomo.ub", wapPdu.getContentType());
// application/vnd.wap.slc (0x30)
wapPdu = new WapPdu(HexUtils.hex2bytes("000605b0af02800201"));
assertTrue(wapPdu.decode());
assertEquals(0x030, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
// unknown
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030baf8901"));
assertTrue(wapPdu.decode());
assertEquals(0x030b, wapPdu.getBinaryContentType());
assertEquals("unknown(0x30b)", wapPdu.getContentType());
}
/**
* Content-Type
*/
public void testContentType2() {
WapPdu wapPdu;
// application/vnd.wap.emn+wbxml (0x030a)
wapPdu = new WapPdu("application/vnd.wap.emn+wbxml", 9, HexUtils.hex2bytes("01"));
assertTrue(wapPdu.decode());
assertEquals(0x030a, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.emn+wbxml", wapPdu.getContentType());
// application/vnd.wap.slc (0x30)
wapPdu = new WapPdu("application/vnd.wap.slc", 9, HexUtils.hex2bytes("01"));
assertTrue(wapPdu.decode());
assertEquals(0x30, wapPdu.getBinaryContentType());
assertEquals("application/vnd.wap.slc", wapPdu.getContentType());
// unknown
wapPdu = new WapPdu("hoge", 9, HexUtils.hex2bytes("01"));
assertTrue(wapPdu.decode());
assertEquals(0, wapPdu.getBinaryContentType());
assertEquals("hoge", wapPdu.getContentType());
}
/**
* X-Wap-Application-Id
*/
public void testApplicationId() {
WapPdu wapPdu;
// x-wap-application:emn.ua (0x09)
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aaf8901"));
assertTrue(wapPdu.decode());
assertEquals(9, wapPdu.getBinaryApplicationId());
assertEquals("x-wap-application:emn.ua", wapPdu.getApplicationId());
// x-oma-docomo:xmd.mail.ua (0x905c)
wapPdu = new WapPdu(HexUtils.hex2bytes("0006080302030aaf02905c01"));
assertTrue(wapPdu.decode());
assertEquals(0x905c, wapPdu.getBinaryApplicationId());
assertEquals("x-oma-docomo:xmd.mail.ua", wapPdu.getApplicationId());
// unknown
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aaf8a01"));
assertTrue(wapPdu.decode());
assertEquals(0x0a, wapPdu.getBinaryApplicationId());
assertEquals("unknown(0xa)", wapPdu.getApplicationId());
wapPdu = new WapPdu(HexUtils.hex2bytes("0006080302030aaf02905d01"));
assertTrue(wapPdu.decode());
assertEquals(0x905d, wapPdu.getBinaryApplicationId());
assertEquals("unknown(0x905d)", wapPdu.getApplicationId());
}
/**
* X-Wap-Application-Id
*/
public void testApplicationId2() {
WapPdu wapPdu;
// x-wap-application:emn.ua (0x09)
wapPdu = new WapPdu("application/vnd.wap.emn+wbxml", 9, HexUtils.hex2bytes("01"));
assertTrue(wapPdu.decode());
assertEquals(9, wapPdu.getBinaryApplicationId());
assertEquals("x-wap-application:emn.ua", wapPdu.getApplicationId());
// unknown
wapPdu = new WapPdu("application/vnd.wap.emn+wbxml", 8, HexUtils.hex2bytes("01"));
assertTrue(wapPdu.decode());
assertEquals(8, wapPdu.getBinaryApplicationId());
assertEquals("unknown(0x8)", wapPdu.getApplicationId());
}
/**
* Invalid length
*/
public void testLength() {
WapPdu wapPdu;
// no length
wapPdu = new WapPdu(HexUtils.hex2bytes("0006"));
assertFalse(wapPdu.decode());
// length unmatch
wapPdu = new WapPdu(HexUtils.hex2bytes("00067f"));
assertFalse(wapPdu.decode());
// no X-Wap-Application-Id
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aae89"));
assertFalse(wapPdu.decode());
// no body (OK)
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aaf89"));
assertTrue(wapPdu.decode());
}
/**
* PDU TYPE
*/
public void testPduType() {
WapPdu wapPdu;
// PDU_TYPE_PUSH (0x06)
wapPdu = new WapPdu(HexUtils.hex2bytes("0006060302030aaf8901"));
assertTrue(wapPdu.decode());
// PDU_TYPE_CONFIRMED_PUSH (0x07)
wapPdu = new WapPdu(HexUtils.hex2bytes("0007060302030aaf8901"));
assertTrue(wapPdu.decode());
// Invalid
wapPdu = new WapPdu(HexUtils.hex2bytes("0005060302030aaf8901"));
assertFalse(wapPdu.decode());
}
}