1{
2 system ? builtins.currentSystem,
3 config ? { },
4 pkgs ? import ../../.. { inherit system config; },
5 lib ? pkgs.lib,
6}:
7
8let
9 inherit (import ./common.nix { inherit pkgs lib; }) mkTestName mariadbPackages;
10
11 makeTest = import ./../make-test-python.nix;
12
13 makeBackupTest =
14 {
15 package,
16 name ? mkTestName package,
17 }:
18 makeTest {
19 name = "${name}-backup";
20
21 nodes = {
22 master =
23 { pkgs, ... }:
24 {
25 services.mysql = {
26 inherit package;
27 enable = true;
28 initialDatabases = [
29 {
30 name = "testdb";
31 schema = ./testdb.sql;
32 }
33 ];
34 };
35
36 services.mysqlBackup = {
37 enable = true;
38 databases = [
39 "doesnotexist"
40 "testdb"
41 ];
42 };
43 };
44 };
45
46 testScript = ''
47 start_all()
48
49 # Delete backup file that may be left over from a previous test run.
50 # This is not needed on Hydra but useful for repeated local test runs.
51 master.execute("rm -f /var/backup/mysql/testdb.gz")
52
53 # Need to have mysql started so that it can be populated with data.
54 master.wait_for_unit("mysql.service")
55
56 # Wait for testdb to be fully populated (5 rows).
57 master.wait_until_succeeds(
58 "mysql -u root -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"
59 )
60
61 # Do a backup and wait for it to start
62 master.start_job("mysql-backup.service")
63
64 # wait for backup to fail, because of database 'doesnotexist'
65 master.wait_until_fails("systemctl is-active -q mysql-backup.service")
66
67 # wait for backup file and check that data appears in backup
68 master.wait_for_file("/var/backup/mysql/testdb.gz")
69 master.succeed(
70 "${pkgs.gzip}/bin/zcat /var/backup/mysql/testdb.gz | grep hello"
71 )
72
73 # Check that a failed backup is logged
74 master.succeed(
75 "journalctl -u mysql-backup.service | grep 'fail.*doesnotexist' > /dev/null"
76 )
77 '';
78 };
79in
80lib.mapAttrs (_: package: makeBackupTest { inherit package; }) mariadbPackages