This README covers documentation on how to develop with and test against
a local CIDB instance. Whenever you add or modify a cidb feature you should run
cidb_integration_test.py. Specifically, there are two large sets of data that
can be used for adding tests. Data for these are stored in individual json files
that are stored in .test_data/. Each series has a readme that roughly describes
what is in the data.

However, when adding a new test, this may not be sufficient. The test launches a
local mysqld instance that runs out of a temporary directory. To prevent this
directory from disappearing at the end of the test, run the test with --no-wipe.
$ lib/cidb_integration_test --debug --no-wipe
The test logs the path to the temporary working directory at the end.

You can launch the mysqld server again to play with the database in its final
state. If `tmpdir` is the temporary directory left behind by the test, Inside
the chroot, run:

$ /usr/sbin/mysqld --no-defaults --datadir ${tmpdir}/mysqld_dir --socket \
    ${tmpdir}/mysqld_dir/mysqld.socket --port 8440 --pid-file \
    ${tmpdir}/mysqld_dir/mysqld.pid --tmpdir ${tmpdir}/mysqld_dir/tmp

You can connect to this instance using mysql client.

$ mysql -u root -S ${tmpdir}/mysqld_dir/mysqld.socket

At this point you can run normal SQL. To double check, run `show tables;`
You can then use the data here to create your own integration test to test
something you added to CIDB.

When you're done, remember to shutdown the mysqld instance, and delete the
temporary directory.

$ mysqldadmin -u root -S ${tmpdir}/mysqld_dir/mysqld.socket shutdown
$ rm -rf ${tmpdir}

Please see ./schema.dump.readme for more information on how to read the schema.
