]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test_rados.py: add some tests for mon_command
authorDan Mick <dan.mick@inktank.com>
Tue, 18 Jun 2013 19:20:33 +0000 (12:20 -0700)
committerDan Mick <dan.mick@inktank.com>
Tue, 18 Jun 2013 21:23:05 +0000 (14:23 -0700)
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/test/pybind/test_rados.py

index 25b64383a227d70635bf0f6e612f25960962aa0a..f1825244b26d04d9a40e3cb7b7b88caac32f9547 100644 (file)
@@ -1,7 +1,9 @@
-from nose.tools import eq_ as eq, assert_raises
+from nose.tools import eq_ as eq, assert_raises, assert_greater
 from rados import (Rados, Object, ObjectExists, ObjectNotFound,
                    ANONYMOUS_AUID, ADMIN_AUID)
 import threading
+import json
+import errno
 
 class TestRados(object):
 
@@ -271,3 +273,58 @@ class TestObject(object):
         self.object.seek(0)
         eq(self.object.read(3), 'bar')
         eq(self.object.read(3), 'baz')
+
+class TestMonCommand(object):
+
+    def setUp(self):
+        self.rados = Rados(conffile='')
+        self.rados.connect()
+
+    def tearDown(self):
+        self.rados.shutdown()
+
+    def test_monmap_dump(self):
+
+        # check for success and some plain output with epoch in it
+        cmd = {"prefix":"mon dump"}
+        ret, buf, errs = self.rados.mon_command(json.dumps(cmd), '', timeout=30)
+        eq(ret, 0)
+        assert_greater(len(buf), 0)
+        assert('epoch' in buf)
+
+        # JSON, and grab current epoch
+        cmd['format'] = 'json'
+        ret, buf, errs = self.rados.mon_command(json.dumps(cmd), '', timeout=30)
+        eq(ret, 0)
+        assert_greater(len(buf), 0)
+        d = json.loads(buf)
+        assert('epoch' in d)
+        epoch = d['epoch']
+
+        # assume epoch + 1000 does not exist; test for ENOENT
+        cmd['epoch'] = epoch + 1000
+        ret, buf, errs = self.rados.mon_command(json.dumps(cmd), '', timeout=30)
+        eq(ret, -errno.ENOENT)
+        eq(len(buf), 0)
+        del cmd['epoch']
+
+        # send to specific target by name
+        target = d['mons'][0]['name']
+        print target
+        ret, buf, errs = self.rados.mon_command(json.dumps(cmd), '', timeout=30,
+                                                target=target)
+        eq(ret, 0)
+        assert_greater(len(buf), 0)
+        d = json.loads(buf)
+        assert('epoch' in d)
+
+        # and by rank
+        target = d['mons'][0]['rank']
+        print target
+        ret, buf, errs = self.rados.mon_command(json.dumps(cmd), '', timeout=30,
+                                                target=target)
+        eq(ret, 0)
+        assert_greater(len(buf), 0)
+        d = json.loads(buf)
+        assert('epoch' in d)
+