RT notifier: parse templates without header correctly
[openxpki.git] / trunk / clients / perl / OpenXPKI-Client-SCEP / t / 35.scep-initial-enrollment.t
blob84e70187e284255bd0ef4998ae8784a5a67d2b2a
1 use Test::More tests => 2;
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>/dev/null';
19 if ($debug) {
20     $stderr = '';
23 diag("SCEP Client Test: initial enrollment");
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.", 2;
32     }
33     if (! (`$config{openssl} version` =~ m{\A OpenSSL\ 0\.9\.8 }xms)) {
34         skip "OpenSSL 0.9.8 not available.", 2;
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         # create a key and a certificate request
89         my $openssl = $config{'openssl'};
90         `$openssl genrsa -out t/instance/request_key.pem 1024 $stderr`;
91         `(echo '.'; echo '.'; echo '.'; echo 'OpenXPKI'; echo 'SCEP test certificate'; echo 'SCEP test certificate'; echo '.'; echo '.'; echo '.')| openssl req -new -key t/instance/request_key.pem -out t/instance/request.csr $stderr`;
93         # use sscep to start the enrollment
94         my $scep_uri = "http://127.0.0.1:$config{http_server_port}/cgi-bin/scep";
95         my $scep_result = `$sscep enroll -u $scep_uri -c $config{server_dir}/cacert-0 -k t/instance/request_key.pem -r t/instance/request.csr -l t/instance/certificate -t 5 -n 0 -v $stderr`;
96         if ($debug) {
97             print STDERR $scep_result;
98         }
99         ok($scep_result =~ m{pkistatus:\ PENDING}xms);
100         
101         kill(9, $pid);
103         my $kid;
104         do {
105             $kid = waitpid(-1, WNOHANG);
106         } until $kid > 0;
109    } else {
110         # child here
111         # parent process pid is available with getppid
112         
113         # start a minimal HTTP server to test the CGI
114         my $http_server = getcwd . "/t/http_server.pl";
115         chdir $cgi_dir;
116         exec("perl $http_server $config{http_server_port}");
117     }