comparison gcp_test.py @ 57:d4f1235c860b

Test suit
author Goffi <goffi@goffi.org>
date Mon, 20 Jun 2011 02:59:28 +0200
parents
children
comparison
equal deleted inserted replaced
56:cce259fe3f35 57:d4f1235c860b
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 """
5 gcp: Goffi's CoPier
6 Copyright (C) 2010, 2011 Jérôme Poisson <goffi@goffi.org>
7 (c) 2011 Thomas Preud'homme <robotux@celest.fr>
8
9 This program is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 """
22
23 from __future__ import with_statement
24 import tempfile
25 import unittest
26 from os import getcwd, chdir, system
27 from shutil import rmtree
28 from random import randrange
29 from hashlib import sha1
30
31 #size shorcuts
32 S10K = 1024 * 10
33 S100K = 1024 * 100
34 S1M = 1024 * 1024
35 S10M = 1024 * 1024 * 10
36 S100M = 1024 * 1024 * 100
37
38
39 def sha1sum(filename, buf_size=4096):
40 csum = sha1()
41 with open(filename) as fd:
42 data = fd.read(buf_size)
43 while data:
44 csum.update(data)
45 data = fd.read(buf_size)
46 return csum.digest()
47
48 #def makeRandomFile(path, size, buf_size=4096):
49 # """Create a fake file
50 # @param path: where the file is created
51 # @param size: size of the file to create in bytes"""
52 # def seq(size):
53 # return ''.join(chr(randrange(256)) for i in range(size))
54 # fd = open(path, 'w')
55 # for byte in range(size//buf_size):
56 # fd.write(seq(buf_size))
57 # fd.write(seq(size%buf_size))
58 # fd.close()
59
60 def makeRandomFile(path, size, buf_size=4096):
61 """Create a fake file using /dev/urandom
62 @param path: where the file is created
63 @param size: size of the file to create in bytes"""
64 source = open('/dev/urandom','r')
65 dest = open(path, 'w')
66 for byte in range(size//buf_size):
67 dest.write(source.read(buf_size))
68 dest.write(source.read(size%buf_size))
69 dest.close()
70
71
72 class TestCopyCases(unittest.TestCase):
73 """Test basic copy use cases, using gcp externally
74 gcp must be available in the PATH"""
75 #TODO: check journal
76
77 def setUp(self):
78 self.ori_dir = getcwd()
79 self.tmp_dir = tempfile.mkdtemp()
80 chdir(self.tmp_dir)
81
82 def tearDown(self):
83 chdir(self.ori_dir)
84 rmtree(self.tmp_dir)
85
86
87 def test_one_file_copy(self):
88 """Copy one file and test the result"""
89 makeRandomFile('file_1', S10K)
90 ori_sum = sha1sum('file_1')
91 ret = system("gcp file_1 file_2")
92 self.assertEqual(ret,0)
93 dest_sum = sha1sum('file_2')
94 self.assertEqual(ori_sum, dest_sum)
95
96 def test_one_file_copy_already_exists(self):
97 """Check that an existing file is not overwritten"""
98 makeRandomFile('file_1', S10K)
99 makeRandomFile('file_2', S10K)
100 file_2_sum = sha1sum('file_2')
101 ret = system("gcp file_1 file_2")
102 self.assertNotEqual(ret,0)
103 file_2_sum_bis = sha1sum('file_2')
104 self.assertEqual(file_2_sum, file_2_sum_bis)
105
106 def test_one_file_copy_already_exists_force(self):
107 """Check that an existing file is overwritten with --force"""
108 makeRandomFile('file_1', S10K)
109 makeRandomFile('file_2', S10K)
110 file_1_sum = sha1sum('file_1')
111 ret = system("gcp -f file_1 file_2")
112 self.assertEqual(ret,0)
113 file_2_sum_bis = sha1sum('file_2')
114 self.assertEqual(file_1_sum, file_2_sum_bis)
115
116
117 if __name__ == '__main__':
118 unittest.main()