From 8cf078473027ef35b6a1ba19a9619f8ddb007ae4 Mon Sep 17 00:00:00 2001 From: Brad Hards Date: Sun, 25 May 2025 19:36:58 +0930 Subject: [PATCH] mux/mp4: avoid dumping test output into build directory This makes it slightly more difficult to debug failing tests, but is way cleaner for the common case. Part-of: --- mux/mp4/tests/tests.rs | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/mux/mp4/tests/tests.rs b/mux/mp4/tests/tests.rs index 16e2dd0d6..f182d1d3b 100644 --- a/mux/mp4/tests/tests.rs +++ b/mux/mp4/tests/tests.rs @@ -8,12 +8,13 @@ // use std::{ - fs, + fs::{self}, io::{Cursor, Read}, path::Path, }; use gst_pbutils::prelude::*; +use tempfile::tempdir; fn init() { use std::sync::Once; @@ -236,7 +237,7 @@ fn test_uncompressed_with(format: &str, width: u32, height: u32, cb: impl FnOnce }; let pipeline = Pipeline(pipeline.downcast::().unwrap()); - let dir = tempfile::TempDir::new().unwrap(); + let dir = tempdir().unwrap(); let mut location = dir.path().to_owned(); location.push("test.mp4"); @@ -266,7 +267,10 @@ fn test_roundtrip_uncompressed(video_format: &str, width: u32, height: u32) { fn test_encode_uncompressed(video_format: &str, width: u32, height: u32) { let filename = format!("{video_format}_{width}x{height}.mp4"); - let pipeline_text = format!("videotestsrc num-buffers=34 ! video/x-raw,format={video_format},width={width},height={height} ! isomp4mux ! filesink location={filename}"); + let temp_dir = tempdir().unwrap(); + let temp_file_path = temp_dir.path().join(filename); + let location = temp_file_path.as_path(); + let pipeline_text = format!("videotestsrc num-buffers=34 ! video/x-raw,format={video_format},width={width},height={height} ! isomp4mux ! filesink location={:?}", location); let Ok(pipeline) = gst::parse::launch(&pipeline_text) else { panic!("could not build encoding pipeline") @@ -294,11 +298,11 @@ fn test_encode_uncompressed(video_format: &str, width: u32, height: u32) { .set_state(gst::State::Null) .expect("Unable to set the pipeline to the `Null` state"); - test_expected_uncompressed_output(filename); + test_expected_uncompressed_output(location); } -fn test_expected_uncompressed_output(filename: String) { - let check_data: Vec = fs::read(filename).unwrap(); +fn test_expected_uncompressed_output(location: &Path) { + let check_data: Vec = fs::read(location).unwrap(); let cursor = Cursor::new(check_data.as_ref()); test_default_mpeg_file_type_box(cursor); } @@ -540,7 +544,10 @@ fn encode_uncompressed_bgrp() { fn test_encode_uncompressed_image_sequence(video_format: &str, width: u32, height: u32) { let filename = format!("{video_format}_{width}x{height}.heifs"); - let pipeline_text = format!("videotestsrc num-buffers=10 ! video/x-raw,format={video_format},width={width},height={height} ! isomp4mux name=mux ! filesink location={filename}"); + let temp_dir = tempdir().unwrap(); + let temp_file_path = temp_dir.path().join(filename); + let location = temp_file_path.as_path(); + let pipeline_text = format!("videotestsrc num-buffers=10 ! video/x-raw,format={video_format},width={width},height={height} ! isomp4mux name=mux ! filesink location={:?}", location); let Ok(pipeline) = gst::parse::launch(&pipeline_text) else { panic!("could not build encoding pipeline") @@ -572,10 +579,10 @@ fn test_encode_uncompressed_image_sequence(video_format: &str, width: u32, heigh .set_state(gst::State::Null) .expect("Unable to set the pipeline to the `Null` state"); - test_expected_image_sequence_output(filename); + test_expected_image_sequence_output(location); } -fn test_expected_image_sequence_output(filename: String) { +fn test_expected_image_sequence_output(filename: &Path) { let check_data: Vec = fs::read(filename).unwrap(); let cursor = Cursor::new(check_data.as_ref()); test_expected_image_sequence_file_type_box_content(cursor); @@ -608,8 +615,11 @@ fn encode_uncompressed_image_sequence_nv12() { #[test] fn test_encode_audio_trak() { init(); - let filename = "audio_only.mp4".to_string(); - let pipeline_text = format!("audiotestsrc num-buffers=100 ! audioconvert ! opusenc ! isomp4mux ! filesink location={filename}"); + let filename = "audio_only.mp4"; + let temp_dir = tempdir().unwrap(); + let temp_file_path = temp_dir.path().join(filename); + let location = temp_file_path.as_path(); + let pipeline_text = format!("audiotestsrc num-buffers=100 ! audioconvert ! opusenc ! isomp4mux ! filesink location={:?}", location); let Ok(pipeline) = gst::parse::launch(&pipeline_text) else { panic!("could not build encoding pipeline") @@ -637,10 +647,10 @@ fn test_encode_audio_trak() { .set_state(gst::State::Null) .expect("Unable to set the pipeline to the `Null` state"); - test_audio_only_output(filename); + test_audio_only_output(location); } -fn test_audio_only_output(filename: String) { +fn test_audio_only_output(filename: &Path) { let check_data: Vec = fs::read(filename).unwrap(); let cursor = Cursor::new(check_data.as_ref()); test_default_mpeg_file_type_box(cursor);