tests.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import unittest
  2. import json
  3. class FunctionalTests(unittest.TestCase):
  4. def setUp(self):
  5. from frameworkbenchmarks import main
  6. from webtest import TestApp
  7. app = main({}, **{"sqlalchemy.url": "postgresql:///frameworkbenchmarks"})
  8. self.testapp = TestApp(app)
  9. def _get(self, url, content_type="application/json"):
  10. res = self.testapp.get(url, status=200)
  11. self.assertTrue("Content-Length" in res.headers)
  12. return res
  13. def _test_obj(self, obj):
  14. self.assertTrue("id" in obj)
  15. self.assertTrue("randomNumber" in obj)
  16. self.assertTrue(1 <= obj["randomNumber"] <= 10000)
  17. def test_json(self):
  18. """
  19. /json
  20. """
  21. res = self._get("/json")
  22. self.assertEqual(res.body, b"""{"message":"Hello, World!"}""")
  23. def test_db(self):
  24. """
  25. /db
  26. """
  27. res = self._get("/db")
  28. obj = json.loads(res.body)
  29. self._test_obj(obj)
  30. def test_queries_0(self):
  31. """
  32. /queries?queries=0
  33. """
  34. res = self._get("/queries?queries=0")
  35. self.assertEqual(len(json.loads(res.body)), 1)
  36. def test_queries_999(self):
  37. """
  38. /queries?queries=999
  39. """
  40. res = self._get("/queries?queries=999")
  41. self.assertEqual(len(json.loads(res.body)), 500)
  42. def test_queries_10(self):
  43. """
  44. /queries?queries=10 objects
  45. """
  46. res = self._get("/queries?queries=10")
  47. objset = json.loads(res.body)
  48. for obj in objset:
  49. self._test_obj(obj)
  50. def test_fortunes(self):
  51. """
  52. /fortunes
  53. """
  54. res = self._get("/fortunes")
  55. self.assertEqual(res.body.decode('utf-8').strip(), fortunes.strip())
  56. def test_updates(self):
  57. """
  58. /updates?queries=10
  59. """
  60. res = self._get("/updates?queries=10")
  61. objset = json.loads(res.body)
  62. # don't bother with more...
  63. for obj in objset:
  64. self._test_obj(obj)
  65. def test_plaintext(self):
  66. """
  67. /plaintext
  68. """
  69. res = self._get("/plaintext", content_type="text/plain")
  70. self.assertEqual(res.body, b"Hello, World!")
  71. fortunes = """
  72. <!DOCTYPE html>
  73. <html>
  74. <head>
  75. <title>Fortunes</title>
  76. </head>
  77. <body>
  78. <table>
  79. <tr>
  80. <th>id</th>
  81. <th>message</th>
  82. </tr>
  83. <tr>
  84. <td>11</td>
  85. <td>&lt;script&gt;alert("This should not be displayed in a browser alert box.");&lt;/script&gt;</td>
  86. </tr>
  87. <tr>
  88. <td>4</td>
  89. <td>A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1</td>
  90. </tr>
  91. <tr>
  92. <td>5</td>
  93. <td>A computer program does what you tell it to do, not what you want it to do.</td>
  94. </tr>
  95. <tr>
  96. <td>2</td>
  97. <td>A computer scientist is someone who fixes things that aren't broken.</td>
  98. </tr>
  99. <tr>
  100. <td>8</td>
  101. <td>A list is only as strong as its weakest link. — Donald Knuth</td>
  102. </tr>
  103. <tr>
  104. <td>0</td>
  105. <td>Additional fortune added at request time.</td>
  106. </tr>
  107. <tr>
  108. <td>3</td>
  109. <td>After enough decimal places, nobody gives a damn.</td>
  110. </tr>
  111. <tr>
  112. <td>7</td>
  113. <td>Any program that runs right is obsolete.</td>
  114. </tr>
  115. <tr>
  116. <td>10</td>
  117. <td>Computers make very fast, very accurate mistakes.</td>
  118. </tr>
  119. <tr>
  120. <td>6</td>
  121. <td>Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen</td>
  122. </tr>
  123. <tr>
  124. <td>9</td>
  125. <td>Feature: A bug with seniority.</td>
  126. </tr>
  127. <tr>
  128. <td>1</td>
  129. <td>fortune: No such file or directory</td>
  130. </tr>
  131. <tr>
  132. <td>12</td>
  133. <td>フレームワークのベンチマーク</td>
  134. </tr>
  135. </table>
  136. </body>
  137. </html>
  138. """