|
Packit |
cb6d3d |
/*
|
|
Packit |
cb6d3d |
Copyright (C) 2013 Rocky Bernstein <rocky@gnu.org>
|
|
Packit |
cb6d3d |
Copyright (C) 2014 Robert Kausch <robert.kausch@freac.org>
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
This program is free software: you can redistribute it and/or modify
|
|
Packit |
cb6d3d |
it under the terms of the GNU General Public License as published by
|
|
Packit |
cb6d3d |
the Free Software Foundation, either version 3 of the License, or
|
|
Packit |
cb6d3d |
(at your option) any later version.
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
This program is distributed in the hope that it will be useful,
|
|
Packit |
cb6d3d |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
cb6d3d |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
cb6d3d |
GNU General Public License for more details.
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
You should have received a copy of the GNU General Public License
|
|
Packit |
cb6d3d |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/*
|
|
Packit |
cb6d3d |
Regression test for lib/cdda_interface/toc.c
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
To compile as s standalone program:
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
gcc -g3 -Wall -DHAVE_CONFIG_H -I../.. -I../..include toc.c \
|
|
Packit |
cb6d3d |
../../lib/paranoia/libcdio_paranoia.la ../../lib/cdda_interface/.lib/libcdio_cdda.a -lcdio -o toc
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
#ifdef HAVE_CONFIG_H
|
|
Packit |
cb6d3d |
#include "config.h"
|
|
Packit |
cb6d3d |
#define __CDIO_CONFIG_H__ 1
|
|
Packit |
cb6d3d |
#endif
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
#ifdef HAVE_STDIO_H
|
|
Packit |
cb6d3d |
#include <stdio.h>
|
|
Packit |
cb6d3d |
#endif
|
|
Packit |
cb6d3d |
#ifdef HAVE_STDLIB_H
|
|
Packit |
cb6d3d |
#include <stdlib.h>
|
|
Packit |
cb6d3d |
#endif
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
#include <cdio/paranoia/cdda.h>
|
|
Packit |
cb6d3d |
#include <cdio/cd_types.h>
|
|
Packit |
cb6d3d |
#include <cdio/logging.h>
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
#ifndef DATA_DIR
|
|
Packit |
cb6d3d |
#define DATA_DIR "@srcdir@/../data"
|
|
Packit |
cb6d3d |
#endif
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
static void
|
|
Packit |
cb6d3d |
log_handler (cdio_log_level_t level, const char message[])
|
|
Packit |
cb6d3d |
{
|
|
Packit |
cb6d3d |
switch(level) {
|
|
Packit |
cb6d3d |
case CDIO_LOG_DEBUG:
|
|
Packit |
cb6d3d |
case CDIO_LOG_INFO:
|
|
Packit |
cb6d3d |
return;
|
|
Packit |
cb6d3d |
default:
|
|
Packit |
cb6d3d |
printf("cdio %d message: %s\n", level, message);
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
static int testit(cdrom_drive_t *d) {
|
|
Packit |
cb6d3d |
track_t t = 0;
|
|
Packit |
cb6d3d |
lsn_t lsn = 0;
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/* Check number of tracks.
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
t = cdda_tracks(d);
|
|
Packit |
cb6d3d |
if (t != 1) {
|
|
Packit |
cb6d3d |
printf("Should have found one track, got %d\n", t);
|
|
Packit |
cb6d3d |
return 1;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/* Check disc sector reporting.
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
lsn = cdda_disc_firstsector(d);
|
|
Packit |
cb6d3d |
if ( lsn != 0 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
lsn = cdda_disc_lastsector(d);
|
|
Packit |
cb6d3d |
if ( lsn != 301 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/* Check pregap sector reporting (should fail here).
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
lsn = cdda_track_firstsector(d, 0);
|
|
Packit |
cb6d3d |
if ( lsn != -402 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten error code -402, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 3;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
lsn = cdda_track_lastsector(d, 0);
|
|
Packit |
cb6d3d |
if ( lsn != -402 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten error code -402, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 3;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/* Check track sector reporting.
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
lsn = cdda_track_firstsector(d, 1);
|
|
Packit |
cb6d3d |
if ( lsn != 0 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten 0 as the first sector, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
lsn = cdda_track_lastsector(d, 1);
|
|
Packit |
cb6d3d |
if ( lsn != 301 ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten 301 as the last sector, got %d.\n", lsn);
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
/* Check sector track reporting.
|
|
Packit |
cb6d3d |
*/
|
|
Packit |
cb6d3d |
t = cdda_sector_gettrack(d, 100);
|
|
Packit |
cb6d3d |
if ( 1 != t ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten 1 as the track, got %d.\n", t);
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
t = cdda_sector_gettrack(d, 1000);
|
|
Packit |
cb6d3d |
if ( CDIO_INVALID_TRACK != t ) {
|
|
Packit |
cb6d3d |
printf("Should have gotten CDIO_INVALID_TRACK as the track, got %d.\n", t);
|
|
Packit |
cb6d3d |
return 3;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
return 0;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
int
|
|
Packit |
cb6d3d |
main(int argc, const char *argv[])
|
|
Packit |
cb6d3d |
{
|
|
Packit |
cb6d3d |
cdrom_drive_t *d = NULL; /* Place to store handle given by cd-paranoia. */
|
|
Packit |
cb6d3d |
CdIo_t *p_cdio;
|
|
Packit |
cb6d3d |
int rc;
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
cdio_log_set_handler (log_handler);
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
if (cdio_have_driver(DRIVER_BINCUE)) {
|
|
Packit |
cb6d3d |
p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.cue", DRIVER_UNKNOWN);
|
|
Packit |
cb6d3d |
} else if (cdio_have_driver(DRIVER_CDRDAO)) {
|
|
Packit |
cb6d3d |
p_cdio = cdio_open("@native_abs_top_srcdir@/test/data/cdda.toc", DRIVER_UNKNOWN);
|
|
Packit |
cb6d3d |
} else {
|
|
Packit |
cb6d3d |
printf("-- You don't have enough drivers for this test\n");
|
|
Packit |
cb6d3d |
return 77;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
d=cdio_cddap_identify_cdio(p_cdio, CDDA_MESSAGE_PRINTIT, NULL);
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
if ( !d ) {
|
|
Packit |
cb6d3d |
printf("Should have identified as an audio CD disc.\n");
|
|
Packit |
cb6d3d |
return 1;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
if ( 0 != cdio_cddap_open(d) ) {
|
|
Packit |
cb6d3d |
printf("Unable to open disc.\n");
|
|
Packit |
cb6d3d |
return 2;
|
|
Packit |
cb6d3d |
}
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
rc = testit(d);
|
|
Packit |
cb6d3d |
cdio_cddap_close_no_free_cdio(d);
|
|
Packit |
cb6d3d |
cdio_destroy(p_cdio);
|
|
Packit |
cb6d3d |
|
|
Packit |
cb6d3d |
return rc;
|
|
Packit |
cb6d3d |
}
|