comparison lib/Test/Nginx.pm @ 20:c57e8bd7bfc7

Tests: running simple daemons supplied as coderef. This will allow us to write and run fake backend servers as needed. Daemons are stopped by SIGTERM when test terminates.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 26 Sep 2008 18:24:28 +0400
parents c6c36d7a4d90
children 89b00444c168
comparison
equal deleted inserted replaced
19:b331c3113ebb 20:c57e8bd7bfc7
62 62
63 # wait for nginx to start 63 # wait for nginx to start
64 64
65 sleep 1; 65 sleep 1;
66 66
67 $self->{_started} = 1;
67 return $self; 68 return $self;
68 } 69 }
69 70
70 sub stop() { 71 sub stop() {
71 my ($self) = @_; 72 my ($self) = @_;
72 73
73 # terminate nginx by SIGTERM 74 while ($self->{_daemons} && scalar @{$self->{_daemons}}) {
74 kill 15, `cat $self->{_testdir}/nginx.pid`; 75 my $p = shift @{$self->{_daemons}};
76 kill 'TERM', $p;
77 wait;
78 }
79
80 return $self unless $self->{_started};
81
82 kill 'TERM', `cat $self->{_testdir}/nginx.pid`;
75 wait; 83 wait;
84
85 $self->{_started} = 0;
76 86
77 return $self; 87 return $self;
78 } 88 }
79 89
80 sub write_file($$) { 90 sub write_file($$) {
92 my ($self, $name, $content) = @_; 102 my ($self, $name, $content) = @_;
93 103
94 $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms; 104 $content =~ s/%%TESTDIR%%/$self->{_testdir}/gms;
95 105
96 return $self->write_file($name, $content); 106 return $self->write_file($name, $content);
107 }
108
109 sub run_daemon($) {
110 my ($self, $code) = @_;
111
112 my $pid = fork();
113 die "Can't fork daemon: $!\n" unless defined $pid;
114
115 if ($pid == 0) {
116 $code->();
117 exit 0;
118 }
119
120 $self->{_daemons} = [] unless defined $self->{_daemons};
121 push @{$self->{_daemons}}, $pid;
122
123 return $self;
97 } 124 }
98 125
99 ############################################################################### 126 ###############################################################################
100 127
101 sub log_out { 128 sub log_out {