RT notifier: parse templates without header correctly
[openxpki.git] / trunk / clients / perl / OpenXPKI-Client-SCEP / t / 30.scep-getca.t
blob879544722c56944093e7f9a93b729d9444b89260
1 use Test::More tests => 4;
2 use File::Path;
3 use File::Spec;
4 use File::Copy;
5 use Cwd;
6 use English;
8 use POSIX ":sys_wait_h";
9 use Errno;
11 use strict;
12 use warnings;
14 our %config;
15 require 't/common.pl';
17 my $debug = $config{debug};
18 my $stderr = '2>/tmp/stderr';
19 #if ($debug) {
20 #    $stderr = '';
23 diag("SCEP Client Test: GetCACert");
25 my $sscep = 'sscep';
26 my $cgi_dir = $config{cgi_dir};
29 SKIP: {
30     if (system("$sscep >/dev/null $stderr") != 0) {
31         skip "sscep binary not installed.", 4;
32     }
33     if (! (`$config{openssl} version` =~ m{\A OpenSSL\ 0\.9\.8 }xms)) {
34         skip "OpenSSL 0.9.8 not available.", 4;
35     }
37     ok(mkpath($cgi_dir));
38     # create configuration
39     open my $HANDLE, ">", "$cgi_dir/scep.cfg";
40     print $HANDLE "[global]\n";
41     print $HANDLE "socket=$config{socket_file}\n";
42     print $HANDLE "realm=I18N_OPENXPKI_DEPLOYMENT_TEST_DUMMY_CA\n";
43     print $HANDLE "iprange=127.0.0.0/8\n";
44     print $HANDLE "profile=I18N_OPENXPKI_PROFILE_TLS_SERVER\n";
45     print $HANDLE "servername=testscepserver1\n";
46     print $HANDLE "encryption_algorithm=3DES\n";
47     close $HANDLE;
49     ok(copy("bin/scep", $cgi_dir));
50     chmod 0755, $cgi_dir . '/scep';
52     my $scep_uri = "http://127.0.0.1:$config{http_server_port}/cgi-bin/scep";
54     my $cacert_base = "$config{server_dir}/cacert";
57     my $redo_count = 0;
58     my $pid;
59   FORK:
60     do {
61         $pid = fork();
62         if (! defined $pid) {
63             if ($!{EAGAIN}) {
64                 # recoverable fork error
65                 if ($redo_count > 5) {
66                     print STDERR "FAILED.\n";
67                     print STDERR "Could not fork process\n";
68                     return;
69                 }
70                 print STDERR '.';
71                 sleep 5;
72                 $redo_count++;
73                 redo FORK;
74             }
76             # other fork error
77             print STDERR "FAILED.\n";
78             print STDERR "Could not fork process: $ERRNO\n";
79             return;
80         }
81     } until defined $pid;
83     if ($pid) {
84         # parent here
85         # child process pid is available in $pid
86         sleep 3;
88         # use the sscep client to get the CA certificates
89         ok(system("$sscep getca -v -d -u $scep_uri -c $cacert_base $stderr") == 0);
91         my $index = 0;
92         ok(-r "$cacert_base-$index");
94         kill(9, $pid);
96         my $kid;
97         do {
98             $kid = waitpid(-1, WNOHANG);
99         } until $kid > 0;
102    } else {
103         # child here
104         # parent process pid is available with getppid
105         
106         # start a minimal HTTP server to test the CGI
107         my $http_server = getcwd . "/t/http_server.pl";
108         chdir $cgi_dir;
109         exec("perl $http_server $config{http_server_port}");
110     }