Index: bin/cbuildbot_comm_unittest.py |
diff --git a/bin/cbuildbot_comm_unittest.py b/bin/cbuildbot_comm_unittest.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..4c95fb6ed072227983ea3aa90bc458c58a866075 |
--- /dev/null |
+++ b/bin/cbuildbot_comm_unittest.py |
@@ -0,0 +1,101 @@ |
+#!/usr/bin/python |
+ |
+# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Units tests for cbuildbot_comm commands.""" |
+ |
+import cbuildbot_comm |
+import sys |
+import threading |
+import time |
+import unittest |
+ |
+_TEST_CONFIG = {'test_slave' : |
+ {'master' : False, |
+ 'hostname' : 'localhost', |
+ 'important' : True}, |
+ 'test_master' : |
+ {'master' : True, |
+ 'important' : False |
+ } |
+ } |
+ |
+# Reduce timeouts. |
+cbuildbot_comm._HEARTBEAT_TIMEOUT = 2 |
+cbuildbot_comm._MAX_TIMEOUT = 6 |
+ |
+class _MasterSendBadStatus(threading.Thread): |
+ |
+ def __init__(self, test_class): |
+ threading.Thread.__init__(self) |
+ self.test_class = test_class |
+ |
+ def run(self): |
+ # Sleep for heartbeat timeout to let slave start up. |
+ time.sleep(2) |
+ return_value = cbuildbot_comm._SendCommand('localhost', 'bad-command', |
+ 'args') |
+ self.test_class.assertEqual(return_value, |
+ cbuildbot_comm._STATUS_COMMAND_REJECTED) |
+ |
+class _MasterCheckStatusThread(threading.Thread): |
+ |
+ def __init__(self, config, expected_return, test_class): |
+ threading.Thread.__init__(self) |
+ self.config = config |
+ self.expected_return = expected_return |
+ self.test_class = test_class |
+ |
+ def run(self): |
+ return_value = cbuildbot_comm.HaveSlavesCompleted(self.config) |
+ self.test_class.assertEqual(return_value, self.expected_return) |
+ |
+ |
+class CBuildBotCommTest(unittest.TestCase): |
+ |
+ def testSlaveComplete(self): |
+ print >> sys.stderr, '\n>>> Running testSlaveComplete\n' |
+ # Master should check statuses in another thread. |
+ master_thread = _MasterCheckStatusThread(_TEST_CONFIG, True, self) |
+ master_thread.start() |
+ |
+ return_value = cbuildbot_comm.PublishStatus( |
+ cbuildbot_comm.STATUS_BUILD_COMPLETE) |
+ self.assertEqual(return_value, True) |
+ |
+ def testMasterTimeout(self): |
+ print >> sys.stderr, '\n>>> Running testMasterTimeout\n' |
+ return_value = cbuildbot_comm.HaveSlavesCompleted(_TEST_CONFIG) |
+ self.assertEqual(return_value, False) |
+ |
+ def testSlaveTimeout(self): |
+ print >> sys.stderr, '\n>>> Running testSlaveTimeout\n' |
+ return_value = cbuildbot_comm.PublishStatus( |
+ cbuildbot_comm.STATUS_BUILD_COMPLETE) |
+ self.assertEqual(return_value, False) |
+ |
+ def testSlaveFail(self): |
+ print >> sys.stderr, '\n>>> Running testSlaveFail\n' |
+ # Master should check statuses in another thread. |
+ master_thread = _MasterCheckStatusThread(_TEST_CONFIG, False, self) |
+ master_thread.start() |
+ |
+ return_value = cbuildbot_comm.PublishStatus( |
+ cbuildbot_comm.STATUS_BUILD_FAILED) |
+ self.assertEqual(return_value, True) |
+ |
+ def testBadCommand(self): |
+ print >> sys.stderr, '\n>>> Running testSendBadCommand\n' |
+ # Master should check statuses in another thread. |
+ master_thread = _MasterSendBadStatus(self) |
+ master_thread.start() |
+ |
+ return_value = cbuildbot_comm.PublishStatus( |
+ cbuildbot_comm.STATUS_BUILD_COMPLETE) |
+ self.assertEqual(return_value, False) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |