WL#4771: Online Backup: Test cross-platform compatibility

Affects: Server-5.4   —   Status: Complete

Create tests that verify cross-platform compatibility of backup and restore.

Backup image files created on one platform shall be restorable on other platforms.

Ideally it should be tested between all platforms. But at least the most
important platforms Linux <-> Windows shall be tested, as well as platforms of
different endianess, e.g. x86 <-> PowerPC, and finally different word sizes,
e.g. x86 <-> x86_64.

These tests should also be done with streams instead of files. E.g. named pipes
connected via netcat or ssh tunnel.

NOTE
====
1) This could be implemented as a Nuts perl library that can
do SSH to another machine. 

2) An important aspect is backups made on a platform with a file system that has
different case sensitivity than on the platform restore is performed. The tests
should include backup of database/table/view etc names in upper/camel-case,
followed by restore on a case insensitive server. BUG#43363 added some testing
for this name case problem (backup_namecase.test), but more is needed. Once this
WL is complete, it should be considered whether or not backup_namecase can be
removed.

Depends on BUG#9051 (Stored Functions: Database name in fully qualified name is
case sensitive).
Depends on BUG#46096 (SHOW CREATE TRIGGER does not respect lower_case_table_names).
Test that backup image files created on a set of relevant platforms can
be restored on different platforms.

The backup image files shall contain all kinds of objects, which are
supported by online BACKUP.

The contained tables shall have all possible data types and some rows
with extreme values.

The files shall be created on these platforms:

- Linux/x86
- Linux/x86_64
- Windows/32
- Windows/64
- Solaris/Sparc

After every restore, the restored objects shall be tested.

We will not test inter-machine streams like sockets or pipes. The streams
transport byte-wise the same contents as the files. So we test
cross-platform compatibility of the images, and we test streams in form
of named pipes in other tests. Combining these tests is not required.

At the moment, Nuts is not able to support such inter-machine testing.
So we use pre-created backup image files.

Create a test case backup_x_pfm_compat, which creates a test database
and backs it up into a file mysql-test/backup_x_pfm_compat.bak,
where it is not deleted by mysql-test-run.

The test database shall have all kinds of objects, which are supported
by online BACKUP. This can be inspired by backup_client.test.

The test database shall have a table with all possible data types and
some rows with extreme values. This can be inspired by
mysqlbinlog_row_engine.inc.

The test case shall be pushed and thus the backup image files are
implicitly created on all pushbuild platforms.

The backup image files from the platforms as specified in the high level
specification shall be copied into the repository as
mysql-test/suite/backup/std_data/backup_x_pfm_compat-.bak.

Create another test case backup_x_pfm_compat_restore, which restores
each of the backup image files, one after the other. After every
restore, test the restored objects.

Since this task requires two steps, two rounds of reviews are required.