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... | ... |
@@ -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 |
|