diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index fb85df8808f1..0337315421ea 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1041,6 +1041,7 @@ in { tika = runTest ./tika.nix; timescaledb = handleTest ./timescaledb.nix {}; timezone = handleTest ./timezone.nix {}; + timidity = handleTest ./timidity {}; tinc = handleTest ./tinc {}; tinydns = handleTest ./tinydns.nix {}; tinyproxy = handleTest ./tinyproxy.nix {}; diff --git a/nixos/tests/timidity/basic.nix b/nixos/tests/timidity/basic.nix new file mode 100644 index 000000000000..4bbbac8fbc6c --- /dev/null +++ b/nixos/tests/timidity/basic.nix @@ -0,0 +1,20 @@ +import ../make-test-python.nix ( + { pkgs, ... }: + { + + name = "timidity"; + + nodes.machine = + { pkgs, ... }: + { + environment.systemPackages = [ pkgs.timidity ]; + }; + + testScript = '' + start_all () + + ## TiMidity++ is around. + machine.succeed("command -v timidity") + ''; + } +) diff --git a/nixos/tests/timidity/default.nix b/nixos/tests/timidity/default.nix new file mode 100644 index 000000000000..8e136a9721e6 --- /dev/null +++ b/nixos/tests/timidity/default.nix @@ -0,0 +1,4 @@ +inputs: { + basic = import ./basic.nix inputs; + with-vorbis = import ./with-vorbis.nix inputs; +} diff --git a/nixos/tests/timidity/tam-lin.midi b/nixos/tests/timidity/tam-lin.midi new file mode 100644 index 000000000000..38560e1ade44 Binary files /dev/null and b/nixos/tests/timidity/tam-lin.midi differ diff --git a/nixos/tests/timidity/with-vorbis.nix b/nixos/tests/timidity/with-vorbis.nix new file mode 100644 index 000000000000..db7d23a8c9c0 --- /dev/null +++ b/nixos/tests/timidity/with-vorbis.nix @@ -0,0 +1,40 @@ +import ../make-test-python.nix ( + { pkgs, ... }: + { + + name = "timidity-with-vorbis"; + + nodes.machine = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ + (timidity.override { enableVorbis = true; }) + ffmpeg # # for `ffprobe` + ]; + }; + + testScript = '' + import json + + start_all() + + ## TiMidity++ is around and it claims to support Ogg Vorbis. + machine.succeed("command -v timidity") + machine.succeed("timidity --help | grep 'Ogg Vorbis'") + + ## TiMidity++ manages to process a MIDI input and produces an Ogg Vorbis + ## output file. NOTE: the `timidity` CLI succeeds even when the input file + ## does not exist; hence our test for the output file's existence. + machine.succeed("cp ${./tam-lin.midi} tam-lin.midi") + machine.succeed("timidity -Ov tam-lin.midi && test -e tam-lin.ogg") + + ## The output file has the expected characteristics. + metadata_as_text = machine.succeed("ffprobe -show_format -print_format json -i tam-lin.ogg") + metadata = json.loads(metadata_as_text) + assert metadata['format']['format_name'] == 'ogg', \ + f"expected 'format_name' to be 'ogg', got '{metadata['format']['format_name']}'" + assert 37 <= float(metadata['format']['duration']) <= 38, \ + f"expected 'duration' to be between 37s and 38s, got {metadata['format']['duration']}s" + ''; + } +)