My favorites | Sign in
Project Logo
                
Changes to /trunk/apptestsuite/client/validator/runtests.py
r973 vs. r979   Edit
  Compare: vs.   Format:
Revision r979
Go to: 
Project members, sign in to write a code review
/trunk/apptestsuite/client/validator/runtests.py   r973 /trunk/apptestsuite/client/validator/runtests.py   r979
1 from subprocess import Popen, PIPE 1 from subprocess import Popen, PIPE
2 import unittest 2 import unittest
3 import appclienttest 3 from appclienttest import msg
4 4
5 class Test(unittest.TestCase): 5 class Test(unittest.TestCase):
6 def _parse(self, output):
7 parsed = [tuple(l.split(" ", 1)[0].split(":")) for l in output.splitlines()]
8 parsed = [(code, getattr(msg, message)) for code, message in parsed]
9 msg_count = {}
10 for code, message in parsed:
11 msg_count[code] = msg_count.get(code, 0) + 1
12
13 return (parsed, msg_count)
14
6 def testNonWellFormed(self): 15 def testNonWellFormed(self):
7 """ 16 """
8 Non-WellFormed output should be caught 17 Non-WellFormed output should be caught
9 and a log message recording the malformed 18 and a log message recording the malformed
10 XML should be produced. 19 XML should be produced.
11 """ 20 """
12 output = Popen(["python", "appclienttest.py", "--quiet", "--playback=./rawtestdata/invalid-service/"], stdout=PIPE).communicate()[0] 21 output = Popen(["python", "./validator/appclienttest.py", "--quiet", "--playback=./validator/rawtestdata/invalid-service/"], stdout=PIPE).communicate()[0]
13 parsed = [l.split(":") for l in output.splitlines()] 22 parsed, msg_count = self._parse(output)
14 msg_count = {} 23 self.assertTrue(("Error", msg.WELL_FORMED_XML) in parsed)
15 for code, msg in parsed: 24 self.assertEqual(1, msg_count["Begin_Test"])
16 msg_count[code] = msg_count.get(code, 0) + 1 25 self.assertEqual(0, msg_count.get("Warning", 0))
17 self.assertTrue(["Error", appclienttest.REPRESENTATION] in parsed) 26
18 self.assertTrue(["Log", "Response"] in parsed) 27 def testComplete(self):
28 """
29 Test a complete path through the flow. The following errors
30 have been injected into a good run:
31
32 The service document does not return Etag or Last-Modified headers.
33 On Entry creation neither a Location or Content-Location: header are returned.
34 The Slug header is ignored.
35 The Entry does not contain an 'edit' link.
36 The PUT to update the entry fails with a 400.
37 The XML returned from creating a media entry is not well-formed.
38 """
39 output = Popen(["python", "./validator/appclienttest.py", "--quiet", "--playback=./validator/rawtestdata/complete/"], stdout=PIPE).communicate()[0]
40 parsed, msg_count = self._parse(output)
41 self.assertTrue(("Warning", msg.HTTP_ETAG) in parsed)
42 self.assertTrue(("Warning", msg.HTTP_LAST_MODIFIED) in parsed)
43 self.assertTrue(("Error", msg.CREATE_RETURNS_LOCATION) in parsed)
44 self.assertTrue(("Warning", msg.CREATE_CONTENT_LOCATION) in parsed)
45 self.assertTrue(("Warning", msg.SLUG_HEADER) in parsed)
46 self.assertTrue(("Warning", msg.ENTRY_LINK_EDIT) in parsed)
47 self.assertTrue(("Error", msg.PUT_STATUS_CODE) in parsed)
48 self.assertTrue(("Error", msg.WELL_FORMED_XML) in parsed)
49
50
51
52
53
54
19 55
20 if __name__ == "__main__": 56 if __name__ == "__main__":
21 unittest.main() 57 unittest.main()
22 58
Hosted by Google Code