]> git.donarmstrong.com Git - debbugs.git/blobdiff - t/lib/DebbugsTest.pm
remove dsn debugging print statement
[debbugs.git] / t / lib / DebbugsTest.pm
index 253f1d7acbe61f9d5dedae7cd549299f5560dcf0..fcc0dc04b31bb8f6e9d8e5a21ffcefa712804815 100644 (file)
@@ -32,6 +32,7 @@ use File::Basename qw(dirname basename);
 use IPC::Open3;
 use IO::Handle;
 use Test::More;
+use Test::PostgreSQL;
 
 use Params::Validate qw(validate_with :types);
 
@@ -42,9 +43,10 @@ BEGIN{
      @EXPORT = ();
      %EXPORT_TAGS = (configuration => [qw(dirsize create_debbugs_configuration send_message)],
                     mail          => [qw(num_messages_sent)],
+                    database => [qw(create_postgresql_database update_postgresql_database)]
                    );
      @EXPORT_OK = ();
-     Exporter::export_ok_tags(qw(configuration mail));
+     Exporter::export_ok_tags(keys %EXPORT_TAGS);
      $EXPORT_TAGS{all} = [@EXPORT_OK];
 }
 
@@ -57,7 +59,8 @@ BEGIN{
 sub create_debbugs_configuration {
      my %param = validate_with(params => \@_,
                               spec   => {debug => {type => BOOLEAN,
-                                                   default => 0,
+                                                   default => exists $ENV{DEBUG}?
+                                                   $ENV{DEBUG}:0,
                                                   },
                                          cleanup => {type => BOOLEAN,
                                                      optional => 1,
@@ -73,6 +76,7 @@ sub create_debbugs_configuration {
      $ENV{DEBBUGS_CONFIG_FILE}  ="$config_dir/debbugs_config";
      $ENV{PERL5LIB} = getcwd();
      $ENV{SENDMAIL_TESTDIR} = $sendmail_dir;
+     eval {
      my $sendmail_tester = getcwd().'/t/sendmail_tester';
      unless (-x $sendmail_tester) {
          die q(t/sendmail_tester doesn't exist or isn't executable. You may be in the wrong directory.);
@@ -82,6 +86,7 @@ sub create_debbugs_configuration {
 \$gSpoolDir='$spool_dir';
 \$gLibPath='@{[getcwd()]}/scripts';
 \$gTemplateDir='@{[getcwd()]}/templates';
+\$gWebDir='@{[getcwd()]}/html';
 \$gWebHost='localhost';
 1;
 END
@@ -111,12 +116,24 @@ END
            "$spool_dir/index.archive");
 
      # create the spool files and sub directories
-     map {system('mkdir','-p',"$spool_dir/$_"); }
-         map {('db-h/'.$_,'archive/'.$_)}
-              map { sprintf "%02d",$_ % 100} 0..99;
+     for my $dir (0..99) {
+         for my $archive (qw(db-h archive)) {
+             system('mkdir','-p',"$spool_dir/$archive/".sprintf('%02d',$dir));
+         }
+     }
      system('mkdir','-p',"$spool_dir/incoming");
      system('mkdir','-p',"$spool_dir/lock");
+     eval '
+END{
+     if ($ENV{DEBUG}) {
+         diag("spool_dir:   $spool_dir\n");
+         diag("config_dir:   $config_dir\n",);
+         diag("sendmail_dir: $sendmail_dir\n");
+     }
+}';
 
+     };
+     BAIL_OUT ($@) if ($@);
      return (spool_dir => $spool_dir,
             sendmail_dir => $sendmail_dir,
             config_dir => $config_dir,
@@ -156,8 +173,9 @@ sub send_message{
      $ENV{LOCAL_PART} = $param{to};
      my ($rfd,$wfd);
      my $output='';
-     local $SIG{PIPE} = 'IGNORE';
-     local $SIG{CHLD} = sub {};
+     my $pipe_handler = $SIG{PIPE};
+     $SIG{PIPE} = 'IGNORE';
+     $SIG{CHLD} = 'DEFAULT';
      my $pid = open3($wfd,$rfd,$rfd,'scripts/receive')
          or die "Unable to start receive: $!";
      print {$wfd} create_mime_message($param{headers},
@@ -165,6 +183,7 @@ sub send_message{
                                      $param{attachments}) or
                                          die "Unable to to print to receive";
      close($wfd) or die "Unable to close receive";
+     $SIG{PIPE} = $pipe_handler;
      my $err = $? >> 8;
      my $childpid = waitpid($pid,0);
      if ($childpid != -1) {
@@ -190,7 +209,7 @@ sub send_message{
 
 {
      package DebbugsTest::HTTPServer;
-     use base qw(HTTP::Server::Simple::CGI);
+     use base qw(HTTP::Server::Simple::CGI HTTP::Server::Simple::CGI::Environment);
 
      our $child_pid = undef;
      our $webserver = undef;
@@ -258,6 +277,98 @@ sub num_messages_sent {
     return $cur_size;
 }
 
+=head2 create_postgresql_database
+
+C<my $pgsql = create_postgresql_database();>
+
+Create a postgresql database for testing; when the L<Test::PostgreSQL> object it
+returns is destroyed (or goes out of scope) the database will be removed.
+
+=cut
+
+sub create_postgresql_database {
+    my $pgsql = Test::PostgreSQL->new(use_socket => 1) or
+       return undef;
+    my $installsql =
+       File::Spec->rel2abs(dirname(__FILE__).'/../..').
+           '/bin/debbugs-installsql';
+    # create the debversion extension
+    my $dbh = DBI->connect($pgsql->dsn);
+    $dbh->do(<<END) or die "Unable to create extension";
+CREATE EXTENSION IF NOT EXISTS debversion;
+END
+    # create the schema for the bug tracking system
+    my $dep_dir = File::Temp::tempdir(CLEANUP=>1);
+    system($installsql,
+          '--dsn',$pgsql->dsn,
+          '--install',
+          '--deployment-dir',$dep_dir);
+
+    initialize_postgresql_database($pgsql,@_);
+    return $pgsql;
+}
+
+=item iniitalize_postgresql_database
+
+C<initialize_postgresql_database();>
+
+Initialize postgresql database by calling debbugs-loadsql appropriately.
+
+=cut
+
+sub initialize_postgresql_database {
+    my ($pgsql,@options) = @_;
+    my $loadsql =
+       File::Spec->rel2abs(dirname(__FILE__).'/../..').
+           '/bin/debbugs-loadsql';
+
+    my $ftpdists =
+       File::Spec->rel2abs(dirname(__FILE__).'/../debian/dist');
+    my $debinfo_dir =
+       File::Spec->rel2abs(dirname(__FILE__).'/../debian/debinfo');
+    my %loadsql_commands =
+       (configuration => [],
+        suites => ['--ftpdists',$ftpdists],
+        debinfo => ['--debinfo-dir',$debinfo_dir],
+        packages => ['--ftpdists',$ftpdists],
+        maintainers => [],
+       );
+    for my $command (keys %loadsql_commands) {
+       system($loadsql,$command,
+              '--dsn',$pgsql->dsn,
+              @options,
+              @{$loadsql_commands{$command}}) == 0 or
+                  die "Unable to load $command";
+    }
+}
+
+
+=item update_postgresql_database
+
+C<update_postgresql_database();>
+
+Update the postgresql database by calling debbugs-loadsql appropriately.
+
+=cut
+sub update_postgresql_database {
+    my ($pgsql,@options) = @_;
+    my $loadsql =
+       File::Spec->rel2abs(dirname(__FILE__).'/../..').
+           '/bin/debbugs-loadsql';
+
+    my %loadsql_commands =
+       (bugs_and_logs => [],
+       );
+    for my $command (keys %loadsql_commands) {
+       system($loadsql,$command,
+              '--dsn',$pgsql->dsn,
+              @options,
+              @{$loadsql_commands{$command}}) == 0 or
+                  die "Unable to load $command";
+    }
+}
+
+
 
 1;