add mongodb backup and restore scripts in testAPI 49/15249/2
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 7 Jun 2016 06:34:14 +0000 (14:34 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 7 Jun 2016 06:52:09 +0000 (14:52 +0800)
add directory update
add files backup.py restore.py utils.py

JIRA: FUNCTEST-297

Change-Id: I6e8b6c4b87b6081e67bc3e1a7605c83d0232e3ca
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
utils/test/result_collection_api/update/__init__.py [new file with mode: 0644]
utils/test/result_collection_api/update/backup.py [new file with mode: 0644]
utils/test/result_collection_api/update/restore.py [new file with mode: 0644]
utils/test/result_collection_api/update/utils.py [new file with mode: 0644]

diff --git a/utils/test/result_collection_api/update/__init__.py b/utils/test/result_collection_api/update/__init__.py
new file mode 100644 (file)
index 0000000..363bc38
--- /dev/null
@@ -0,0 +1,8 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
diff --git a/utils/test/result_collection_api/update/backup.py b/utils/test/result_collection_api/update/backup.py
new file mode 100644 (file)
index 0000000..faa4fd4
--- /dev/null
@@ -0,0 +1,44 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import os
+import argparse
+import datetime
+
+from utils import execute, main, get_abspath
+
+parser = argparse.ArgumentParser(description='Backup MongoDBs')
+
+parser.add_argument('-u', '--url',
+                    type=str,
+                    required=False,
+                    default='mongodb://127.0.0.1:27017/',
+                    help='Mongo DB URL for Backups')
+parser.add_argument('-o', '--output_dir',
+                    type=str,
+                    required=False,
+                    default='./',
+                    help='Output directory for the backup.')
+
+parser.add_argument('-d', '--db',
+                    type=str,
+                    required=False,
+                    default='test_results_collection',
+                    help='database for the backup.')
+
+
+def backup(args):
+    db = args.db
+    out = get_abspath(args.output_dir)
+    now = datetime.datetime.now()
+    out = os.path.join(out, '%s__%s' % (db, now.strftime('%Y_%m_%d_%H%M%S')))
+    cmd = ['mongodump', '-o', '%s' % out]
+    execute(cmd, args)
+
+if __name__ == '__main__':
+    main(backup, parser)
diff --git a/utils/test/result_collection_api/update/restore.py b/utils/test/result_collection_api/update/restore.py
new file mode 100644 (file)
index 0000000..a2b65f3
--- /dev/null
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import argparse
+
+from utils import execute, main, get_abspath
+
+parser = argparse.ArgumentParser(description='Restore MongoDBs')
+
+parser.add_argument('-u', '--url',
+                    type=str,
+                    required=False,
+                    default='mongodb://127.0.0.1:27017/',
+                    help='Mongo DB URL for Backup')
+parser.add_argument('-i', '--input_dir',
+                    type=str,
+                    required=False,
+                    default='./',
+                    help='Input directory for the Restore.')
+parser.add_argument('-d', '--db',
+                    type=str,
+                    required=False,
+                    default=None,
+                    help='database for the restore.')
+
+
+def restore(args):
+    input_dir = get_abspath(args.input_dir)
+    cmd = ['mongorestore', '%s' % input_dir]
+    execute(cmd, args)
+
+
+if __name__ == '__main__':
+    main(restore, parser)
diff --git a/utils/test/result_collection_api/update/utils.py b/utils/test/result_collection_api/update/utils.py
new file mode 100644 (file)
index 0000000..ef93f33
--- /dev/null
@@ -0,0 +1,44 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import os
+import urlparse
+import subprocess
+
+
+def get_abspath(path):
+    assert os.path.isdir(path), 'Path %s can\'t be found.' % path
+    return os.path.abspath(path)
+
+
+def url_parse(url):
+    url = urlparse.urlparse(url)
+    assert url.scheme == 'mongodb', 'URL must be a MongoDB URL'
+
+    return url.username, url.password, url.hostname, url.port
+
+
+def execute(cmd, args):
+    (username, password, hostname, port) = url_parse(args.url)
+    cmd.extend(['--host', '%s' % hostname, '--port', '%s' % port])
+    db = args.db
+    if db is not None:
+        cmd.extend(['--db', '%s' % db])
+    if username is not None:
+        cmd.extend(['-u', '%s' % username, '-p', '%s' % password])
+    print('execute: %s' % cmd)
+    execute_output = subprocess.check_output(cmd)
+    print(execute_output)
+
+
+def main(method, parser):
+    args = parser.parse_args()
+    try:
+        method(args)
+    except AssertionError, msg:
+        print(msg)