Convert test_MimeWriter to unittest.
This commit is contained in:
parent
71a2089712
commit
e8328ba723
|
@ -1,110 +0,0 @@
|
||||||
test_MimeWriter
|
|
||||||
From: bwarsaw@cnri.reston.va.us
|
|
||||||
Date: Mon Feb 12 17:21:48 EST 1996
|
|
||||||
To: kss-submit@cnri.reston.va.us
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: multipart/knowbot;
|
|
||||||
boundary="801spam999";
|
|
||||||
version="0.1"
|
|
||||||
|
|
||||||
This is a multi-part message in MIME format.
|
|
||||||
|
|
||||||
--801spam999
|
|
||||||
Content-Type: multipart/knowbot-metadata;
|
|
||||||
boundary="802spam999"
|
|
||||||
|
|
||||||
|
|
||||||
--802spam999
|
|
||||||
Content-Type: message/rfc822
|
|
||||||
KP-Metadata-Type: simple
|
|
||||||
KP-Access: read-only
|
|
||||||
|
|
||||||
KPMD-Interpreter: python
|
|
||||||
KPMD-Interpreter-Version: 1.3
|
|
||||||
KPMD-Owner-Name: Barry Warsaw
|
|
||||||
KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us
|
|
||||||
KPMD-Home-KSS: kss.cnri.reston.va.us
|
|
||||||
KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
|
|
||||||
KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
|
|
||||||
|
|
||||||
--802spam999
|
|
||||||
Content-Type: text/isl
|
|
||||||
KP-Metadata-Type: complex
|
|
||||||
KP-Metadata-Key: connection
|
|
||||||
KP-Access: read-only
|
|
||||||
KP-Connection-Description: Barry's Big Bass Business
|
|
||||||
KP-Connection-Id: B4
|
|
||||||
KP-Connection-Direction: client
|
|
||||||
|
|
||||||
INTERFACE Seller-1;
|
|
||||||
|
|
||||||
TYPE Seller = OBJECT
|
|
||||||
DOCUMENTATION "A simple Seller interface to test ILU"
|
|
||||||
METHODS
|
|
||||||
price():INTEGER,
|
|
||||||
END;
|
|
||||||
|
|
||||||
--802spam999
|
|
||||||
Content-Type: message/external-body;
|
|
||||||
access-type="URL";
|
|
||||||
URL="hdl://cnri.kss/generic-knowbot"
|
|
||||||
|
|
||||||
Content-Type: text/isl
|
|
||||||
KP-Metadata-Type: complex
|
|
||||||
KP-Metadata-Key: generic-interface
|
|
||||||
KP-Access: read-only
|
|
||||||
KP-Connection-Description: Generic Interface for All Knowbots
|
|
||||||
KP-Connection-Id: generic-kp
|
|
||||||
KP-Connection-Direction: client
|
|
||||||
|
|
||||||
|
|
||||||
--802spam999--
|
|
||||||
|
|
||||||
--801spam999
|
|
||||||
Content-Type: multipart/knowbot-code;
|
|
||||||
boundary="803spam999"
|
|
||||||
|
|
||||||
|
|
||||||
--803spam999
|
|
||||||
Content-Type: text/plain
|
|
||||||
KP-Module-Name: BuyerKP
|
|
||||||
|
|
||||||
class Buyer:
|
|
||||||
def __setup__(self, maxprice):
|
|
||||||
self._maxprice = maxprice
|
|
||||||
|
|
||||||
def __main__(self, kos):
|
|
||||||
"""Entry point upon arrival at a new KOS."""
|
|
||||||
broker = kos.broker()
|
|
||||||
# B4 == Barry's Big Bass Business :-)
|
|
||||||
seller = broker.lookup('Seller_1.Seller', 'B4')
|
|
||||||
if seller:
|
|
||||||
price = seller.price()
|
|
||||||
print 'Seller wants $', price, '... '
|
|
||||||
if price > self._maxprice:
|
|
||||||
print 'too much!'
|
|
||||||
else:
|
|
||||||
print "I'll take it!"
|
|
||||||
else:
|
|
||||||
print 'no seller found here'
|
|
||||||
|
|
||||||
--803spam999--
|
|
||||||
|
|
||||||
--801spam999
|
|
||||||
Content-Type: multipart/knowbot-state;
|
|
||||||
boundary="804spam999"
|
|
||||||
KP-Main-Module: main
|
|
||||||
|
|
||||||
|
|
||||||
--804spam999
|
|
||||||
Content-Type: text/plain
|
|
||||||
KP-Module-Name: main
|
|
||||||
|
|
||||||
# instantiate a buyer instance and put it in a magic place for the KOS
|
|
||||||
# to find.
|
|
||||||
__kp__ = Buyer()
|
|
||||||
__kp__.__setup__(500)
|
|
||||||
|
|
||||||
--804spam999--
|
|
||||||
|
|
||||||
--801spam999--
|
|
|
@ -7,6 +7,8 @@ This should generate Barry's example, modulo some quotes and newlines.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import unittest, sys, StringIO
|
||||||
|
from test.test_support import run_unittest
|
||||||
|
|
||||||
from MimeWriter import MimeWriter
|
from MimeWriter import MimeWriter
|
||||||
|
|
||||||
|
@ -77,94 +79,213 @@ EXTERNAL_METADATA = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def main():
|
OUTPUT = '''\
|
||||||
import sys
|
From: bwarsaw@cnri.reston.va.us
|
||||||
|
Date: Mon Feb 12 17:21:48 EST 1996
|
||||||
|
To: kss-submit@cnri.reston.va.us
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: multipart/knowbot;
|
||||||
|
boundary="801spam999";
|
||||||
|
version="0.1"
|
||||||
|
|
||||||
# Toplevel headers
|
This is a multi-part message in MIME format.
|
||||||
|
|
||||||
toplevel = MimeWriter(sys.stdout)
|
--801spam999
|
||||||
toplevel.addheader("From", "bwarsaw@cnri.reston.va.us")
|
Content-Type: multipart/knowbot-metadata;
|
||||||
toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
|
boundary="802spam999"
|
||||||
toplevel.addheader("To", "kss-submit@cnri.reston.va.us")
|
|
||||||
toplevel.addheader("MIME-Version", "1.0")
|
|
||||||
|
|
||||||
# Toplevel body parts
|
|
||||||
|
|
||||||
f = toplevel.startmultipartbody("knowbot", "801spam999",
|
|
||||||
[("version", "0.1")], prefix=0)
|
|
||||||
f.write("This is a multi-part message in MIME format.\n")
|
|
||||||
|
|
||||||
# First toplevel body part: metadata
|
|
||||||
|
|
||||||
md = toplevel.nextpart()
|
|
||||||
md.startmultipartbody("knowbot-metadata", "802spam999")
|
|
||||||
|
|
||||||
# Metadata part 1
|
|
||||||
|
|
||||||
md1 = md.nextpart()
|
|
||||||
md1.addheader("KP-Metadata-Type", "simple")
|
|
||||||
md1.addheader("KP-Access", "read-only")
|
|
||||||
m = MimeWriter(md1.startbody("message/rfc822"))
|
|
||||||
for key, value in SIMPLE_METADATA:
|
|
||||||
m.addheader("KPMD-" + key, value)
|
|
||||||
m.flushheaders()
|
|
||||||
del md1
|
|
||||||
|
|
||||||
# Metadata part 2
|
|
||||||
|
|
||||||
md2 = md.nextpart()
|
|
||||||
for key, value in COMPLEX_METADATA:
|
|
||||||
md2.addheader("KP-" + key, value)
|
|
||||||
f = md2.startbody("text/isl")
|
|
||||||
f.write(SELLER)
|
|
||||||
del md2
|
|
||||||
|
|
||||||
# Metadata part 3
|
|
||||||
|
|
||||||
md3 = md.nextpart()
|
|
||||||
f = md3.startbody("message/external-body",
|
|
||||||
[("access-type", "URL"),
|
|
||||||
("URL", "hdl://cnri.kss/generic-knowbot")])
|
|
||||||
m = MimeWriter(f)
|
|
||||||
for key, value in EXTERNAL_METADATA:
|
|
||||||
md3.addheader("KP-" + key, value)
|
|
||||||
md3.startbody("text/isl")
|
|
||||||
# Phantom body doesn't need to be written
|
|
||||||
|
|
||||||
md.lastpart()
|
|
||||||
|
|
||||||
# Second toplevel body part: code
|
|
||||||
|
|
||||||
code = toplevel.nextpart()
|
|
||||||
code.startmultipartbody("knowbot-code", "803spam999")
|
|
||||||
|
|
||||||
# Code: buyer program source
|
|
||||||
|
|
||||||
buyer = code.nextpart()
|
|
||||||
buyer.addheader("KP-Module-Name", "BuyerKP")
|
|
||||||
f = buyer.startbody("text/plain")
|
|
||||||
f.write(BUYER)
|
|
||||||
|
|
||||||
code.lastpart()
|
|
||||||
|
|
||||||
# Third toplevel body part: state
|
|
||||||
|
|
||||||
state = toplevel.nextpart()
|
|
||||||
state.addheader("KP-Main-Module", "main")
|
|
||||||
state.startmultipartbody("knowbot-state", "804spam999")
|
|
||||||
|
|
||||||
# State: a bunch of assignments
|
|
||||||
|
|
||||||
st = state.nextpart()
|
|
||||||
st.addheader("KP-Module-Name", "main")
|
|
||||||
f = st.startbody("text/plain")
|
|
||||||
f.write(STATE)
|
|
||||||
|
|
||||||
state.lastpart()
|
|
||||||
|
|
||||||
# End toplevel body parts
|
|
||||||
|
|
||||||
toplevel.lastpart()
|
|
||||||
|
|
||||||
|
|
||||||
main()
|
--802spam999
|
||||||
|
Content-Type: message/rfc822
|
||||||
|
KP-Metadata-Type: simple
|
||||||
|
KP-Access: read-only
|
||||||
|
|
||||||
|
KPMD-Interpreter: python
|
||||||
|
KPMD-Interpreter-Version: 1.3
|
||||||
|
KPMD-Owner-Name: Barry Warsaw
|
||||||
|
KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us
|
||||||
|
KPMD-Home-KSS: kss.cnri.reston.va.us
|
||||||
|
KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
|
||||||
|
KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
|
||||||
|
|
||||||
|
--802spam999
|
||||||
|
Content-Type: text/isl
|
||||||
|
KP-Metadata-Type: complex
|
||||||
|
KP-Metadata-Key: connection
|
||||||
|
KP-Access: read-only
|
||||||
|
KP-Connection-Description: Barry's Big Bass Business
|
||||||
|
KP-Connection-Id: B4
|
||||||
|
KP-Connection-Direction: client
|
||||||
|
|
||||||
|
INTERFACE Seller-1;
|
||||||
|
|
||||||
|
TYPE Seller = OBJECT
|
||||||
|
DOCUMENTATION "A simple Seller interface to test ILU"
|
||||||
|
METHODS
|
||||||
|
price():INTEGER,
|
||||||
|
END;
|
||||||
|
|
||||||
|
--802spam999
|
||||||
|
Content-Type: message/external-body;
|
||||||
|
access-type="URL";
|
||||||
|
URL="hdl://cnri.kss/generic-knowbot"
|
||||||
|
|
||||||
|
Content-Type: text/isl
|
||||||
|
KP-Metadata-Type: complex
|
||||||
|
KP-Metadata-Key: generic-interface
|
||||||
|
KP-Access: read-only
|
||||||
|
KP-Connection-Description: Generic Interface for All Knowbots
|
||||||
|
KP-Connection-Id: generic-kp
|
||||||
|
KP-Connection-Direction: client
|
||||||
|
|
||||||
|
|
||||||
|
--802spam999--
|
||||||
|
|
||||||
|
--801spam999
|
||||||
|
Content-Type: multipart/knowbot-code;
|
||||||
|
boundary="803spam999"
|
||||||
|
|
||||||
|
|
||||||
|
--803spam999
|
||||||
|
Content-Type: text/plain
|
||||||
|
KP-Module-Name: BuyerKP
|
||||||
|
|
||||||
|
class Buyer:
|
||||||
|
def __setup__(self, maxprice):
|
||||||
|
self._maxprice = maxprice
|
||||||
|
|
||||||
|
def __main__(self, kos):
|
||||||
|
"""Entry point upon arrival at a new KOS."""
|
||||||
|
broker = kos.broker()
|
||||||
|
# B4 == Barry's Big Bass Business :-)
|
||||||
|
seller = broker.lookup('Seller_1.Seller', 'B4')
|
||||||
|
if seller:
|
||||||
|
price = seller.price()
|
||||||
|
print 'Seller wants $', price, '... '
|
||||||
|
if price > self._maxprice:
|
||||||
|
print 'too much!'
|
||||||
|
else:
|
||||||
|
print "I'll take it!"
|
||||||
|
else:
|
||||||
|
print 'no seller found here'
|
||||||
|
|
||||||
|
--803spam999--
|
||||||
|
|
||||||
|
--801spam999
|
||||||
|
Content-Type: multipart/knowbot-state;
|
||||||
|
boundary="804spam999"
|
||||||
|
KP-Main-Module: main
|
||||||
|
|
||||||
|
|
||||||
|
--804spam999
|
||||||
|
Content-Type: text/plain
|
||||||
|
KP-Module-Name: main
|
||||||
|
|
||||||
|
# instantiate a buyer instance and put it in a magic place for the KOS
|
||||||
|
# to find.
|
||||||
|
__kp__ = Buyer()
|
||||||
|
__kp__.__setup__(500)
|
||||||
|
|
||||||
|
--804spam999--
|
||||||
|
|
||||||
|
--801spam999--
|
||||||
|
'''
|
||||||
|
|
||||||
|
class MimewriterTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
buf = StringIO.StringIO()
|
||||||
|
|
||||||
|
# Toplevel headers
|
||||||
|
|
||||||
|
toplevel = MimeWriter(buf)
|
||||||
|
toplevel.addheader("From", "bwarsaw@cnri.reston.va.us")
|
||||||
|
toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
|
||||||
|
toplevel.addheader("To", "kss-submit@cnri.reston.va.us")
|
||||||
|
toplevel.addheader("MIME-Version", "1.0")
|
||||||
|
|
||||||
|
# Toplevel body parts
|
||||||
|
|
||||||
|
f = toplevel.startmultipartbody("knowbot", "801spam999",
|
||||||
|
[("version", "0.1")], prefix=0)
|
||||||
|
f.write("This is a multi-part message in MIME format.\n")
|
||||||
|
|
||||||
|
# First toplevel body part: metadata
|
||||||
|
|
||||||
|
md = toplevel.nextpart()
|
||||||
|
md.startmultipartbody("knowbot-metadata", "802spam999")
|
||||||
|
|
||||||
|
# Metadata part 1
|
||||||
|
|
||||||
|
md1 = md.nextpart()
|
||||||
|
md1.addheader("KP-Metadata-Type", "simple")
|
||||||
|
md1.addheader("KP-Access", "read-only")
|
||||||
|
m = MimeWriter(md1.startbody("message/rfc822"))
|
||||||
|
for key, value in SIMPLE_METADATA:
|
||||||
|
m.addheader("KPMD-" + key, value)
|
||||||
|
m.flushheaders()
|
||||||
|
del md1
|
||||||
|
|
||||||
|
# Metadata part 2
|
||||||
|
|
||||||
|
md2 = md.nextpart()
|
||||||
|
for key, value in COMPLEX_METADATA:
|
||||||
|
md2.addheader("KP-" + key, value)
|
||||||
|
f = md2.startbody("text/isl")
|
||||||
|
f.write(SELLER)
|
||||||
|
del md2
|
||||||
|
|
||||||
|
# Metadata part 3
|
||||||
|
|
||||||
|
md3 = md.nextpart()
|
||||||
|
f = md3.startbody("message/external-body",
|
||||||
|
[("access-type", "URL"),
|
||||||
|
("URL", "hdl://cnri.kss/generic-knowbot")])
|
||||||
|
m = MimeWriter(f)
|
||||||
|
for key, value in EXTERNAL_METADATA:
|
||||||
|
md3.addheader("KP-" + key, value)
|
||||||
|
md3.startbody("text/isl")
|
||||||
|
# Phantom body doesn't need to be written
|
||||||
|
|
||||||
|
md.lastpart()
|
||||||
|
|
||||||
|
# Second toplevel body part: code
|
||||||
|
|
||||||
|
code = toplevel.nextpart()
|
||||||
|
code.startmultipartbody("knowbot-code", "803spam999")
|
||||||
|
|
||||||
|
# Code: buyer program source
|
||||||
|
|
||||||
|
buyer = code.nextpart()
|
||||||
|
buyer.addheader("KP-Module-Name", "BuyerKP")
|
||||||
|
f = buyer.startbody("text/plain")
|
||||||
|
f.write(BUYER)
|
||||||
|
|
||||||
|
code.lastpart()
|
||||||
|
|
||||||
|
# Third toplevel body part: state
|
||||||
|
|
||||||
|
state = toplevel.nextpart()
|
||||||
|
state.addheader("KP-Main-Module", "main")
|
||||||
|
state.startmultipartbody("knowbot-state", "804spam999")
|
||||||
|
|
||||||
|
# State: a bunch of assignments
|
||||||
|
|
||||||
|
st = state.nextpart()
|
||||||
|
st.addheader("KP-Module-Name", "main")
|
||||||
|
f = st.startbody("text/plain")
|
||||||
|
f.write(STATE)
|
||||||
|
|
||||||
|
state.lastpart()
|
||||||
|
|
||||||
|
# End toplevel body parts
|
||||||
|
|
||||||
|
toplevel.lastpart()
|
||||||
|
|
||||||
|
self.assertEqual(buf.getvalue(), OUTPUT)
|
||||||
|
|
||||||
|
def test_main():
|
||||||
|
run_unittest(MimewriterTest)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test_main()
|
||||||
|
|
Loading…
Reference in New Issue