ClientStateful-check.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. from check_index import *
  2. def check_reply(q):
  3. assert is_dict(q)
  4. assert sorted(q.keys()) == [
  5. "client-client-member",
  6. "client-empty-array",
  7. "client-empty-object",
  8. "client-json-bad-root",
  9. "client-json-empty",
  10. "client-json-extra",
  11. "client-not-file",
  12. "client-request-array-negative-major-version",
  13. "client-request-array-negative-minor-version",
  14. "client-request-array-negative-version",
  15. "client-request-array-no-major-version",
  16. "client-request-array-no-supported-version",
  17. "client-request-array-no-supported-version-among",
  18. "client-request-array-version-1",
  19. "client-request-array-version-1-1",
  20. "client-request-array-version-2",
  21. "client-request-negative-major-version",
  22. "client-request-negative-minor-version",
  23. "client-request-negative-version",
  24. "client-request-no-major-version",
  25. "client-request-no-version",
  26. "client-request-version-1",
  27. "client-request-version-1-1",
  28. "client-request-version-2",
  29. "client-requests-bad",
  30. "client-requests-empty",
  31. "client-requests-not-kinded",
  32. "client-requests-not-objects",
  33. "client-requests-unknown",
  34. ]
  35. expected = [
  36. (check_query_client_member, "client-client-member"),
  37. (check_query_empty_array, "client-empty-array"),
  38. (check_query_empty_object, "client-empty-object"),
  39. (check_query_json_bad_root, "client-json-bad-root"),
  40. (check_query_json_empty, "client-json-empty"),
  41. (check_query_json_extra, "client-json-extra"),
  42. (check_query_not_file, "client-not-file"),
  43. (check_query_requests_bad, "client-requests-bad"),
  44. (check_query_requests_empty, "client-requests-empty"),
  45. (check_query_requests_not_kinded, "client-requests-not-kinded"),
  46. (check_query_requests_not_objects, "client-requests-not-objects"),
  47. (check_query_requests_unknown, "client-requests-unknown"),
  48. ]
  49. for (f, k) in expected:
  50. assert is_dict(q[k])
  51. assert sorted(q[k].keys()) == ["query.json"]
  52. f(q[k]["query.json"])
  53. expected = [
  54. (check_query_response_array_negative_major_version, "client-request-array-negative-major-version"),
  55. (check_query_response_array_negative_minor_version, "client-request-array-negative-minor-version"),
  56. (check_query_response_array_negative_version, "client-request-array-negative-version"),
  57. (check_query_response_array_no_major_version, "client-request-array-no-major-version"),
  58. (check_query_response_array_no_supported_version, "client-request-array-no-supported-version"),
  59. (check_query_response_array_no_supported_version_among, "client-request-array-no-supported-version-among"),
  60. (check_query_response_array_version_1, "client-request-array-version-1"),
  61. (check_query_response_array_version_1_1, "client-request-array-version-1-1"),
  62. (check_query_response_array_version_2, "client-request-array-version-2"),
  63. (check_query_response_negative_major_version, "client-request-negative-major-version"),
  64. (check_query_response_negative_minor_version, "client-request-negative-minor-version"),
  65. (check_query_response_negative_version, "client-request-negative-version"),
  66. (check_query_response_no_major_version, "client-request-no-major-version"),
  67. (check_query_response_no_version, "client-request-no-version"),
  68. (check_query_response_version_1, "client-request-version-1"),
  69. (check_query_response_version_1_1, "client-request-version-1-1"),
  70. (check_query_response_version_2, "client-request-version-2"),
  71. ]
  72. for (f, k) in expected:
  73. assert is_dict(q[k])
  74. assert sorted(q[k].keys()) == ["query.json"]
  75. assert is_dict(q[k]["query.json"])
  76. assert sorted(q[k]["query.json"].keys()) == ["requests", "responses"]
  77. r = q[k]["query.json"]["requests"]
  78. assert is_list(r)
  79. assert len(r) == 1
  80. assert is_dict(r[0])
  81. assert r[0]["kind"] == "__test"
  82. r = q[k]["query.json"]["responses"]
  83. assert is_list(r)
  84. assert len(r) == 1
  85. assert is_dict(r[0])
  86. f(r[0])
  87. def check_query_client_member(q):
  88. assert is_dict(q)
  89. assert sorted(q.keys()) == ["client", "responses"]
  90. assert is_dict(q["client"])
  91. assert sorted(q["client"].keys()) == []
  92. check_error(q["responses"], "'requests' member missing")
  93. def check_query_empty_array(q):
  94. check_error(q, "query root is not an object")
  95. def check_query_empty_object(q):
  96. assert is_dict(q)
  97. assert sorted(q.keys()) == ["responses"]
  98. check_error(q["responses"], "'requests' member missing")
  99. def check_query_json_bad_root(q):
  100. check_error_re(q, "A valid JSON document must be either an array or an object value")
  101. def check_query_json_empty(q):
  102. check_error_re(q, "value, object or array expected")
  103. def check_query_json_extra(q):
  104. check_error_re(q, "Extra non-whitespace after JSON value")
  105. def check_query_not_file(q):
  106. check_error_re(q, "failed to read from file")
  107. def check_query_requests_bad(q):
  108. assert is_dict(q)
  109. assert sorted(q.keys()) == ["requests", "responses"]
  110. r = q["requests"]
  111. assert is_dict(r)
  112. assert sorted(r.keys()) == []
  113. check_error(q["responses"], "'requests' member is not an array")
  114. def check_query_requests_empty(q):
  115. assert is_dict(q)
  116. assert sorted(q.keys()) == ["requests", "responses"]
  117. r = q["requests"]
  118. assert is_list(r)
  119. assert len(r) == 0
  120. r = q["responses"]
  121. assert is_list(r)
  122. assert len(r) == 0
  123. def check_query_requests_not_kinded(q):
  124. assert is_dict(q)
  125. assert sorted(q.keys()) == ["requests", "responses"]
  126. r = q["requests"]
  127. assert is_list(r)
  128. assert len(r) == 4
  129. assert is_dict(r[0])
  130. assert sorted(r[0].keys()) == []
  131. assert is_dict(r[1])
  132. assert sorted(r[1].keys()) == ["kind"]
  133. assert is_dict(r[1]["kind"])
  134. assert is_dict(r[2])
  135. assert sorted(r[2].keys()) == ["kind"]
  136. assert is_list(r[2]["kind"])
  137. assert is_dict(r[3])
  138. assert sorted(r[3].keys()) == ["kind"]
  139. assert is_int(r[3]["kind"])
  140. r = q["responses"]
  141. assert is_list(r)
  142. assert len(r) == 4
  143. check_error(r[0], "'kind' member missing")
  144. check_error(r[1], "'kind' member is not a string")
  145. check_error(r[2], "'kind' member is not a string")
  146. check_error(r[3], "'kind' member is not a string")
  147. def check_query_requests_not_objects(q):
  148. assert is_dict(q)
  149. assert sorted(q.keys()) == ["requests", "responses"]
  150. r = q["requests"]
  151. assert is_list(r)
  152. assert len(r) == 3
  153. assert is_int(r[0])
  154. assert is_string(r[1])
  155. assert is_list(r[2])
  156. r = q["responses"]
  157. assert is_list(r)
  158. assert len(r) == 3
  159. check_error(r[0], "request is not an object")
  160. check_error(r[1], "request is not an object")
  161. check_error(r[2], "request is not an object")
  162. def check_query_requests_unknown(q):
  163. assert is_dict(q)
  164. assert sorted(q.keys()) == ["requests", "responses"]
  165. r = q["requests"]
  166. assert is_list(r)
  167. assert len(r) == 3
  168. assert is_dict(r[0])
  169. assert sorted(r[0].keys()) == ["kind"]
  170. assert r[0]["kind"] == "unknownC"
  171. assert is_dict(r[1])
  172. assert sorted(r[1].keys()) == ["kind"]
  173. assert r[1]["kind"] == "unknownB"
  174. assert is_dict(r[2])
  175. assert sorted(r[2].keys()) == ["kind"]
  176. assert r[2]["kind"] == "unknownA"
  177. r = q["responses"]
  178. assert is_list(r)
  179. assert len(r) == 3
  180. check_error(r[0], "unknown request kind 'unknownC'")
  181. check_error(r[1], "unknown request kind 'unknownB'")
  182. check_error(r[2], "unknown request kind 'unknownA'")
  183. def check_query_response_array_negative_major_version(r):
  184. check_error(r, "'version' object 'major' member is not a non-negative integer")
  185. def check_query_response_array_negative_minor_version(r):
  186. check_error(r, "'version' object 'minor' member is not a non-negative integer")
  187. def check_query_response_array_negative_version(r):
  188. check_error(r, "'version' array entry is not a non-negative integer or object")
  189. def check_query_response_array_no_major_version(r):
  190. check_error(r, "'version' object 'major' member missing")
  191. def check_query_response_array_no_supported_version(r):
  192. check_error(r, "no supported version specified")
  193. def check_query_response_array_no_supported_version_among(r):
  194. check_error(r, "no supported version specified among: 4.0 3.0")
  195. def check_query_response_array_version_1(r):
  196. check_index__test(r, 1, 3)
  197. def check_query_response_array_version_1_1(r):
  198. check_index__test(r, 1, 3) # always uses latest minor version
  199. def check_query_response_array_version_2(r):
  200. check_index__test(r, 2, 0)
  201. def check_query_response_negative_major_version(r):
  202. check_error(r, "'version' object 'major' member is not a non-negative integer")
  203. def check_query_response_negative_minor_version(r):
  204. check_error(r, "'version' object 'minor' member is not a non-negative integer")
  205. def check_query_response_negative_version(r):
  206. check_error(r, "'version' member is not a non-negative integer, object, or array")
  207. def check_query_response_no_major_version(r):
  208. check_error(r, "'version' object 'major' member missing")
  209. def check_query_response_no_version(r):
  210. check_error(r, "'version' member missing")
  211. def check_query_response_version_1(r):
  212. check_index__test(r, 1, 3)
  213. def check_query_response_version_1_1(r):
  214. check_index__test(r, 1, 3) # always uses latest minor version
  215. def check_query_response_version_2(r):
  216. check_index__test(r, 2, 0)
  217. def check_objects(o):
  218. assert is_list(o)
  219. assert len(o) == 2
  220. check_index__test(o[0], 1, 3)
  221. check_index__test(o[1], 2, 0)
  222. assert is_dict(index)
  223. assert sorted(index.keys()) == ["cmake", "objects", "reply"]
  224. check_cmake(index["cmake"])
  225. check_reply(index["reply"])
  226. check_objects(index["objects"])