123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- """Test program for MimeWriter module.
- The test program was too big to comfortably fit in the MimeWriter
- class, so it's here in its own file.
- This should generate Barry's example, modulo some quotes and newlines.
- """
- import unittest, StringIO
- from test.test_support import run_unittest, import_module
- import_module("MimeWriter", deprecated=True)
- from MimeWriter import MimeWriter
- SELLER = '''\
- INTERFACE Seller-1;
- TYPE Seller = OBJECT
- DOCUMENTATION "A simple Seller interface to test ILU"
- METHODS
- price():INTEGER,
- END;
- '''
- BUYER = '''\
- 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'
- ''' # Don't ask why this comment is here
- STATE = '''\
- # instantiate a buyer instance and put it in a magic place for the KOS
- # to find.
- __kp__ = Buyer()
- __kp__.__setup__(500)
- '''
- SIMPLE_METADATA = [
- ("Interpreter", "python"),
- ("Interpreter-Version", "1.3"),
- ("Owner-Name", "Barry Warsaw"),
- ("Owner-Rendezvous", "bwarsaw@cnri.reston.va.us"),
- ("Home-KSS", "kss.cnri.reston.va.us"),
- ("Identifier", "hdl://cnri.kss/my_first_knowbot"),
- ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"),
- ]
- COMPLEX_METADATA = [
- ("Metadata-Type", "complex"),
- ("Metadata-Key", "connection"),
- ("Access", "read-only"),
- ("Connection-Description", "Barry's Big Bass Business"),
- ("Connection-Id", "B4"),
- ("Connection-Direction", "client"),
- ]
- EXTERNAL_METADATA = [
- ("Metadata-Type", "complex"),
- ("Metadata-Key", "generic-interface"),
- ("Access", "read-only"),
- ("Connection-Description", "Generic Interface for All Knowbots"),
- ("Connection-Id", "generic-kp"),
- ("Connection-Direction", "client"),
- ]
- OUTPUT = '''\
- 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--
- '''
- 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()
|