Blame test/testgetdevices.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2008-2009, 2011, 2013 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/*
Packit dd8086
   Regression test for cdio_get_devices, cdio_get_devices_with_cap(),
Packit dd8086
   and cdio_free_device_list()
Packit dd8086
*/
Packit dd8086
#ifdef HAVE_CONFIG_H
Packit dd8086
#include "config.h"
Packit dd8086
#define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_TYPES_H
Packit dd8086
#include <sys/types.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_UTSNAME_H
Packit dd8086
#include <sys/utsname.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_UNISTD_H
Packit dd8086
#include <unistd.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include <cdio/cd_types.h>
Packit dd8086
#include <cdio/logging.h>
Packit dd8086
Packit dd8086
#ifndef DATA_DIR
Packit dd8086
#define DATA_DIR "./data"
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifndef __MINGW32__
Packit dd8086
Packit dd8086
static void
Packit dd8086
log_handler (cdio_log_level_t level, const char message[])
Packit dd8086
{
Packit dd8086
  switch(level) {
Packit dd8086
  case CDIO_LOG_DEBUG:
Packit dd8086
  case CDIO_LOG_INFO:
Packit dd8086
    return;
Packit dd8086
  default:
Packit dd8086
    printf("cdio %d message: %s\n", level, message);
Packit dd8086
  }
Packit dd8086
}
Packit dd8086
Packit dd8086
Packit dd8086
static bool
Packit dd8086
is_in(char **file_list, const char *file)
Packit dd8086
{
Packit dd8086
  char **p;
Packit dd8086
  for (p = file_list; p != NULL && *p != NULL; p++) {
Packit dd8086
    if (strcmp(*p, file) == 0) {
Packit dd8086
      printf("-- File %s found as expected\n", file);
Packit dd8086
      return true;
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
  printf("-- Can't find file %s in list\n", file);
Packit dd8086
  return false;
Packit dd8086
}
Packit dd8086
#endif
Packit dd8086
Packit dd8086
int
Packit dd8086
main(int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
#if defined(__MINGW32__)
Packit dd8086
  printf("testgetdevices test skipped until drive recording testing issues resolved\n");
Packit dd8086
  return 77;
Packit dd8086
#else
Packit dd8086
  char **nrg_images=NULL;
Packit dd8086
  char **bincue_images=NULL;
Packit dd8086
  char **imgs;
Packit dd8086
  unsigned int i;
Packit dd8086
  int ret=0;
Packit dd8086
Packit dd8086
  const char *cue_files[2] = {"cdda.cue", "isofs-m1.cue"};
Packit dd8086
  const char *nrg_files[1] = {"videocd.nrg"};
Packit dd8086
Packit dd8086
Packit dd8086
  cdio_log_set_handler (log_handler);
Packit dd8086
Packit dd8086
  if (cdio_have_driver(-1) != false)
Packit dd8086
    {
Packit dd8086
      fprintf(stderr, "Bogus driver number -1 should be rejected\n");
Packit dd8086
      return 5;
Packit dd8086
    }
Packit dd8086
Packit dd8086
#ifdef HAVE_SYS_UTSNAME_H
Packit dd8086
  {
Packit dd8086
    struct utsname utsname;
Packit dd8086
    if (0 == uname(&utsname))
Packit dd8086
      {
Packit dd8086
	if (0 == strncmp("Linux", utsname.sysname, sizeof("Linux")))
Packit dd8086
	  {
Packit dd8086
	    if (!cdio_have_driver(DRIVER_LINUX))
Packit dd8086
	      {
Packit dd8086
		fprintf(stderr,
Packit dd8086
			"You should have been able to get GNU/Linux driver\n");
Packit dd8086
		return 6;
Packit dd8086
	      } else {
Packit dd8086
		printf("-- Good! You have the GNU/Linux driver installed.\n");
Packit dd8086
	      }
Packit dd8086
Packit dd8086
	  }
Packit dd8086
	else if (0 == strncmp("CYGWIN", utsname.sysname, sizeof("CYGWIN")))
Packit dd8086
	  {
Packit dd8086
	    if (!cdio_have_driver(DRIVER_WIN32))
Packit dd8086
	      {
Packit dd8086
		fprintf(stderr,
Packit dd8086
			"You should have been able to get Win32 driver\n");
Packit dd8086
		return 6;
Packit dd8086
	      } else {
Packit dd8086
		printf("-- Good! You have the Win32 driver installed.\n");
Packit dd8086
	      }
Packit dd8086
	  }
Packit dd8086
	else if (0 == strncmp("Darwin", utsname.sysname, sizeof("Darwin")))
Packit dd8086
	  {
Packit dd8086
	    if (!cdio_have_driver(DRIVER_OSX))
Packit dd8086
	      {
Packit dd8086
		fprintf(stderr,
Packit dd8086
			"You should have been able to get OS/X driver\n");
Packit dd8086
		return 6;
Packit dd8086
	      } else {
Packit dd8086
		printf("-- Good! You have the OS/X driver installed.\n");
Packit dd8086
	      }
Packit dd8086
	  }
Packit dd8086
	else if (0 == strncmp("NetBSD", utsname.sysname, sizeof("NetBSD")))
Packit dd8086
	  {
Packit dd8086
	    if (!cdio_have_driver(DRIVER_NETBSD))
Packit dd8086
	      {
Packit dd8086
		fprintf(stderr,
Packit dd8086
			"You should have been able to get NetBSD driver\n");
Packit dd8086
		return 6;
Packit dd8086
	      } else {
Packit dd8086
		printf("-- Good! You have the OS/X driver installed.\n");
Packit dd8086
	      }
Packit dd8086
	  }
Packit dd8086
      }
Packit dd8086
  }
Packit dd8086
#endif
Packit dd8086
Packit dd8086
  if (! (cdio_have_driver(DRIVER_NRG) && cdio_have_driver(DRIVER_BINCUE)) )  {
Packit dd8086
    printf("You don't have enough drivers for this test\n");
Packit dd8086
    exit(77);
Packit dd8086
  }
Packit dd8086
Packit dd8086
  bincue_images = cdio_get_devices(DRIVER_BINCUE);
Packit dd8086
Packit dd8086
  for (imgs=bincue_images; *imgs != NULL; imgs++) {
Packit dd8086
    printf("-- bincue image %s\n", *imgs);
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (ret != 0) return ret;
Packit dd8086
Packit dd8086
  if (0 == chdir(DATA_DIR)) {
Packit dd8086
    int invalid_images = 0;
Packit dd8086
    nrg_images = cdio_get_devices(DRIVER_NRG);
Packit dd8086
Packit dd8086
    for (imgs=nrg_images; *imgs != NULL; imgs++) {
Packit dd8086
      printf("-- NRG image %s\n", *imgs);
Packit dd8086
    }
Packit dd8086
Packit dd8086
    if (!is_in(nrg_images, nrg_files[0])) {
Packit dd8086
      cdio_free_device_list(nrg_images);
Packit dd8086
      return 10;
Packit dd8086
    }
Packit dd8086
Packit dd8086
    for (i=0; i<2; i++) {
Packit dd8086
      if (is_in(bincue_images, cue_files[i])) {
Packit dd8086
	printf("-- %s parses as a CDRWIN BIN/CUE csheet.\n",
Packit dd8086
	       cue_files[i]);
Packit dd8086
      } else {
Packit dd8086
	printf("-- %s doesn't parse as a CDRWIN BIN/CUE csheet.\n",
Packit dd8086
	       cue_files[i]);
Packit dd8086
	invalid_images += 1;
Packit dd8086
      }
Packit dd8086
    }
Packit dd8086
    printf("invaid images is %d\n", invalid_images);
Packit dd8086
    ret = invalid_images != 2;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  cdio_free_device_list(nrg_images);
Packit dd8086
  cdio_free_device_list(bincue_images);
Packit dd8086
  return ret;
Packit dd8086
#endif
Packit dd8086
}