summaryrefslogtreecommitdiffstats
path: root/debian/tests/smoke
blob: 06227bdf5be420b544fc73a89d39952b733f1b53 (plain)
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
#!/bin/sh
# dep8 smoke test for mysql-server
# Author: Robie Basak <robie.basak at canonical.com>
#
# This test should be declared in debian/tests/control with a dependency
# on the package that provides a configured MariaDB server (eg.
# mariadb-server).
#
# This test should be declared in debian/tests/control with the
# following restrictions:
# - allow-stderr (set -x always outputs to stderr)
# - needs-root (to be able to log into the database)
# - isolation-container (to be able to start service)
#
# This test:
#
# 1) Creates a test database and test user as the root user.
#
# 2) Creates a test table and checks it appears to operate normally
# using the test user and test database.
#
# 3) Checks compression support for InnoDB & RocksDB engine.

echo "Running test 'smoke'"
set -ex

# Start the daemon if it was not running. For example in Docker testing
# environments there might not be any systemd et al and the service needs to
# be started manually.
if ! command -v systemctl
then
  if ! /etc/init.d/mariadb status
  then
    echo "Did not find systemctl and daemon was not running, starting it.."
    /etc/init.d/mariadb start
  fi
else
  # If systemd (and systemctl) is available, but the service did not start, then
  # this smoke test is supposed to fail if next commands don't work.
  echo "Found systemctl, continuing smoke test.."
  # Compression plugins are separated from main server package
  # to own packages (for example LZ4 package mariadb-plugin-provider-lz4)
  # and they are installed after mariadb-server.
  # which means that they don't exist if MariaDB is not restarted
  systemctl restart mariadb
fi

mariadb <<EOT
CREATE DATABASE testdatabase;
CREATE USER 'testuser'@'localhost' identified by 'testpassword';
GRANT ALL ON testdatabase.* TO 'testuser'@'localhost';
EOT

mariadb testdatabase <<EOT
CREATE TABLE foo (bar INTEGER);
INSERT INTO foo (bar) VALUES (41);
EOT

result=$(echo 'SELECT bar+1 FROM foo;' | mariadb --batch --skip-column-names --user=testuser --password=testpassword testdatabase)
if [ "$result" != "42" ]
then
  echo "Unexpected result" >&2
  exit 1
fi

mariadb --user=testuser --password=testpassword testdatabase <<EOT
DROP TABLE foo;
EOT

mariadb <<EOT
DROP DATABASE testdatabase;
DROP USER 'testuser'@'localhost';
EOT

# This will never fail but exists purely for debugging purposes in case a later
# step would fail
mariadb <<EOT
SHOW GLOBAL STATUS WHERE Variable_name LIKE 'Innodb_have_%';
EOT

mariadb <<EOT
SET GLOBAL innodb_compression_algorithm=lz4;
SET GLOBAL innodb_compression_algorithm=lzo;
SET GLOBAL innodb_compression_algorithm=lzma;
SET GLOBAL innodb_compression_algorithm=bzip2;
SET GLOBAL innodb_compression_algorithm=snappy;
SET GLOBAL innodb_compression_algorithm=zlib;
SET GLOBAL innodb_compression_algorithm=none;
EOT

# Check whether RocksDB should be installed or not
plugin=mariadb-plugin-rocksdb
if [ "$(dpkg-architecture -qDEB_HOST_ARCH_BITS)" != 32 ] &&
   [ "$(dpkg-architecture -qDEB_HOST_ARCH_ENDIAN)" = little ]
then
  dpkg-query -W $plugin

  LOG=/var/lib/mysql/#rocksdb/LOG
  # XXX: The server may only be started during the install of
  #      mariadb-server, which happens before that of the plugin.
  [ -e $LOG ] || mariadb -e "INSTALL PLUGIN RocksDB SONAME 'ha_rocksdb';"
  # XXX: rocksdb_supported_compression_types variable does not report ZSTD.

  # Print RocksDB supported items so test log is easier to debug
  grep -F " supported:" $LOG

  # Check that the expected compression methods are supported
  for a in LZ4 Snappy Zlib ZSTD
  do
    if ! grep -qE "k$a(Compression)? supported: 1" $LOG
    then
      # Fail with explicit error message
      echo "Error: Compression method $a not supported by RocksDB!" >&2
      exit 1
    fi
  done
else
  if dpkg-query -W $plugin
  then
    echo "Error: Plugin $plugin was found even though it should not exist on a 32-bit and little-endian system"
    exit 1
  fi
fi