Browse code

* testsuite, run-tests.py: Added testsuite with first few tests.

git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@232 830e0280-6d2a-0410-9c65-932aecc39d9d

Michal Ludvig authored on 2008/09/10 00:31:20
Showing 8 changed files
... ...
@@ -1,5 +1,9 @@
1 1
 2008-09-10  Michal Ludvig  <michal@logix.cz>
2 2
 
3
+	* testsuite, run-tests.py: Added testsuite with first few tests.
4
+
5
+2008-09-10  Michal Ludvig  <michal@logix.cz>
6
+
3 7
 	* s3cmd, S3/S3Uri.py, S3/S3.py: All internal representations of
4 8
 	  S3Uri()s are Unicode (i.e. not UTF-8 but type()==unicode). It 
5 9
 	  still doesn't work on non-UTF8 systems though.
6 10
new file mode 100755
... ...
@@ -0,0 +1,93 @@
0
+#!/usr/bin/env python
1
+
2
+## Amazon S3cmd - testsuite
3
+## Author: Michal Ludvig <michal@logix.cz>
4
+##         http://www.logix.cz/michal
5
+## License: GPL Version 2
6
+
7
+import sys
8
+import re
9
+from subprocess import Popen, PIPE, STDOUT
10
+
11
+count_pass = 0
12
+count_fail = 0
13
+
14
+def test(label, cmd_args = [], retcode = 0, must_find = [], must_not_find = [], must_find_re = [], must_not_find_re = []):
15
+	def failure(message = ""):
16
+		global count_fail
17
+		if message:
18
+			message = "  (%s)" % message
19
+		print "FAIL%s" % (message)
20
+		count_fail += 1
21
+		print "----"
22
+		print " ".join([arg.find(" ")>=0 and "'%s'" % arg or arg for arg in cmd_args])
23
+		print "----"
24
+		print stdout
25
+		print "----"
26
+		return 1
27
+	def success(message = ""):
28
+		global count_pass
29
+		if message:
30
+			message = "  (%s)" % message
31
+		print "OK%s" % (message)
32
+		count_pass += 1
33
+		return 0
34
+	def compile_list(_list, regexps = False):
35
+		if type(_list) not in [ list, tuple ]:
36
+			_list = [_list]
37
+
38
+		if regexps == False:
39
+			_list = [re.escape(item) for item in _list]
40
+
41
+		return [re.compile(item) for item in _list]
42
+	
43
+	print (label + " ").ljust(30, "."),
44
+	sys.stdout.flush()
45
+
46
+	p = Popen(cmd_args, stdout = PIPE, stderr = STDOUT, universal_newlines = True)
47
+	stdout, stderr = p.communicate()
48
+	if retcode != p.returncode:
49
+		return failure("retcode: %d, expected: %d" % (p.returncode, retcode))
50
+
51
+	find_list = []
52
+	find_list.extend(compile_list(must_find))
53
+	find_list.extend(compile_list(must_find_re, regexps = True))
54
+	not_find_list = []
55
+	not_find_list.extend(compile_list(must_not_find))
56
+	not_find_list.extend(compile_list(must_not_find_re, regexps = True))
57
+
58
+	for pattern in find_list:
59
+		match = pattern.search(stdout)
60
+		if not match:
61
+			return failure("pattern not found: %s" % match.group())
62
+	for pattern in not_find_list:
63
+		match = pattern.search(stdout)
64
+		if match:
65
+			return failure("pattern found: %s" % match.group())
66
+	return success()
67
+
68
+def test_s3cmd(label, cmd_args = [], **kwargs):
69
+	if not cmd_args[0].endswith("s3cmd"):
70
+		cmd_args.insert(0, "./s3cmd")
71
+	return test(label, cmd_args, **kwargs)
72
+
73
+test_s3cmd("Remove test buckets", ['rb', '-r', 's3://s3cmd-autotest-1', 's3://s3cmd-autotest-2', 's3://s3cmd-autotest-3'],
74
+	must_find = [ "Bucket 's3://s3cmd-autotest-1/' removed",
75
+		      "Bucket 's3://s3cmd-autotest-2/' removed",
76
+		      "Bucket 's3://s3cmd-autotest-3/' removed" ])
77
+	
78
+test_s3cmd("Create one bucket", ['mb', 's3://s3cmd-autotest-1'], 
79
+	must_find = "Bucket 's3://s3cmd-autotest-1/' created")
80
+
81
+test_s3cmd("Create multiple buckets", ['mb', 's3://s3cmd-autotest-2', 's3://s3cmd-autotest-3'], 
82
+	must_find = [ "Bucket 's3://s3cmd-autotest-2/' created", "Bucket 's3://s3cmd-autotest-3/' created" ])
83
+
84
+test_s3cmd("Invalid bucket name", ["mb", "s3://s3cmd-Autotest-.-"], 
85
+	retcode = 1,
86
+	must_find = "ERROR: Parameter problem: Bucket name", 
87
+	must_not_find_re = "Bucket.*created")
88
+
89
+test_s3cmd("Buckets list", ["ls"], 
90
+	must_find = [ "autotest-1", "autotest-2", "autotest-3" ], must_not_find_re = "Autotest")
91
+
92
+test_s3cmd("Sync with exclude", ['sync', 'testsuite', 's3://s3cmd-autotest-1/xyz/', '--exclude', '*/thousands/*', '--no-encrypt'])
... ...
@@ -25,18 +25,13 @@ rm -f s3cmd-${VER}/file.to.remove
25 25
 ./s3cmd sync --delete s3cmd-${VER} s3://s3cmd-autotest/sync-test
26 26
 rm -f s3cmd-${VER}/S3/PkgInfo.py
27 27
 rm -f s3cmd-${VER}/s3cmd
28
-./s3cmd sync --delete --exclude "/s3cmd-${VER}/S3/*" s3://s3cmd-autotest/sync-test s3cmd-${VER}
28
+./s3cmd sync --delete --exclude "/s3cmd-${VER}/S3/S3*" s3://s3cmd-autotest/sync-test s3cmd-${VER}
29 29
 rm -rf s3cmd-${VER}
30 30
 
31 31
 ./s3cmd rb s3://s3cmd-autotest/ || true
32 32
 # ERROR: S3 error: 409 (Conflict): BucketNotEmpty
33 33
 
34
-# hack to remove all objects from a bucket
35
-mkdir empty
36
-./s3cmd sync --delete empty/ s3://s3cmd-autotest
37
-rm -rf empty
38
-
39
-./s3cmd rb s3://s3cmd-autotest/
34
+./s3cmd rb --force s3://s3cmd-autotest/
40 35
 
41 36
 set +x
42 37
 
43 38
new file mode 100644
44 39
Binary files /dev/null and b/testsuite/binary/random-crap differ
45 40
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+cb76ecee9a834eadd96b226493acac28  random-crap
0 1
new file mode 100644
1 2
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+☺ unicode € rocks ™
0 1
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+Žůžo