server-test.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import sys, cmakelib, json, os, shutil
  2. debug = True
  3. cmakeCommand = sys.argv[1]
  4. testFile = sys.argv[2]
  5. sourceDir = sys.argv[3]
  6. buildDir = sys.argv[4] + "/" + os.path.splitext(os.path.basename(testFile))[0]
  7. cmakeGenerator = sys.argv[5]
  8. print("Test:", testFile,
  9. "\n-- SourceDir:", sourceDir,
  10. "\n-- BuildDir:", buildDir,
  11. "\n-- Generator:", cmakeGenerator)
  12. if os.path.exists(buildDir):
  13. shutil.rmtree(buildDir)
  14. proc = cmakelib.initProc(cmakeCommand)
  15. with open(testFile) as f:
  16. testData = json.loads(f.read())
  17. for obj in testData:
  18. if 'sendRaw' in obj:
  19. data = obj['sendRaw']
  20. if debug: print("Sending raw:", data)
  21. cmakelib.writeRawData(proc, data)
  22. elif 'send' in obj:
  23. data = obj['send']
  24. if debug: print("Sending:", json.dumps(data))
  25. cmakelib.writePayload(proc, data)
  26. elif 'recv' in obj:
  27. data = obj['recv']
  28. if debug: print("Waiting for:", json.dumps(data))
  29. cmakelib.waitForMessage(proc, data)
  30. elif 'reply' in obj:
  31. data = obj['reply']
  32. if debug: print("Waiting for reply:", json.dumps(data))
  33. originalType = ""
  34. cookie = ""
  35. skipProgress = False;
  36. if 'cookie' in data: cookie = data['cookie']
  37. if 'type' in data: originalType = data['type']
  38. if 'skipProgress' in data: skipProgress = data['skipProgress']
  39. cmakelib.waitForReply(proc, originalType, cookie, skipProgress)
  40. elif 'error' in obj:
  41. data = obj['error']
  42. if debug: print("Waiting for error:", json.dumps(data))
  43. originalType = ""
  44. cookie = ""
  45. message = ""
  46. if 'cookie' in data: cookie = data['cookie']
  47. if 'type' in data: originalType = data['type']
  48. if 'message' in data: message = data['message']
  49. cmakelib.waitForError(proc, originalType, cookie, message)
  50. elif 'progress' in obj:
  51. data = obj['progress']
  52. if debug: print("Waiting for progress:", json.dumps(data))
  53. originalType = ''
  54. cookie = ""
  55. current = 0
  56. message = ""
  57. if 'cookie' in data: cookie = data['cookie']
  58. if 'type' in data: originalType = data['type']
  59. if 'current' in data: current = data['current']
  60. if 'message' in data: message = data['message']
  61. cmakelib.waitForProgress(proc, originalType, cookie, current, message)
  62. elif 'handshake' in obj:
  63. data = obj['handshake']
  64. if debug: print("Doing handshake:", json.dumps(data))
  65. major = -1
  66. minor = -1
  67. generator = cmakeGenerator
  68. extraGenerator = ''
  69. sourceDirectory = sourceDir
  70. buildDirectory = buildDir
  71. if 'major' in data: major = data['major']
  72. if 'minor' in data: minor = data['minor']
  73. if 'buildDirectory' in data: buildDirectory = data['buildDirectory']
  74. if 'sourceDirectory' in data: sourceDirectory = data['sourceDirectory']
  75. if 'generator' in data: generator = data['generator']
  76. if 'extraGenerator' in data: extraGenerator = data['extraGenerator']
  77. if not os.path.isabs(buildDirectory):
  78. buildDirectory = buildDir + "/" + buildDirectory
  79. if not os.path.isabs(sourceDirectory):
  80. sourceDirectory = sourceDir + "/" + sourceDirectory
  81. cmakelib.handshake(proc, major, minor, sourceDirectory, buildDirectory,
  82. generator, extraGenerator)
  83. elif 'validateGlobalSettings' in obj:
  84. data = obj['validateGlobalSettings']
  85. if not 'buildDirectory' in data: data['buildDirectory'] = buildDir
  86. if not 'sourceDirectory' in data: data['sourceDirectory'] = sourceDir
  87. if not 'generator' in data: data['generator'] = cmakeGenerator
  88. if not 'extraGenerator' in data: data['extraGenerator'] = ''
  89. cmakelib.validateGlobalSettings(proc, cmakeCommand, data)
  90. elif 'message' in obj:
  91. print("MESSAGE:", obj["message"])
  92. else:
  93. print("Unknown command:", json.dumps(obj))
  94. sys.exit(2)
  95. print("Completed")
  96. # Tell the server to exit.
  97. proc.stdin.close()
  98. proc.stdout.close()
  99. # Wait for the server to exit.
  100. # If this version of python supports it, terminate the server after a timeout.
  101. try:
  102. proc.wait(timeout=5)
  103. except TypeError:
  104. proc.wait()
  105. except:
  106. proc.terminate()
  107. raise
  108. sys.exit(0)