Add tests for metaflac --append

This commit is contained in:
Martijn van Beurden 2023-02-16 14:07:04 +01:00
parent 0b3d86ebc3
commit 436a3577dc
5 changed files with 236 additions and 9 deletions

View File

@ -267,39 +267,45 @@ FLAC__bool do_major_operation__append(FLAC__Metadata_Chain *chain, const Command
if(fread(buffer+FLAC__STREAM_METADATA_HEADER_LENGTH, 1, buffer_size, stdin) < buffer_size) {
flac_fprintf(stderr, "ERROR: couldn't read metadata block #%u from stdin\n",(num_objects));
free(buffer);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
if((object = FLAC__metadata_object_set_raw(buffer, buffer_size + FLAC__STREAM_METADATA_HEADER_LENGTH)) == NULL) {
flac_fprintf(stderr, "ERROR: couldn't parse supplied metadata block #%u\n",(num_objects));
free(buffer);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
free(buffer);
if(has_vorbiscomment && object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) {
flac_fprintf(stderr, "ERROR: can't add another vorbis comment block to file, it already has one\n");
FLAC__metadata_object_delete(object);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
if(object->type == FLAC__METADATA_TYPE_STREAMINFO) {
flac_fprintf(stderr, "ERROR: can't add streaminfo to file\n");
FLAC__metadata_object_delete(object);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
if(object->type == FLAC__METADATA_TYPE_SEEKTABLE) {
flac_fprintf(stderr, "ERROR: can't add seektable to file, please use --add-seekpoint instead\n");
FLAC__metadata_object_delete(object);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
if(!FLAC__metadata_iterator_insert_block_after(iterator, object)) {
flac_fprintf(stderr, "ERROR: couldn't add supplied metadata block #%u to file\n",(num_objects));
FLAC__metadata_object_delete(object);
break;
FLAC__metadata_iterator_delete(iterator);
return false;
}
/* Now check whether what type of block was added */
{
@ -312,8 +318,7 @@ FLAC__bool do_major_operation__append(FLAC__Metadata_Chain *chain, const Command
if(num_objects == 0)
flac_fprintf(stderr, "ERROR: unable to find a metadata block in the supplied input\n");
if(iterator != 0)
FLAC__metadata_iterator_delete(iterator);
FLAC__metadata_iterator_delete(iterator);
return true;
}

View File

@ -82,7 +82,9 @@ EXTRA_DIST = \
case62-expect.meta \
case63-expect.meta \
case64-expect.meta \
case65-expect.meta
case65-expect.meta \
case66-expect.meta \
case67-expect.meta
clean-local:
-rm -f out.*

View File

@ -0,0 +1,62 @@
METADATA block #0
type: 0 (STREAMINFO)
is last: false
length: 34
minimum blocksize: 1152 samples
maximum blocksize: 1152 samples
minimum framesize: 11 bytes
maximum framesize: 11 bytes
sample_rate: 44100 Hz
channels: 1
bits-per-sample: 8
total samples: 1
MD5 signature: 8d39dd7eef115ea6975446ef4082951f
METADATA block #1
type: 3 (SEEKTABLE)
is last: false
length: 18
seek points: 1
point 0: sample_number=0, stream_offset=0, frame_samples=1
METADATA block #2
type: 4 (VORBIS_COMMENT)
is last: false
length: 46
vendor string: reference libFLAC 1.0.5_beta2 20030114
comments: 0
METADATA block #3
type: 126 (UNKNOWN)
is last: false
length: 4
data contents:
00000000: AA 55 A5 5A 00 00 00 00 00 00 00 00 00 00 00 00 .U.Z
METADATA block #4
type: 5 (CUESHEET)
is last: false
length: 480
media catalog number:
lead-in: 88200
is CD: true
number of tracks: 2
track[0]
offset: 0
number: 1
ISRC:
type: AUDIO
pre-emphasis: false
number of index points: 1
index[0]
offset: 0
number: 1
track[1]
offset: 1
number: 170 (LEAD-OUT)
METADATA block #5
type: 2 (APPLICATION)
is last: false
length: 12
application ID: 61626364
data contents:
calfflacMETADATA block #6
type: 1 (PADDING)
is last: true
length: 12

View File

@ -0,0 +1,95 @@
METADATA block #0
type: 0 (STREAMINFO)
is last: false
length: 34
minimum blocksize: 1152 samples
maximum blocksize: 1152 samples
minimum framesize: 11 bytes
maximum framesize: 11 bytes
sample_rate: 44100 Hz
channels: 1
bits-per-sample: 8
total samples: 1
MD5 signature: 8d39dd7eef115ea6975446ef4082951f
METADATA block #1
type: 126 (UNKNOWN)
is last: false
length: 4
data contents:
00000000: AA 55 A5 5A 00 00 00 00 00 00 00 00 00 00 00 00 .U.Z
METADATA block #2
type: 5 (CUESHEET)
is last: false
length: 480
media catalog number:
lead-in: 88200
is CD: true
number of tracks: 2
track[0]
offset: 0
number: 1
ISRC:
type: AUDIO
pre-emphasis: false
number of index points: 1
index[0]
offset: 0
number: 1
track[1]
offset: 1
number: 170 (LEAD-OUT)
METADATA block #3
type: 2 (APPLICATION)
is last: false
length: 12
application ID: 61626364
data contents:
calfflacMETADATA block #4
type: 3 (SEEKTABLE)
is last: false
length: 18
seek points: 1
point 0: sample_number=0, stream_offset=0, frame_samples=1
METADATA block #5
type: 4 (VORBIS_COMMENT)
is last: false
length: 46
vendor string: reference libFLAC 1.0.5_beta2 20030114
comments: 0
METADATA block #6
type: 126 (UNKNOWN)
is last: false
length: 4
data contents:
00000000: AA 55 A5 5A 00 00 00 00 00 00 00 00 00 00 00 00 .U.Z
METADATA block #7
type: 5 (CUESHEET)
is last: false
length: 480
media catalog number:
lead-in: 88200
is CD: true
number of tracks: 2
track[0]
offset: 0
number: 1
ISRC:
type: AUDIO
pre-emphasis: false
number of index points: 1
index[0]
offset: 0
number: 1
track[1]
offset: 1
number: 170 (LEAD-OUT)
METADATA block #8
type: 2 (APPLICATION)
is last: false
length: 12
application ID: 61626364
data contents:
calfflacMETADATA block #9
type: 1 (PADDING)
is last: true
length: 28

View File

@ -69,6 +69,17 @@ run_metaflac_silent ()
fi
}
run_metaflac_to_metaflac_silent ()
{
if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then
echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_metaflac.valgrind.log
valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 2>/dev/null 4>>test_metaflac.valgrind.log
else
metaflac${EXE} $1 | metaflac${EXE} $2 2>/dev/null
fi
}
check_flac ()
{
run_flac --silent --test $flacfile || die "ERROR in $flacfile" 1>&2
@ -399,4 +410,56 @@ run_metaflac --remove --block-type=VORBIS_COMMENT --dont-use-padding $flacfile
cmp $flacfile ${top_srcdir}/test/metaflac.flac.ok || die "ERROR, $flacfile and metaflac.flac.ok differ"
echo OK
cp -p ${top_srcdir}/test/metaflac.flac.in $flacfile
flacfile2=metaflac2.flac
cp $flacfile $flacfile2
run_metaflac --remove-all --dont-use-padding $flacfile
echo $ECHO_N "Appending a streaminfo metadata block... " $ECHO_C
if run_metaflac_to_metaflac_silent "--list --data-format=binary $flacfile2" "--append $flacfile" ; then
die "ERROR: it should have failed but didn't"
else
echo "OK, it failed as it should"
fi
echo $ECHO_N "Appending a seektable metadata block... " $ECHO_C
if run_metaflac_to_metaflac_silent "--list --data-format=binary --except-block-type=STREAMINFO $flacfile2" "--append $flacfile" ; then
die "ERROR: it should have failed but didn't"
else
echo "OK, it failed as it should"
fi
run_metaflac --add-seekpoint=0 $flacfile
echo $ECHO_N "Appending a vorbis comment metadata block... " $ECHO_C
if run_metaflac_to_metaflac_silent "--list --data-format=binary --block-type=VORBIS_COMMENT $flacfile2" "--append $flacfile" ; then
echo "OK"
else
die "ERROR, couldn't add vorbis comment metadata block"
fi
echo $ECHO_N "Appending another vorbis comment metadata block... " $ECHO_C
if run_metaflac_to_metaflac_silent "--list --data-format=binary --block-type=VORBIS_COMMENT $flacfile2" "--append $flacfile" ; then
die "ERROR: it should have failed but didn't"
else
echo "OK, it failed as it should"
fi
if run_metaflac_to_metaflac_silent "--list --data-format=binary --except-block-type=STREAMINFO,SEEKTABLE,VORBIS_COMMENT $flacfile2" "--append $flacfile" ; then
:
else
die "ERROR, couldn't add vorbis comment metadata block"
fi
metaflac_test_binary case66 "--append" "--list"
if run_metaflac_to_metaflac_silent "--list --data-format=binary --except-block-type=STREAMINFO,SEEKTABLE,VORBIS_COMMENT $flacfile2" "--append --block-number=0 $flacfile" ; then
:
else
die "ERROR, couldn't add vorbis comment metadata block"
fi
metaflac_test_binary case67 "--append --block-number=0" "--list"
rm -f metaflac-test-files/out.meta metaflac-test-files/out1.meta