summaryrefslogtreecommitdiff
path: root/src/mailman/bin/tests/test_master.py
diff options
context:
space:
mode:
authorBarry Warsaw2010-12-22 16:38:32 -0500
committerBarry Warsaw2010-12-22 16:38:32 -0500
commit506ddd3af859ebb9d6b8fcf746b286a030a0b927 (patch)
tree9a3bfd5244a8fe54cbe24edd7c30536e01c36bc9 /src/mailman/bin/tests/test_master.py
parentecb3dbbacd350845ae11834ac42c17469811bdfa (diff)
downloadmailman-506ddd3af859ebb9d6b8fcf746b286a030a0b927.tar.gz
mailman-506ddd3af859ebb9d6b8fcf746b286a030a0b927.tar.zst
mailman-506ddd3af859ebb9d6b8fcf746b286a030a0b927.zip
Diffstat (limited to 'src/mailman/bin/tests/test_master.py')
-rw-r--r--src/mailman/bin/tests/test_master.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/mailman/bin/tests/test_master.py b/src/mailman/bin/tests/test_master.py
new file mode 100644
index 000000000..cb15f08f9
--- /dev/null
+++ b/src/mailman/bin/tests/test_master.py
@@ -0,0 +1,81 @@
+# Copyright (C) 2010 by the Free Software Foundation, Inc.
+#
+# This file is part of GNU Mailman.
+#
+# GNU Mailman is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
+
+"""Test master watcher utilities."""
+
+from __future__ import absolute_import, unicode_literals
+
+__metaclass__ = type
+__all__ = [
+ 'test_suite',
+ ]
+
+
+import os
+import errno
+import tempfile
+import unittest
+
+from flufl.lock import Lock
+
+from mailman.bin import master
+
+
+
+class TestMasterLock(unittest.TestCase):
+ def setUp(self):
+ fd, self.lock_file = tempfile.mkstemp()
+ os.close(fd)
+ # The lock file should not exist before we try to acquire it.
+ os.remove(self.lock_file)
+
+ def tearDown(self):
+ # Unlocking removes the lock file, but just to be safe (i.e. in case
+ # of errors).
+ try:
+ os.remove(self.lock_file)
+ except OSError as error:
+ if error.errno != errno.ENOENT:
+ raise
+
+ def test_acquire_lock_1(self):
+ lock = master.acquire_lock_1(False, self.lock_file)
+ is_locked = lock.is_locked
+ lock.unlock()
+ self.failUnless(is_locked)
+
+ def test_master_state(self):
+ my_lock = Lock(self.lock_file)
+ # Mailman is not running.
+ state, lock = master.master_state(self.lock_file)
+ self.assertEqual(state, master.WatcherState.none)
+ # Acquire the lock as if another process had already started the
+ # master qrunner.
+ my_lock.lock()
+ try:
+ state, lock = master.master_state(self.lock_file)
+ finally:
+ my_lock.unlock()
+ self.assertEqual(state, master.WatcherState.conflict)
+ # XXX test stale_lock and host_mismatch states.
+
+
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestMasterLock))
+ return suite