📄 readme
字号:
(-*- text -*-) Subversion Commandline Client: Test Suite ==========================================The cmdline client test suite doesn't use the C-level testingframework, but is structured similarly. Instead of testing libraryAPIs, it drives the client just like a user would, examining theoutput and the on-disk results (i.e., the working copy) carefully asit goes. In other words, this is "black box" testing of thecommand-line client. It has no access to code internals; it neverlooks inside the .svn/ directory; it only performs actions that ahuman user would do.These tests require Python 2.0 or later. [ For more general information on Subversion's testing system, please read the README in subversion/tests/. ]How To Run The Tests====================To run a test script over ra_local, invoke it from THIS DIRECTORY. $ cd subversion/tests/cmdline/Invoke the script with no arguments to run all the tests in thatscript: $ ./basic_tests.pyInvoke with one or more numeric arguments to run those particular tests: $ ./basic_tests.py 7 13 17And invoke with the "--list" option to list information about some orall tests available in that script: $ ./basic_tests.py --list 2 3 4 $ ./basic_tests.py --listNote: if you are building Subversion in a directory other than the sourcedirectory (q.v. INSTALL), you will have to invoke the tests from withinthe build directory: $ cd obj/subversion/tests/cmdline $ ../../../../svn/subversion/tests/cmdline/basic_tests.pyRunning over ra_dav-------------------Running a script over ra_dav is basically the same, but you have toset up httpd 2.0 first (on the same machine, since the tests createrepositories on the fly), and pass a URL argument to the test scripts.Assuming you have httpd 2.0 installed in /usr/local/apache2, just addtwo Location directives to /usr/local/apache2/conf/httpd.conf, withpaths adjusted appropriately: <Location /svn-test-work/repositories> DAV svn SVNParentPath /home/yourusernamehere/projects/svn/subversion/tests/cmdline/svn-test-work/repositories AuthzSVNAccessFile /home/yourusernamehere/projects/svn/subversion/tests/cmdline/svn-test-work/authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /usr/local/apache2/conf/users Require valid-user </Location> <Location /svn-test-work/local_tmp/repos> DAV svn SVNPath /home/yourusernamehere/projects/svn/subversion/tests/cmdline/svn-test-work/local_tmp/repos AuthzSVNAccessFile /home/yourusernamehere/projects/svn/subversion/tests/cmdline/svn-test-work/authz AuthType Basic AuthName "Subversion Repository" AuthUserFile /usr/local/apache2/conf/users Require valid-user </Location>Httpd should be running on port 80. You may also need to ensure thatit's running as you, so it has read/write access to the repositoriesthat are probably living in your Subversion working copy. To do this,set the User and Group directives in httpd.conf, something like this: User yourusernamehere Group usersYou need to run the tests over ra_dav with authentication enabled, sojust drop the following 2-line snippet into the/usr/local/apache2/conf/users file [1]:----------------------------jrandom:xCGl35kV9oWCYjconstant:xCGl35kV9oWCY----------------------------Now, (re)start Apache and run the tests over ra_dav.You can run a test script over ra_dav: $ ./basic_tests.py --url http://localhost $ ./basic_tests.py --url http://localhost 3or $ ./basic_tests.py --url=http://localhost $ ./basic_tests.py --url=http://localhost 3If you run httpd on a port other than 80, you can specify the port inthe URL: "http://localhost:15835" for example.To run all tests over ra_dav, pass BASE_URL when running 'make check'from the top of the build dir: $ make check BASE_URL=http://localhostBASE_URL=URL can also be used when running individual tests: $ ./basic_tests.py BASE_URL=http://localhost $ ./basic_tests.py BASE_URL=http://localhost 3Note [1]: It would be quite too much to expect those password entries to work on Windows... Apache httpd on Windows doesn't understand crypted passwords, but it does understand MD5-hashed passwords. The correct password entries for Windows are: ---------------------------- jrandom:$apr1$3p1.....$FQW6RceW5QhJ2blWDQgKn0 jconstant:$apr1$jp1.....$Usrqji1c9H6AbOxOGAzzb0 ----------------------------Running over ra_svn-------------------It's also easy to run the tests against a local svnserve:$ subversion/svnserve/svnserve -d -r `pwd`/subversion/tests/cmdline$ make check BASE_URL=svn://localhostor, to run individual tests,$ ./basic_tests.py --url=svn://localhost 3Directory Contents================== *.py The tests themselves. svntest/ Python package, provides test suite framework /main.py: Global vars, utility routines; exports run_tests(), the main test routine. /tree.py: Infrastructure for SVNTreeNode class. - tree constructors, tree comparison routines. - routines to parse subcommand output into specific kinds of trees. - routines to parse a working copy and entries files into specific kinds of trees. /wc.py: Functions for interacting with a working copy, and converting to/from trees. /actions.py: Main API for driving subversion client and using trees to verify results. /entry.py: Parse an `entries' file (### not used yet)What the Python Tests are Doing===============================I. Theory A. Types of Verification The point of this test system is that it's *automated*: that is, each test can algorithmically verify the results and indicate "PASS" or "FAIL". We've identified two broad classes of verification: 1. Verifying svn subcommand output. Most important subcommands (co, up, ci, im, st) print results to stdout as a list of paths. Even though the paths may be printed out in an unpredictable order, we still want to make sure this list is exactly the *set* of lines we expect to get. 2. Verifying the working copy itself. Every time a subcommand could potentially change something on disk, we need to inspect the working copy. Specifically, this means we need to make sure the working copy has exactly the tree-structure we expect, and each file has exactly the contents and properties we expect.II. Practice: Trees Sam TH <sam@uchicago.edu> proposed and began work on a solution whereby all important, inspectable information is parsed into a general, in-memory tree representation. By comparing actual vs. expected tree structures, we get automated verification. A. Tree node structure Each "tree node" in a tree has these fields: - name : the name of the node - children: list of child nodes (if the node is a dir) - contents: textual contents (if the node is a file) - properties: a hash to hold subversion props - atts: a hash of meta-information about tree nodes themselves B. Parsing subcommand output into a tree Special parsers examine lines printed by subcommands, and convert them into a tree of tree-nodes. The 'contents' and 'properties' fields are empty; but prepending on the subcommand, specific attributes in the 'atts' field are set in tree-nodes: - svn co/up: a 'status' attribute is set to a two-character value from the set (A, D, G, U, C, _, ' ') or a 'verb' attribute is set to ('Restored') - svn status: a 'status' attribute (as above), plus 'wc_rev' and 'repos_rev' attributes to hold the wc and repos revision numbers. - svn ci/im: a 'verb' attribute is set to one of (Adding, Sending, Deleting) C. Parsing a working copy into a tree We also have a routines that walks a regular working copy and returns a tree representing disk contents and props. In this case the 'atts' hash in each node is empty, but the 'contents' and 'props' fields are filled in.How to Write New Tests======================If you'd like to write a new python test, first decide which file itmight fit into; test scripts each contain collections of tests groupedby rough categories. (Is it testing a new subcommand? Newenhancement? Tricky use-case? Regression test?)Next, read the long documentation comment at the top ofsvntest/tree.py. It will explain the general API that most tests use.Finally, try copying-and-pasting a simple test and then edit fromthere. Don't forget to add your test to the 'test_list' variable atthe bottom of the file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -