The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#
#   @(#)$Id: t07dblist.t,v 2007.2 2007/09/04 00:02:58 jleffler Exp $
#
#   List of available databases:
#   @ary = $DBI->data_sources('Informix');
#
#   Copyright 1996    Hermetica. Written by Alligator Descartes <descarte@hermetica.com>
#   Copyright 1996-99 Jonathan Leffler
#   Copyright 2000    Informix Software Inc
#   Copyright 2002-03 IBM
#   Copyright 2007    Jonathan Leffler

use DBD::Informix::TestHarness;
use strict;

my @ary = DBI->data_sources('Informix');

if (!@ary)
{
	if ($ENV{DBD_INFORMIX_USERNAME} && $ENV{DBD_INFORMIX_PASSWORD} && ($DBI::err == -951 || $DBI::err == -956)) 
	{
		# Problem is with default connection and sqgetdbs().
		# -951	User username is not known on the database server.
		# -956	Client client-name or user is not trusted by the database server.
		# There could be other errors which should cause test to be skipped.
		print "1..0 # Skip: DBI->data_sources('Informix') because of username/password\n";
	}
	else
	{
		print "1..1\n";
		&stmt_note("# Test: DBI->data_sources('Informix'): failed\n");
		&stmt_fail();
	}
}
else
{
    my $flag = (defined $ENV{INFORMIXSERVER} && $ENV{INFORMIXSERVER} ne "") ? 1 : 0;
	my $x = @ary;
	my $y = $x + 1;
	print "1..$y\n";
	# Note that there is not very much we can do to validate database list.
    # Remember SE: not even sysmaster is reliable there (but there is a test DB).
    # And OnLine 5.x does not play with INFORMIXSERVER!
	&stmt_note("# Test: DBI->data_sources('Informix'):\n");
	&stmt_fail("# *** No databases to list? ***\n") if ($#ary < 0);
	my $srv = 0;
	foreach my $db (@ary)
	{
		&stmt_note("# Database: $db\n");
		($db =~ /^dbi:Informix:/) ? &stmt_ok(0) : &stmt_fail();
        $srv++ if ($flag && $db =~ /\@$ENV{INFORMIXSERVER}$/o);
	}
	&stmt_fail("# No databases match INFORMIXSERVER=$ENV{INFORMIXSERVER}\n")
        if ($srv == 0 && $flag);
	&stmt_ok();
}

&all_ok();