-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathhttp-tester-conditionalGET.py
executable file
·134 lines (115 loc) · 4.78 KB
/
http-tester-conditionalGET.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
133
#!/usr/bin/env python
from threading import Thread
from httplib import HTTPConnection
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
from datetime import datetime, timedelta
from bcolor import bcolors
import sys
import time
import re, socket, calendar
class TestHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/basic":
lms = self.headers.get('If-Modified-Since', "")
cdata = ""
if lms != "":
m_ts = calendar.timegm(time.strptime(lms, "%a, %d %b %Y %H:%M:%S GMT"))
c_ts = calendar.timegm(time.gmtime())
if c_ts - m_ts > 5 and c_ts - m_ts < 10:
lastModify=lms
expireDate=(datetime.utcnow()+timedelta(seconds=5)).strftime("%a, %d %b %Y %H:%M:%S GMT")
self.hit = True
self.send_response(304)
self.send_header('Expires',expireDate)
self.send_header('Last-Modified', lastModify)
elif c_ts - m_ts > 10:
cdata = "OK"
size = len(cdata)
expireDate=(datetime.utcnow()+timedelta(seconds=5)).strftime("%a, %d %b %Y %H:%M:%S GMT")
lastModify=(datetime.utcnow()).strftime("%a, %d %b %Y %H:%M:%S GMT")
self.send_response(200)
self.send_header('Content-type','text/html')
self.send_header('Content-length', str(size))
self.send_header('Expires',expireDate)
self.send_header('Last-Modified', lastModify)
else:
cdata = "WRONG!\n"
size = len(cdata)
expireDate=(datetime.utcnow()+timedelta(seconds=5)).strftime("%a, %d %b %Y %H:%M:%S GMT")
lastModify=(datetime.utcnow()).strftime("%a, %d %b %Y %H:%M:%S GMT")
self.send_response(200)
self.send_header('Content-type','text/html')
self.send_header('Content-length', str(size))
self.send_header('Expires',expireDate)
self.send_header('Last-Modified', lastModify)
else:
cdata = open("./basic", "r").read()
size = len(cdata)
expireDate=(datetime.utcnow()+timedelta(seconds=5)).strftime("%a, %d %b %Y %H:%M:%S GMT")
lastModify=(datetime.utcnow()).strftime("%a, %d %b %Y %H:%M:%S GMT")
self.send_response(200)
self.send_header('Content-type','text/html')
self.send_header('Content-length', str(size))
self.send_header('Expires',expireDate)
self.send_header('Last-Modified', lastModify)
if self.close_connection == True:
self.send_header('Connection', 'close')
self.end_headers()
if cdata != "":
self.wfile.write(cdata)
return
class ServerThread (Thread):
def __init__(self, port):
Thread.__init__(self)
self.port = port
def run(self):
try:
TestHandler.protocol_version = "HTTP/1.1"
TestHandler.hit = False
self.server = HTTPServer(('', self.port), TestHandler)
self.server.serve_forever()
except KeyboardInterrupt:
self.server.socket.close()
try:
conf = open("./portconf", "r")
pport = conf.readline().rstrip().split(':')[1]
sport1 = conf.readline().rstrip().split(':')[1]
sport2 = conf.readline().rstrip().split(':')[1]
server1 = ServerThread(int(sport1))
server1.start()
dataFile = open('basic', "r")
cdata = dataFile.read()
r = False
proxy = '127.0.0.1:'+pport
conn = HTTPConnection(proxy)
conn.request("GET", "http://127.0.0.1:" + sport1 + "/basic")
resp = conn.getresponse()
data = resp.read()
conn.close()
time.sleep(3)
conn2 = HTTPConnection(proxy)
conn2.request("GET", "http://127.0.0.1:" + sport1 + "/basic")
resp2 = conn2.getresponse()
data2 = resp2.read()
conn2.close()
time.sleep(3)
conn3 = HTTPConnection(proxy)
conn3.request("GET", "http://127.0.0.1:" + sport1 + "/basic")
resp3 = conn3.getresponse()
data3 = resp3.read()
conn3.close()
time.sleep(6)
conn4 = HTTPConnection(proxy)
conn4.request("GET", "http://127.0.0.1:" + sport1 + "/basic")
resp4 = conn4.getresponse()
data4 = resp4.read()
conn4.close()
if data4 == "OK" and data3 == cdata and data2 == cdata:
r = True
if r:
print "Re-query Caching: [" + bcolors.PASS + "PASSED" + bcolors.ENDC + "]"
else:
print "Re-query Caching: [" + bcolors.FAIL + "FAILED" + bcolors.ENDC + "]"
except:
server1.server.shutdown()
server1.server.shutdown()