changeset 57:d4f1235c860b

Test suit
author Goffi <goffi@goffi.org>
date Mon, 20 Jun 2011 02:59:28 +0200
parents cce259fe3f35
children 58091eac8c8e
files gcp_test.py
diffstat 1 files changed, 118 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcp_test.py	Mon Jun 20 02:59:28 2011 +0200
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+gcp: Goffi's CoPier
+Copyright (C) 2010, 2011  Jérôme Poisson <goffi@goffi.org>
+          (c) 2011        Thomas Preud'homme <robotux@celest.fr>
+
+This program 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.
+
+This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+from __future__ import with_statement
+import tempfile
+import unittest
+from os import getcwd, chdir, system
+from shutil import rmtree
+from random import randrange
+from hashlib import sha1
+
+#size shorcuts
+S10K = 1024 * 10
+S100K = 1024 * 100
+S1M = 1024 * 1024
+S10M = 1024 * 1024 * 10
+S100M = 1024 * 1024 * 100
+
+
+def sha1sum(filename, buf_size=4096):
+    csum = sha1()
+    with open(filename) as fd:
+        data = fd.read(buf_size)
+        while data:
+            csum.update(data)
+            data = fd.read(buf_size)
+    return csum.digest()
+
+#def makeRandomFile(path, size, buf_size=4096):
+#    """Create a fake file
+#    @param path: where the file is created
+#    @param size: size of the file to create in bytes"""
+#    def seq(size):
+#        return ''.join(chr(randrange(256)) for i in range(size))
+#    fd = open(path, 'w')
+#    for byte in range(size//buf_size):
+#        fd.write(seq(buf_size))
+#    fd.write(seq(size%buf_size))
+#    fd.close()
+
+def makeRandomFile(path, size, buf_size=4096):
+    """Create a fake file using /dev/urandom
+    @param path: where the file is created
+    @param size: size of the file to create in bytes"""
+    source = open('/dev/urandom','r')
+    dest = open(path, 'w')
+    for byte in range(size//buf_size):
+        dest.write(source.read(buf_size))
+    dest.write(source.read(size%buf_size))
+    dest.close()
+
+
+class TestCopyCases(unittest.TestCase):
+    """Test basic copy use cases, using gcp externally
+    gcp must be available in the PATH"""
+    #TODO: check journal
+
+    def setUp(self):
+        self.ori_dir = getcwd()
+        self.tmp_dir = tempfile.mkdtemp()
+        chdir(self.tmp_dir)
+
+    def tearDown(self):
+        chdir(self.ori_dir)
+        rmtree(self.tmp_dir)
+        
+
+    def test_one_file_copy(self):
+        """Copy one file and test the result"""
+        makeRandomFile('file_1', S10K)
+        ori_sum = sha1sum('file_1')
+        ret = system("gcp file_1 file_2")
+        self.assertEqual(ret,0)
+        dest_sum = sha1sum('file_2')
+        self.assertEqual(ori_sum, dest_sum)
+
+    def test_one_file_copy_already_exists(self):
+        """Check that an existing file is not overwritten"""
+        makeRandomFile('file_1', S10K)
+        makeRandomFile('file_2', S10K)
+        file_2_sum = sha1sum('file_2')
+        ret = system("gcp file_1 file_2")
+        self.assertNotEqual(ret,0)
+        file_2_sum_bis = sha1sum('file_2')
+        self.assertEqual(file_2_sum, file_2_sum_bis)
+
+    def test_one_file_copy_already_exists_force(self):
+        """Check that an existing file is overwritten with --force"""
+        makeRandomFile('file_1', S10K)
+        makeRandomFile('file_2', S10K)
+        file_1_sum = sha1sum('file_1')
+        ret = system("gcp -f file_1 file_2")
+        self.assertEqual(ret,0)
+        file_2_sum_bis = sha1sum('file_2')
+        self.assertEqual(file_1_sum, file_2_sum_bis)
+
+
+if __name__ == '__main__':
+    unittest.main()