Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.17 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. # Sarah's custom tests for Part 2.
  4.  
  5. import random
  6. import traceback
  7. import inspect
  8. import math
  9. from servers import StorageServer, PublicKeyServer
  10. from crypto import Crypto
  11. from base_client import IntegrityError
  12.  
  13. #########################
  14. # FUNCTIONALITY TESTS #
  15. #########################
  16.  
  17. globs = dict(globals())
  18.  
  19. def t01_collidingnames(C, pks, crypto, server):
  20. """bummer"""
  21. alice = C("alice")
  22. bob = C("bob")
  23. carol = C("carol")
  24.  
  25. alice.upload("filename", "value")
  26. carol.upload("c", "value2")
  27.  
  28. m = alice.share("bob", "filename")
  29. bob.receive_share("alice", "fileb", m)
  30.  
  31. m = carol.share("bob", "c")
  32. bob.receive_share("carol", "fileb", m)
  33. score = bob.download("fileb") == "value2"
  34.  
  35. m = alice.share("bob", "filename")
  36. bob.receive_share("alice", "fileb", m)
  37. score += bob.download("fileb") == "value"
  38.  
  39. alice.revoke("bob", "filename")
  40. carol.upload("c", "value3")
  41. alice.upload("filename", "aaa")
  42.  
  43. try:
  44. score += bob.download("fileb") != "aaa"
  45. except IntegrityError:
  46. score += 1
  47. score += carol.download("c") == "value3"
  48. score += alice.download("filename") == "aaa"
  49. try:
  50. score += bob.download("fileb") != "value3"
  51. except IntegrityError:
  52. score += 1
  53.  
  54. return score/6.0
  55.  
  56.  
  57. def t2_revokestillaccess(C, pks, crypto, server):
  58. """ yeah man"""
  59. alice = C("alice")
  60. bob = C("bob")
  61. carol = C("carol")
  62. dave = C("dave")
  63.  
  64. alice.upload("f", "a")
  65.  
  66. m = alice.share("bob", "f")
  67. bob.receive_share("alice", "fb", m)
  68.  
  69. m = alice.share("carol", "f")
  70. carol.receive_share("alice", "fc", m)
  71.  
  72. m = carol.share("dave", "fc")
  73. dave.receive_share("carol", "fd1", m)
  74.  
  75. m = bob.share("dave", "fb")
  76. dave.receive_share("bob", "fd2", m)
  77.  
  78.  
  79. alice.revoke("bob", "f")
  80. score = dave.download("fd1") == "a"
  81. try:
  82. score += dave.download("fd2") != "a"
  83. except IntegrityError:
  84. score += 1
  85.  
  86. return score/2.0
  87.  
  88. def t3_revokeusercannotupdate(C, pks, crypto, server):
  89. """last one!"""
  90. alice = C("alice")
  91. bob = C("bob")
  92. carol = C("carol")
  93. dave = C("dave")
  94.  
  95. alice.upload("f", "a")
  96.  
  97. m = alice.share("bob", "f")
  98. bob.receive_share("alice", "fb", m)
  99.  
  100. m = alice.share("carol", "f")
  101. carol.receive_share("alice", "fc", m)
  102.  
  103. m = carol.share("dave", "fc")
  104. dave.receive_share("carol", "fd1", m)
  105.  
  106. alice.revoke("carol", "f")
  107. try:
  108. dave.upload("fd1", "b")
  109. except IntegrityError:
  110. score = 1
  111. try:
  112. carol.upload("fc", "c")
  113. except IntegrityError:
  114. score += 1
  115. return score/2.0
  116.  
  117. def t4_manyUsers(C, pks, crypto, server):
  118. names = list(range(100))
  119. names = [str(name) for name in names]
  120. clients = [C(name) for name in names]
  121. filenames = ["file" + user for user in names]
  122. content = "£€†←♠🐧🚴🎸®" * 763
  123. # content = "it's Sunday today!"
  124. score = 0
  125.  
  126. clients[0].upload(filenames[0], content)
  127. for i in range(len(names) - 1):
  128. sharer = clients[i]
  129. sharee = clients[i+1]
  130. m = sharer.share(names[i + 1], filenames[i])
  131. assert isinstance(m, str)
  132. sharee.receive_share(names[i], filenames[i + 1], m)
  133.  
  134. for i in range(len(names)):
  135. score += clients[i].download(filenames[i]) == content
  136.  
  137. return score / 100
  138.  
  139. def t5_invalid_input_into_upload(C, pks, crypto, server):
  140. """makes sure that invalid value input exits gracefully"""
  141. alice = C("alice")
  142. score = 0
  143. try:
  144. alice.upload("a", 124)
  145. except IntegrityError:
  146. score += 1
  147. try:
  148. alice.upload(alice, alice)
  149. except IntegrityError:
  150. score += 1
  151. return score / 2
  152. def t6_share_before_file_uploaded(C, pks, crypto, server):
  153. """ensure that if share() is called before the user has uploaded anything to the server => integrity error"""
  154. alice = C("alice")
  155. bob = C("bob")
  156. score = 0
  157. try:
  158. alice.share("bob", "k")
  159. except IntegrityError:
  160. score += 1
  161. try:
  162. alice.share("carol", "k")
  163. except IntegrityError:
  164. score += 1
  165. return score / 2
  166.  
  167. def t7_recv_share_before_file_uploaded(C, pks, crypto, server):
  168. """ensure that if recv_share() is called before the user has uploaded anything to the server => integrity error"""
  169. alice = C("alice")
  170. bob = C("bob")
  171. score = 0
  172. try:
  173. alice.receive_share("bob", "aj", "")
  174. except IntegrityError:
  175. score += 1
  176. try:
  177. alice.receive_share("carol", "llw", "")
  178. except IntegrityError:
  179. score += 1
  180. return score / 2
  181.  
  182.  
  183. def t8_revoke_before_file_uploaded(C, pks, crypto, server):
  184. """ensure that if revoke() is called before the user has uploaded anything to the server => integrity error"""
  185. alice = C("alice")
  186. bob = C("bob")
  187. score = 0
  188. try:
  189. alice.revoke("bob", "k")
  190. except IntegrityError:
  191. score += 1
  192. try:
  193. alice.revoke("carol", "k")
  194. except IntegrityError:
  195. score += 1
  196. return score / 5
  197.  
  198. gs = dict(globals())
  199.  
  200. functionality_tests = []
  201. for g, f in sorted(gs.items()):
  202. if (g not in globs and g != "globs" and "__" not in g and
  203. type(f) == type(lambda x: x)):
  204. functionality_tests.append((g, f))
  205.  
  206.  
  207. class StudentTester:
  208. def __init__(self, theclass):
  209. self.theclass = theclass
  210.  
  211. def run_test(self, t, Server=StorageServer, Crypto=Crypto,
  212. Pks=PublicKeyServer):
  213. argspec = inspect.getargspec(t)
  214. if argspec.defaults is None:
  215. types = {}
  216. else:
  217. types = dict(zip(argspec.args[-len(argspec.defaults):],
  218. argspec.defaults))
  219.  
  220. server = types['server']() if 'server' in types else Server()
  221. pks = types['pks']() if 'pks' in types else Pks()
  222. crypto = types['crypto']() if 'crypto' in types else Crypto()
  223. myclient = __import__(self.theclass, fromlist=[''])
  224.  
  225. def C(name):
  226. return myclient.Client(server, pks, crypto, name)
  227. return t(C, pks, crypto, server)
  228.  
  229.  
  230. def run_custom_tests():
  231. """Runs all part 2 functionality tests."""
  232.  
  233. """
  234. score = StudentTester("client").run_test(t4_manyUsers)
  235. if score >= .99999:
  236. print("\tTest Passes")
  237. else:
  238. print("\tTest FAILED.")
  239.  
  240. score = StudentTester("client").run_test(t5_invalid_input_into_upload)
  241. if score >= .99999:
  242. print("\tTest Passes")
  243. else:
  244. print("\tTest FAILED.")
  245. """
  246. for testname, test in functionality_tests:
  247. print("============")
  248. print("Running test", testname)
  249. try:
  250. score = StudentTester("client").run_test(test)
  251. if score >= .99999:
  252. print("\tTest Passes")
  253. else:
  254. print("\tTest FAILED.")
  255. print("\t"+test.__doc__)
  256. except:
  257. print("\tTest FAILED.")
  258. print("\t"+test.__doc__)
  259. traceback.print_exc()
  260. print("\n\n")
  261.  
  262. if __name__ == "__main__":
  263. run_custom_tests()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement