Browse Source

Server: test cache after reconnect

Daniel Pfeifer 8 years ago
parent
commit
9b3c5ccf12

+ 1 - 0
Tests/Server/CMakeLists.txt

@@ -20,6 +20,7 @@ macro(do_test bsname file)
   endif()
 endmacro()
 
+do_test("test_cache" "tc_cache.json")
 do_test("test_handshake" "tc_handshake.json")
 do_test("test_globalSettings" "tc_globalSettings.json")
 do_test("test_buildsystem1" "tc_buildsystem1.json")

+ 39 - 0
Tests/Server/cmakelib.py

@@ -95,6 +95,21 @@ def initProc(cmakeCommand):
 
   return cmakeCommand
 
+def exitProc(cmakeCommand):
+  # Tell the server to exit.
+  cmakeCommand.stdin.close()
+  cmakeCommand.stdout.close()
+
+  # Wait for the server to exit.
+  # If this version of python supports it, terminate the server after a timeout.
+  try:
+    cmakeCommand.wait(timeout=5)
+  except TypeError:
+    cmakeCommand.wait()
+  except:
+    cmakeCommand.terminate()
+    raise
+
 def waitForMessage(cmakeCommand, expected):
   data = ordered(expected)
   packet = ordered(waitForRawMessage(cmakeCommand))
@@ -197,3 +212,27 @@ def validateGlobalSettings(cmakeCommand, cmakeCommandPath, data):
     print("Validating", i)
     if (packet[i] != data[i]):
       sys.exit(1)
+
+def validateCache(cmakeCommand, data):
+  packet = waitForReply(cmakeCommand, 'cache', '', False)
+
+  cache = packet['cache']
+
+  if (data['isEmpty']):
+    if (cache != []):
+      print('Expected empty cache, but got data.\n')
+      sys.exit(1)
+    return;
+
+  if (cache == []):
+    print('Expected cache contents, but got none.\n')
+    sys.exit(1)
+
+  hadHomeDir = False
+  for value in cache:
+    if (value['key'] == 'CMAKE_HOME_DIRECTORY'):
+      hadHomeDir = True
+
+  if (not hadHomeDir):
+    print('No CMAKE_HOME_DIRECTORY found in cache.')
+    sys.exit(1)

+ 9 - 15
Tests/Server/server-test.py

@@ -84,7 +84,7 @@ for obj in testData:
         if 'extraGenerator' in data: extraGenerator = data['extraGenerator']
         if not os.path.isabs(buildDirectory):
             buildDirectory = buildDir + "/" + buildDirectory
-        if not os.path.isabs(sourceDirectory):
+        if sourceDirectory != '' and not os.path.isabs(sourceDirectory):
             sourceDirectory = sourceDir + "/" + sourceDirectory
         cmakelib.handshake(proc, major, minor, sourceDirectory, buildDirectory,
           generator, extraGenerator)
@@ -95,26 +95,20 @@ for obj in testData:
         if not 'generator' in data: data['generator'] = cmakeGenerator
         if not 'extraGenerator' in data: data['extraGenerator'] = ''
         cmakelib.validateGlobalSettings(proc, cmakeCommand, data)
+    elif 'validateCache' in obj:
+        data = obj['validateCache']
+        if not 'isEmpty' in data: data['isEmpty'] = false
+        cmakelib.validateCache(proc, data)
     elif 'message' in obj:
         print("MESSAGE:", obj["message"])
+    elif 'reconnect' in obj:
+        cmakelib.exitProc(proc)
+        proc = cmakelib.initProc(cmakeCommand)
     else:
         print("Unknown command:", json.dumps(obj))
         sys.exit(2)
 
     print("Completed")
 
-# Tell the server to exit.
-proc.stdin.close()
-proc.stdout.close()
-
-# Wait for the server to exit.
-# If this version of python supports it, terminate the server after a timeout.
-try:
-    proc.wait(timeout=5)
-except TypeError:
-    proc.wait()
-except:
-    proc.terminate()
-    raise
-
+cmakelib.exitProc(proc)
 sys.exit(proc.returncode)

+ 24 - 0
Tests/Server/tc_cache.json

@@ -0,0 +1,24 @@
+[
+{ "message": "Testing cache" },
+
+{ "message": "Cache after first handshake is empty:" },
+{ "handshake": {"major": 1, "sourceDirectory": "buildsystem1", "buildDirectory": "buildsystem1"} },
+{ "send": { "type": "cache" } },
+{ "validateCache": { "isEmpty": true } },
+
+{ "message": "Cache after configure is populated:" },
+{ "send": { "type": "configure" } },
+{ "reply": { "type": "configure", "skipProgress":true } },
+{ "send": { "type": "cache" } },
+{ "validateCache": { "isEmpty": false } },
+
+{ "message": "Handshake for existing cache requires buildDirectory only:" },
+{ "reconnect": {} },
+{ "handshake": {"major": 1, "sourceDirectory": "", "buildDirectory": "buildsystem1"} },
+
+{ "message": "Cache after reconnect is again populated:" },
+{ "send": { "type": "cache" } },
+{ "validateCache": { "isEmpty": false } },
+
+{ "message": "Everything ok." }
+]

+ 4 - 0
Tests/Server/tc_handshake.json

@@ -11,6 +11,10 @@
 { "send": {"test": "sometext","cookie":"monster"} },
 { "recv": {"cookie":"monster","errorMessage":"No type given in request.","inReplyTo":"","type":"error"} },
 
+{ "message": "Testing commands before handshake" },
+{ "send": {"type": "cache","cookie":"monster"} },
+{ "recv": {"cookie":"monster","errorMessage":"Waiting for type \"handshake\".","inReplyTo":"cache","type":"error"} },
+
 { "message": "Testing handshake" },
 { "send": {"type": "sometype","cookie":"monster2"} },
 { "recv": {"cookie":"monster2","errorMessage":"Waiting for type \"handshake\".","inReplyTo":"sometype","type":"error"} },