import ./make-test-python.nix ({ pkgs, lib, ... }: /* This test suite replaces the typical pytestCheckHook function in sqlite3-to-mysql due to the need of a running mysql instance. */ { name = "sqlite3-to-mysql"; meta.maintainers = with lib.maintainers; [ gador ]; nodes.machine = { pkgs, ... }: { environment.systemPackages = with pkgs; [ sqlite3-to-mysql # create one coherent python environment (python3.withPackages (ps: sqlite3-to-mysql.propagatedBuildInputs ++ [ python3Packages.pytest python3Packages.pytest-mock python3Packages.pytest-timeout python3Packages.factory-boy python3Packages.docker # only needed so import does not fail sqlite3-to-mysql ]) ) ]; services.mysql = { package = pkgs.mariadb; enable = true; # from https://github.com/techouse/sqlite3-to-mysql/blob/master/tests/conftest.py # and https://github.com/techouse/sqlite3-to-mysql/blob/master/.github/workflows/test.yml initialScript = pkgs.writeText "mysql-init.sql" '' create database test_db DEFAULT CHARACTER SET utf8mb4; create user tester identified by 'testpass'; grant all on test_db.* to tester; create user tester@localhost identified by 'testpass'; grant all on test_db.* to tester@localhost; ''; settings = { mysqld = { character-set-server = "utf8mb4"; collation-server = "utf8mb4_unicode_ci"; log_warnings = 1; }; }; }; }; testScript = '' machine.wait_for_unit("mysql") machine.succeed( "sqlite3mysql --version | grep ${pkgs.sqlite3-to-mysql.version}" ) # invalid_database_name: assert '1045 (28000): Access denied' in "1044 (42000): Access denied [...] # invalid_database_user: does not return non-zero exit for some reason # test_version: has problems importing sqlite3_to_mysql and determining the version machine.succeed( "cd ${pkgs.sqlite3-to-mysql.src} \ && pytest -v --no-docker -k \"not test_invalid_database_name and not test_invalid_database_user and not test_version\"" ) ''; })