Skip to content

[Bug]: Three TestRunner cases fail on Linux at develop #401

Description

@EugineKh

Detailed steps on how to reproduce the bug

Build examples/TestRunner with its own CMakeLists (Release, GCC 14.2) and run it with no
arguments on an idle machine with an audio device present (ALSA → PipeWire 1.4.2):

[doctest] test cases:   340 |   337 passed | 3 failed | 0 skipped
[doctest] assertions: 19156 | 19151 passed | 5 failed |

This is on develop at 0d55ef0c. The same three fail on 98fe32df (the pin from the day
before), so it is not a recent regression, and they fail identically when run alone with
-tc="Clip launcher*,FolderBasedProject*" — so it is not interference from parallel load
either.

1. Clip launcher: launch with clip source offset (audio)

tracktion_ClipLauncher.test.cpp:417

CHECK_LT( getRMSLevel (output, tr (5.1, 11.0)), 0.005f ) is NOT correct!
  values: CHECK_LT( 0.063084, 0.005 )

The region that should be silent after the clip stops still carries about −24 dBFS.

2. Clip launcher: quantised launch and stop (audio)

tracktion_ClipLauncher.test.cpp:258

CHECK_GT( getToneMagnitude (output, range, frequency), isAudioTrack ? 0.5f : 0.05f ) is NOT correct!

3. FolderBasedProject: removeProjectItemremoves item and deletes source file

tracktion_Project.test.cpp:2393-2395

*** ERROR: /tmp/temp_43040129/remove_test2/audio2.wav  0 bytes
CHECK( project->removeProjectItem (ref, true) ) is NOT correct!   values: CHECK( false )
CHECK( project->getNumProjectItems() == 0 ) is NOT correct!
CHECK_FALSE( sourceFile.existsAsFile() ) is NOT correct!

This one has a definite Linux-specific cause, and it is not the file's size.
FolderBasedProject::removeProjectItem (tracktion_FolderBasedProject.cpp:449) returns
false when ProjectItem::deleteSourceFile() (tracktion_ProjectItem.cpp:839) fails to
File::moveToTrash() the file. On Linux moveToTrash() is g_file_trash from libgio
(juce_Files_linux.cpp:180), and the test creates its project under
juce::File::createTempFile ({}), i.e. under /tmp, which is tmpfs on most distributions.
gio refuses to trash there:

$ gio trash /tmp/x.wav
gio: file:///tmp/x.wav: Trashing on system internal mounts is not supported

So the subcase fails on any Linux where the temp directory is a separate, system-internal
mount, while it passes on macOS and Windows. The 0 bytes line above is just the diagnostic
dump deleteSourceFile() prints in its if (! ok) branch after the trash attempt has
already failed. The sibling subcase (removes item without deleting source file,
del = false) never reaches moveToTrash and passes.

What is the expected behaviour?

TestRunner passes on Linux, so that a downstream project can use it as a smoke test after
changing its submodule pin. Right now three pre-existing failures have to be memorised and
subtracted by hand — they are indistinguishable from breakage the update itself caused.

For (3) either side would do: the test could create its project somewhere that supports a
trash (or delete the file directly and assert on that), or deleteSourceFile() could fall
back to deleteFile() when the platform reports that trashing is unavailable — though that
turns a recoverable delete into a permanent one, so it is your call.

Not blocking us directly: we use neither the clip launcher nor folder-based projects.

Unit test to reproduce the error?

The failing tests are already in the tree — see the file and line references above.

Operating systems

Linux

What versions of the operating systems?

Debian 13 (trixie), kernel 6.16, GCC 14.2

Architectures

Intel/AMD 64-bit

Testing on the develop branch

The bug is present on the develop branch (0d55ef0c).

Code of Conduct

  • I agree to follow the Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions