~diego-fmpwizard/mysql-proxy/bug-43424

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
TESTING OVERVIEW
----------------

The normal test suite is under ./tests/suite/base
Run it with 

$ make check


Or if you want to run it manually, do

$ lua tests/run-tests.lua tests/suite/base

CREATING A NEW TEST CASE
------------------------
A test case in this testing environment is made of the following components

./t/test_name.test
./t/test_name.lua      (optional)
./t/test_name.options  (optional)  
./r/test_name.result

The basics are like in the server test suite.

a ./t/test_name.test contains SQL statements and mysqltest commands as defined in the manual
http://dev.mysql.com/doc/mysqltest/en/mysqltest-commands.html

The corresponding ./r/test_name.result contains the output of the statements above, as produced by mysqltest.

In addition to the above basics, when preparing a test case for MySSQL Proxy, you can add the following ones:

./t/test_name.lua
This is a Lua script that gets loaded to MySQL Proxy before the test starts.
If no such test is defined, the Proxy starts with an empty script.

./t/test_name.options
This file contains Lua instructions that are executed before the test.
For the user's convenience, there are a few functions that you can call from this file

   * start_proxy(proxy_name, options_table)
     starts a proxy instance, with given parameters. The proxy name is
     used to retrieve information about this instance, to use the proxy
     or to remove it
     example:
     start_proxy('my_name', 
       {
        ["proxy-backend-addresses"] = PROXY_HOST .. ':' .. PROXY_MASTER_PORT ,
        ["proxy-read-only-backend-addresses"] = PROXY_HOST .. ':' .. PROXY_SLAVE_PORT ,
        ["proxy-address"]           = PROXY_HOST .. ':' .. PROXY_PORT ,
        ["admin-address"]           = PROXY_HOST .. ':' .. ADMIN_PORT ,
        ["pid-file"]                = PROXY_PIDFILE,
        ["proxy-lua-script"]        = 'my_name.lua',
        })
    
    As illustrated, there are several global variables that can be referenced within this
    options file:
    PROXY_HOST
    PROXY_PORT
    ADMIN_PORT
    (TODO: complete the list)

   * stop_proxy()
     removes all proxy instances created with start_proxy()

   * simulate_replication([master_options,slave_options])
     starts two instances of the proxy, both pointing to the same
     backend server. You can connect to a real replication, by
     supplying appropriate options

   * chain_proxy(first_lua_script, second_lua_script [, use_replication])
     starts two proxy instances, the first one pointing to the backend
     server, the second one pointing to the first instance.
     If use_replication is given (boolean), then a master backend is used
     instead of a real backend. If no master/slave replication is
     available, simulate_replication() is called

   * sql_execute(queries, proxy_name)
     sends one or more queries to a given proxy. ('queries' can be either
     a string or an array of strings)
     If no proxy name is provided, the query is sent to the backend server.




SKIPPING TESTS
--------------

If you want to skip one or more tests, edit the file suite_name/tests_to_skip.lua


CREATING A NEW TEST SUITE
-------------------------

The Proxy test suite follows the same principles used by the server test suite.
There is a directory (usually ./t) containing .test scripts, with the 
instructions to run. And there is another directory (./r) containing the
expected results. For each .test file in ./t, there must be a corresponding 
.tesult file in ./r
For more information on the test framework, see the manual.
http://dev.mysql.com/doc/mysqltest/en/index.html

To run your test suite, create a directory under ./trunk/tests/suite, add two 
subdirectories /t and /r, and then use the above mentioned command.
For example:
 
$ mkdir tests/suite/myapp
$ mkdir tests/suite/myapp/t
$ mkdir tests/suite/myapp/r

# add test and result files under t and r

$ lua tests/run-tests.lua tests/suite/myapp

LIBRARY PATHS
-------------
The test suite uses the following paths to search for Lua libraries when 
a 'require' statement is issued. Each path is associated to an environment 
variable:

This directory contains Lua libraries
  variable       default                   description
  -------------- ------------------------- -----------------------
  LUA_LDIR       /usr/share/lua/5.1/?.lua  server wide Lua libraries
  LUA_PATH       /usr/local/share/?.lua    MySQL Proxy Lua libraries
  LUA_USER_PATH  ./trunk/lib/?.lua         user defined libraries

In addition to the above paths, the current suite is searched for
libraries as well. 
    suite_name ..  '/t/?.lua'  

TROUBLESHOOTING
---------------

If Lua complains about missing the lfs library, prepend the LUA_CPATH variable to the actual command:
$ LUA_CPATH='tests/.libs/?.so' lua tests/run-tests.lua tests/suite/base

If the test suite complains about access denied, perhaps you need to provide a password. 
The default user for the test suite is 'root', with no password.
If you want to run the tests with a different username and password, 
set the following environment variables
MYSQL_USER
MYSQL_PASSWORD