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