author | Brock Pytlik <bpytlik@sun.com> |
Mon, 16 Aug 2010 16:48:50 -0700 | |
changeset 2026 | d1b30615bc99 |
parent 1715 | 8f305f0a6864 |
child 3158 | 58c9c2c21e67 |
permissions | -rw-r--r-- |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
2 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
4 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
8 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
13 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
19 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
21 |
# |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
22 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
23 |
# |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
24 |
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
25 |
# |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
26 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
27 |
import testutils |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
28 |
if __name__ == "__main__": |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
29 |
testutils.setup_environment("../../../proto") |
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
30 |
import pkg5unittest |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
31 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
32 |
import errno |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
33 |
import os |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
34 |
import sys |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
35 |
import shutil |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
36 |
import tempfile |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
37 |
import unittest |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
38 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
39 |
import pkg.file_layout.file_manager as file_manager |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
40 |
import pkg.file_layout.layout as layout |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
41 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
42 |
path_to_pub_util = "../util/publish" |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
43 |
|
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
44 |
class TestFileManager(pkg5unittest.CliTestCase): |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
45 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
46 |
def setUp(self): |
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
47 |
pkg5unittest.CliTestCase.setUp(self) |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
48 |
self.base_dir = os.path.join(self.test_root, "fm") |
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
49 |
os.mkdir(self.base_dir) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
50 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
51 |
@staticmethod |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
52 |
def old_hash(s): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
53 |
return os.path.join(s[0:2], s[2:8], s) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
54 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
55 |
def touch_old_file(self, s): |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
56 |
p = os.path.join(self.base_dir, self.old_hash(s)) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
57 |
if not os.path.exists(os.path.dirname(p)): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
58 |
os.makedirs(os.path.dirname(p)) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
59 |
fh = open(p, "wb") |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
60 |
fh.write(s) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
61 |
fh.close() |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
62 |
return p |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
63 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
64 |
def update_file_layout(self, dir_path, exit=0): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
65 |
""" Run the script from the util directory.""" |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
66 |
cmdline = "%s/update_file_layout.py %s" % (path_to_pub_util, |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
67 |
dir_path) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
68 |
self.cmdline_run(cmdline, exit=exit) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
69 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
70 |
def test_1(self): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
71 |
""" Test that pkg.migrate correctly moves files from the old |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
72 |
layout to the new layout correctly.""" |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
73 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
74 |
hashes = ["2be802388acdf0e17c1ea0855be5d29715290d01", |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
75 |
"0338a1ee2a98c7c9cedbff6e5a4a93a88ba05b72", |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
76 |
"ff9ea25633b995eeb4c0ae896b9f7586f8effceb", |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
77 |
"ff9ea25633b995eeb4c0ae896b9f7586f8effcec", |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
78 |
"a24ba602e0f43bac4eb6223de54a003c63d9b8d9" |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
79 |
] |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
80 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
81 |
old_paths = [self.touch_old_file(h) for h in hashes] |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
82 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
83 |
self.update_file_layout(self.base_dir) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
84 |
for p in old_paths: |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
85 |
if os.path.exists(p): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
86 |
raise RuntimeError("%s should not exist" % p) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
87 |
if os.path.exists(os.path.dirname(p)): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
88 |
raise RuntimeError("directory %s should not " |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
89 |
"exist") |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
90 |
l = layout.get_preferred_layout() |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
91 |
for h in hashes: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
92 |
if not os.path.exists(os.path.join(self.base_dir, |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
93 |
l.lookup(h))): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
94 |
raise RuntimeError("file for %s is missing" % h) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
95 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
96 |
self.update_file_layout(self.base_dir) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
97 |
for h in hashes: |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
98 |
if not os.path.exists(os.path.join(self.base_dir, |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
99 |
l.lookup(h))): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
100 |
raise RuntimeError("file for %s is missing" % h) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
101 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
102 |
def test_opts(self): |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
103 |
"""Test command options work correctly and that migrating an |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
104 |
empty directory performs as expected.""" |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
105 |
|
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
106 |
self.update_file_layout("", exit=2) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
107 |
self.update_file_layout("%s %s" % |
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
108 |
(self.base_dir, self.base_dir), exit=2) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
109 |
self.update_file_layout("/foo/doesntexist/", exit=2) |
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
110 |
|
2026
d1b30615bc99
9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents:
1715
diff
changeset
|
111 |
empty_dir = tempfile.mkdtemp(dir=self.base_dir) |
1491
f19012cf97a0
12475 Need a program to migrate a depot from v0 layout to v1 layout
Brock Pytlik <bpytlik@sun.com>
parents:
diff
changeset
|
112 |
self.update_file_layout(empty_dir) |
1715
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
113 |
|
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
114 |
if __name__ == "__main__": |
8f305f0a6864
8265 EINVAL on rmdir running "make test"
Dan Price <dp@eng.sun.com>
parents:
1491
diff
changeset
|
115 |
unittest.main() |