-
Notifications
You must be signed in to change notification settings - Fork 140
/
Copy pathtests.py
132 lines (92 loc) · 3.22 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import unittest
import subprocess
import http.client
import random
import time
class WebTestCase(unittest.TestCase):
"""tests for the WSGI Calculator"""
def setUp(self):
self.server_process = subprocess.Popen(
[
"python",
"calculator.py"
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
time.sleep(.25)
def tearDown(self):
self.server_process.kill()
self.server_process.communicate()
def get_response(self, url):
"""
Helper function to get a response from a given url, using http.client
"""
conn = http.client.HTTPConnection('localhost:8080')
conn.request('GET', url)
response = conn.getresponse()
self.assertEqual(200, response.getcode())
conn.close()
return response
def test_add(self):
"""
A call to /add/a/b yields a + b
"""
a = random.randint(100, 10000)
b = random.randint(100, 10000)
path = "/add/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a + b).encode(), response.read())
def test_multiply(self):
"""
A call to /multiply/a/b yields a*b
"""
a = random.randint(100, 10000)
b = random.randint(100, 10000)
path = "/multiply/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a*b).encode(), response.read())
def test_subtract_positive_result(self):
"""
A call to /subtract/a/b yields a - b, for a > b
"""
a = random.randint(10000, 100000)
b = random.randint(100, 1000)
path = "/subtract/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a - b).encode(), response.read())
def test_subtract_negative_result(self):
"""
A call to /subtract/a/b yields a - b, for a < b
"""
a = random.randint(100, 1000)
b = random.randint(10000, 100000)
path = "/subtract/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(a - b).encode(), response.read())
def test_divide(self):
"""
A call to /divide/a/b yields a/b, for a % b = 0
"""
result = random.randint(2, 10)
b = random.randint(100, 1000)
a = result * b
path = "/divide/{}/{}".format(a, b)
response = self.get_response(path)
self.assertEqual(200, response.getcode())
self.assertIn(str(result).encode(), response.read())
def test_index_instructions(self):
"""
The index page at the root of the server shall include instructions
on how to use the page.
"""
response = self.get_response('/')
self.assertEqual(200, response.getcode())
# We're just testing if the word "add" is present in the index
self.assertIn("add".encode(), response.read())
if __name__ == '__main__':
unittest.main()