changed final score printing to use the same set of test names
This commit is contained in:
parent
eca7ce2ff1
commit
0a94822e39
@ -2413,23 +2413,146 @@ def make_clean_up_testing(server):
|
|||||||
|
|
||||||
return clean_up_testing
|
return clean_up_testing
|
||||||
|
|
||||||
|
# --------------------------- Test Categories ---------------------------- #
|
||||||
|
# before anything else, we'll set up a specification for testing categories
|
||||||
|
# and which unit test classes to into each. We do this *here* and not below
|
||||||
|
# so the 'list_tests' code below can accurately print things out. Not the
|
||||||
|
# best code organization, but we work with what we've got.
|
||||||
|
# First we'll set up one function for every test category, used to build a
|
||||||
|
# unit test suite object.
|
||||||
|
# Suite builder function for minimum requirements.
|
||||||
|
def make_suite_minreq(hostname, port):
|
||||||
|
min_req_suite = unittest.TestSuite()
|
||||||
|
# Add all of the tests from the class Single_Conn_Good_Case
|
||||||
|
for test_function in dir(Single_Conn_Good_Case):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
min_req_suite.addTest(Single_Conn_Good_Case(test_function, hostname, port))
|
||||||
|
# In particular, add the two-connection test from Multi_Conn_Sequential_Case,
|
||||||
|
# and the 1.0 protocol check (early return check) from Single_Conn_Protocol_Case
|
||||||
|
min_req_suite.addTest(Multi_Conn_Sequential_Case("test_two_connections", hostname, port))
|
||||||
|
min_req_suite.addTest(Single_Conn_Protocol_Case("test_http_1_0_compliance", hostname, port))
|
||||||
|
return min_req_suite
|
||||||
|
# Suite builder function for authentication.
|
||||||
|
def make_suite_auth(hostname, port):
|
||||||
|
auth_tests_suite = unittest.TestSuite()
|
||||||
|
# Add all of the tests from the class Access_Control
|
||||||
|
for test_function in dir(Access_Control):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
auth_tests_suite.addTest(Access_Control(test_function, hostname, port))
|
||||||
|
# Add all of the tests from the class Authentication
|
||||||
|
for test_function in dir(Authentication):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
auth_tests_suite.addTest(Authentication(test_function, hostname, port))
|
||||||
|
return auth_tests_suite
|
||||||
|
|
||||||
|
# Suite builder function for HTML5 fallback.
|
||||||
|
def make_suite_fallback(hostname, port):
|
||||||
|
# Test Suite to test HTML5 fallback functionality. Add all tests from
|
||||||
|
# the Fallback class.
|
||||||
|
html5_fallback_suite = unittest.TestSuite()
|
||||||
|
for test_function in dir(Fallback):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
html5_fallback_suite.addTest(Fallback(test_function, hostname, port))
|
||||||
|
return html5_fallback_suite
|
||||||
|
# Suite builder function for video streaming.
|
||||||
|
def make_suite_video(hostname, port):
|
||||||
|
# Test Suite for video streaming functionality. Add all tests from the
|
||||||
|
# VideoStreaming class.
|
||||||
|
video_suite = unittest.TestSuite()
|
||||||
|
for test_function in dir(VideoStreaming):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
video_suite.addTest(VideoStreaming(test_function, hostname, port))
|
||||||
|
return video_suite
|
||||||
|
# Suite builder function for IPv6 support.
|
||||||
|
def make_suite_ipv6(hostname, port):
|
||||||
|
ipv6_test_suite = unittest.TestSuite()
|
||||||
|
# Add all of the tests from the class Single_Conn_Good_Case
|
||||||
|
for test_function in dir(Single_Conn_Good_Case):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
ipv6_test_suite.addTest(Single_Conn_Good_Case(test_function, hostname, port))
|
||||||
|
return ipv6_test_suite
|
||||||
|
# Suite builder function for extra tests.
|
||||||
|
def make_suite_extra(hostname, port):
|
||||||
|
# Test Suite for extra points, mostly testing error cases
|
||||||
|
extra_tests_suite = unittest.TestSuite()
|
||||||
|
# Add all of the tests from the class Multi_Conn_Sequential_Case
|
||||||
|
for test_function in dir(Multi_Conn_Sequential_Case):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
extra_tests_suite.addTest(Multi_Conn_Sequential_Case(test_function, hostname, port))
|
||||||
|
# Add all of the tests from the class Single_Conn_Bad_Case
|
||||||
|
for test_function in dir(Single_Conn_Bad_Case):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
extra_tests_suite.addTest(Single_Conn_Bad_Case(test_function, hostname, port))
|
||||||
|
# In particular, add the 1.1 protocol persistent connection check from Single_Conn_Protocol_Case
|
||||||
|
extra_tests_suite.addTest(Single_Conn_Protocol_Case("test_http_1_1_compliance", hostname, port))
|
||||||
|
return extra_tests_suite
|
||||||
|
# Suite builder function for malicious tests.
|
||||||
|
def make_suite_malicious(hostname, port):
|
||||||
|
# Malicious Test Suite
|
||||||
|
malicious_tests_suite = unittest.TestSuite()
|
||||||
|
# Add all of the tests from the class Single_Conn_Malicious_Case
|
||||||
|
for test_function in dir(Single_Conn_Malicious_Case):
|
||||||
|
if test_function.startswith("test_"):
|
||||||
|
malicious_tests_suite.addTest(Single_Conn_Malicious_Case(test_function, hostname, port))
|
||||||
|
return malicious_tests_suite
|
||||||
|
|
||||||
|
# main JSON for test categories
|
||||||
|
test_categories = {
|
||||||
|
"minreq": {
|
||||||
|
"name": "Minimum Requirements",
|
||||||
|
"points": 25,
|
||||||
|
"maker": make_suite_minreq
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"name": "Authentication Functionality",
|
||||||
|
"points": 20,
|
||||||
|
"maker": make_suite_auth
|
||||||
|
},
|
||||||
|
"fallback": {
|
||||||
|
"name": "HTML5 Fallback Functionality",
|
||||||
|
"points": 5,
|
||||||
|
"maker": make_suite_fallback
|
||||||
|
},
|
||||||
|
"video": {
|
||||||
|
"name": "Video Streaming Functionality",
|
||||||
|
"points": 10,
|
||||||
|
"maker": make_suite_video
|
||||||
|
},
|
||||||
|
"ipv6": {
|
||||||
|
"name": "IPv6 Support",
|
||||||
|
"points": 5,
|
||||||
|
"maker": make_suite_ipv6
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"name": "Extra Corner Cases",
|
||||||
|
"points": 15,
|
||||||
|
"maker": make_suite_extra
|
||||||
|
},
|
||||||
|
"malicious": {
|
||||||
|
"name": "Robustness/Malicious",
|
||||||
|
"points": 15,
|
||||||
|
"maker": make_suite_malicious
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# ------------------------------------------------------------------------ #
|
||||||
|
|
||||||
|
|
||||||
# Grade distribution constants
|
# Grade distribution constants
|
||||||
grade_points_available = 95
|
#grade_points_available = 95
|
||||||
# 6 tests
|
# 6 tests
|
||||||
minreq_total = 25
|
minreq_total = test_categories["minreq"]["points"]
|
||||||
# 27 tests
|
# 27 tests
|
||||||
extra_total = 15
|
extra_total = test_categories["extra"]["points"]
|
||||||
# 5 tests
|
# 5 tests
|
||||||
malicious_total = 15
|
malicious_total = test_categories["malicious"]["points"]
|
||||||
# 4 tests
|
# 4 tests
|
||||||
ipv6_total = 5
|
ipv6_total = test_categories["ipv6"]["points"]
|
||||||
# ? tests
|
# ? tests
|
||||||
auth_total = 20
|
auth_total = test_categories["auth"]["points"]
|
||||||
# ? tests (html5 fallback)
|
# ? tests (html5 fallback)
|
||||||
fallback_total = 5
|
fallback_total = test_categories["fallback"]["points"]
|
||||||
# ? tests (video features)
|
# ? tests (video features)
|
||||||
video_total = 10
|
video_total = test_categories["video"]["points"]
|
||||||
|
|
||||||
|
|
||||||
def print_points(minreq, extra, malicious, ipv6, auth, fallback, video):
|
def print_points(minreq, extra, malicious, ipv6, auth, fallback, video):
|
||||||
@ -2449,15 +2572,15 @@ def print_points(minreq, extra, malicious, ipv6, auth, fallback, video):
|
|||||||
ipv6_final + extra_final + malicious_final
|
ipv6_final + extra_final + malicious_final
|
||||||
|
|
||||||
# print all scores, including the total
|
# print all scores, including the total
|
||||||
print("Minimum Requirements: \t%2d/%2d" % (minreq_final, minreq_total))
|
print("%-30s\t%2d/%2d" % (test_categories["minreq"]["name"], minreq_final, minreq_total))
|
||||||
print("Authentication Functionality: \t%2d/%2d" % (auth_final, auth_total))
|
print("%-30s\t%2d/%2d" % (test_categories["auth"]["name"], auth_final, auth_total))
|
||||||
print("HTML5 Fallback Functionality: \t%2d/%2d" % (fallback_final, fallback_total))
|
print("%-30s\t%2d/%2d" % (test_categories["fallback"]["name"], fallback_final, fallback_total))
|
||||||
print("Video Functionality: \t%2d/%2d" % (video_final, video_total))
|
print("%-30s\t%2d/%2d" % (test_categories["video"]["name"], video_final, video_total))
|
||||||
print("IPv6 Functionality: \t%2d/%2d" % (ipv6_final, ipv6_total))
|
print("%-30s\t%2d/%2d" % (test_categories["ipv6"]["name"], ipv6_final, ipv6_total))
|
||||||
print("Extra Tests: \t%2d/%2d" % (extra_final, extra_total))
|
print("%-30s\t%2d/%2d" % (test_categories["extra"]["name"], extra_final, extra_total))
|
||||||
print("Robustness: \t%2d/%2d" % (malicious_final, malicious_total))
|
print("%-30s\t%2d/%2d" % (test_categories["malicious"]["name"], malicious_final, malicious_total))
|
||||||
print("-----")
|
print("-----")
|
||||||
print("TOTAL: \t%d/%d" % (total_final, total))
|
print("%-30s\t%d/%d" % ("TOTAL", total_final, total))
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -2515,154 +2638,11 @@ if __name__ == '__main__':
|
|||||||
if tname in dir(clazz):
|
if tname in dir(clazz):
|
||||||
return clazz
|
return clazz
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# --------------------------- Test Categories ---------------------------- #
|
|
||||||
# before anything else, we'll set up a specification for testing categories
|
|
||||||
# and which unit test classes to into each. We do this *here* and not below
|
|
||||||
# so the 'list_tests' code below can accurately print things out. Not the
|
|
||||||
# best code organization, but we work with what we've got.
|
|
||||||
# First we'll set up one function for every test category, used to build a
|
|
||||||
# unit test suite object.
|
|
||||||
|
|
||||||
# Suite builder function for minimum requirements.
|
|
||||||
def make_suite_minreq(hostname, port):
|
|
||||||
min_req_suite = unittest.TestSuite()
|
|
||||||
|
|
||||||
# Add all of the tests from the class Single_Conn_Good_Case
|
|
||||||
for test_function in dir(Single_Conn_Good_Case):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
min_req_suite.addTest(Single_Conn_Good_Case(test_function, hostname, port))
|
|
||||||
|
|
||||||
# In particular, add the two-connection test from Multi_Conn_Sequential_Case,
|
|
||||||
# and the 1.0 protocol check (early return check) from Single_Conn_Protocol_Case
|
|
||||||
min_req_suite.addTest(Multi_Conn_Sequential_Case("test_two_connections", hostname, port))
|
|
||||||
min_req_suite.addTest(Single_Conn_Protocol_Case("test_http_1_0_compliance", hostname, port))
|
|
||||||
return min_req_suite
|
|
||||||
|
|
||||||
# Suite builder function for authentication.
|
|
||||||
def make_suite_auth(hostname, port):
|
|
||||||
auth_tests_suite = unittest.TestSuite()
|
|
||||||
|
|
||||||
# Add all of the tests from the class Access_Control
|
|
||||||
for test_function in dir(Access_Control):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
auth_tests_suite.addTest(Access_Control(test_function, hostname, port))
|
|
||||||
|
|
||||||
# Add all of the tests from the class Authentication
|
|
||||||
for test_function in dir(Authentication):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
auth_tests_suite.addTest(Authentication(test_function, hostname, port))
|
|
||||||
return auth_tests_suite
|
|
||||||
|
|
||||||
# Suite builder function for HTML5 fallback.
|
|
||||||
def make_suite_fallback(hostname, port):
|
|
||||||
# Test Suite to test HTML5 fallback functionality. Add all tests from
|
|
||||||
# the Fallback class.
|
|
||||||
html5_fallback_suite = unittest.TestSuite()
|
|
||||||
for test_function in dir(Fallback):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
html5_fallback_suite.addTest(Fallback(test_function, hostname, port))
|
|
||||||
return html5_fallback_suite
|
|
||||||
|
|
||||||
# Suite builder function for video streaming.
|
|
||||||
def make_suite_video(hostname, port):
|
|
||||||
# Test Suite for video streaming functionality. Add all tests from the
|
|
||||||
# VideoStreaming class.
|
|
||||||
video_suite = unittest.TestSuite()
|
|
||||||
for test_function in dir(VideoStreaming):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
video_suite.addTest(VideoStreaming(test_function, hostname, port))
|
|
||||||
return video_suite
|
|
||||||
|
|
||||||
# Suite builder function for IPv6 support.
|
|
||||||
def make_suite_ipv6(hostname, port):
|
|
||||||
ipv6_test_suite = unittest.TestSuite()
|
|
||||||
# Add all of the tests from the class Single_Conn_Good_Case
|
|
||||||
for test_function in dir(Single_Conn_Good_Case):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
ipv6_test_suite.addTest(Single_Conn_Good_Case(test_function, hostname, port))
|
|
||||||
return ipv6_test_suite
|
|
||||||
|
|
||||||
# Suite builder function for extra tests.
|
|
||||||
def make_suite_extra(hostname, port):
|
|
||||||
# Test Suite for extra points, mostly testing error cases
|
|
||||||
extra_tests_suite = unittest.TestSuite()
|
|
||||||
|
|
||||||
# Add all of the tests from the class Multi_Conn_Sequential_Case
|
|
||||||
for test_function in dir(Multi_Conn_Sequential_Case):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
extra_tests_suite.addTest(Multi_Conn_Sequential_Case(test_function, hostname, port))
|
|
||||||
|
|
||||||
# Add all of the tests from the class Single_Conn_Bad_Case
|
|
||||||
for test_function in dir(Single_Conn_Bad_Case):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
extra_tests_suite.addTest(Single_Conn_Bad_Case(test_function, hostname, port))
|
|
||||||
|
|
||||||
# In particular, add the 1.1 protocol persistent connection check from Single_Conn_Protocol_Case
|
|
||||||
extra_tests_suite.addTest(Single_Conn_Protocol_Case("test_http_1_1_compliance", hostname, port))
|
|
||||||
return extra_tests_suite
|
|
||||||
|
|
||||||
# Suite builder function for malicious tests.
|
|
||||||
def make_suite_malicious(hostname, port):
|
|
||||||
# Malicious Test Suite
|
|
||||||
malicious_tests_suite = unittest.TestSuite()
|
|
||||||
|
|
||||||
# Add all of the tests from the class Single_Conn_Malicious_Case
|
|
||||||
for test_function in dir(Single_Conn_Malicious_Case):
|
|
||||||
if test_function.startswith("test_"):
|
|
||||||
malicious_tests_suite.addTest(Single_Conn_Malicious_Case(test_function, hostname, port))
|
|
||||||
return malicious_tests_suite
|
|
||||||
|
|
||||||
# main JSON for test categories
|
|
||||||
test_categories = [
|
|
||||||
{
|
|
||||||
"key": "minreq",
|
|
||||||
"name": "Minimum Requirements",
|
|
||||||
"points": minreq_total,
|
|
||||||
"maker": make_suite_minreq
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "auth",
|
|
||||||
"name": "Authentication",
|
|
||||||
"points": auth_total,
|
|
||||||
"maker": make_suite_auth
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "fallback",
|
|
||||||
"name": "HTML5 Fallback",
|
|
||||||
"points": fallback_total,
|
|
||||||
"maker": make_suite_fallback
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "video",
|
|
||||||
"name": "Video Streaming",
|
|
||||||
"points": video_total,
|
|
||||||
"maker": make_suite_video
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "ipv6",
|
|
||||||
"name": "IPv6 Support",
|
|
||||||
"points": ipv6_total,
|
|
||||||
"maker": make_suite_ipv6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "extra",
|
|
||||||
"name": "Extra Corner Cases",
|
|
||||||
"points": extra_total,
|
|
||||||
"maker": make_suite_extra
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "malicious",
|
|
||||||
"name": "Robustness/Malicious",
|
|
||||||
"points": malicious_total,
|
|
||||||
"maker": make_suite_malicious
|
|
||||||
}
|
|
||||||
]
|
|
||||||
# ------------------------------------------------------------------------ #
|
|
||||||
|
|
||||||
# if the student requested to list all tests, do so here and exit
|
# if the student requested to list all tests, do so here and exit
|
||||||
if list_tests:
|
if list_tests:
|
||||||
for category in test_categories:
|
for key in test_categories:
|
||||||
|
category = test_categories[key]
|
||||||
# build the test suite
|
# build the test suite
|
||||||
suite = category["maker"]("NO_HOSTNAME_NEEDED", "NO_PORT_NEEDED")
|
suite = category["maker"]("NO_HOSTNAME_NEEDED", "NO_PORT_NEEDED")
|
||||||
print("Category: %s" % category["name"])
|
print("Category: %s" % category["name"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user