@@ -16,10 +16,18 @@ use base qw/ Exporter /;
16
16
our @EXPORT_OK = qw/ acme_test_daemon / ;
17
17
18
18
use File::Spec;
19
+ use Test::More qw/ / ;
20
+
19
21
use Test::Nginx qw/ / ;
20
22
21
23
our $PEBBLE = $ENV {TEST_NGINX_PEBBLE_BINARY } // ' pebble' ;
22
24
25
+ my %features = (
26
+ ' eab' => ' 2.5.2' , # broken in 2.5.0
27
+ ' profile' => ' 2.7.0' ,
28
+ ' validity' => ' 2.4.0' ,
29
+ );
30
+
23
31
sub new {
24
32
my $self = {};
25
33
bless $self , shift @_ ;
@@ -92,8 +100,59 @@ sub wait_certificate {
92
100
}
93
101
}
94
102
103
+ sub has {
104
+ my ($self , @requested ) = @_ ;
105
+
106
+ foreach my $feature (@requested ) {
107
+ Test::More::plan(skip_all => " no $feature available" )
108
+ unless $self -> has_feature($feature );
109
+ }
110
+
111
+ return $self ;
112
+ }
113
+
114
+ sub has_feature {
115
+ my ($self , $feature ) = @_ ;
116
+ my $ver ;
117
+
118
+ if (defined $features {$feature }) {
119
+ $ver = $features {$feature };
120
+ } elsif ($feature =~ / ^pebble:([\d .]+)$ / ) {
121
+ $ver = $1 ;
122
+ } else {
123
+ return 0;
124
+ }
125
+
126
+ $self -> {_version } //= _pebble_version();
127
+ return 0 unless $self -> {_version };
128
+
129
+ my @v = split (/ \. / , $self -> {_version });
130
+ my ($n , $v );
131
+
132
+ for my $n (split (/ \. / , $ver )) {
133
+ $v = shift @v || 0;
134
+ return 0 if $n > $v ;
135
+ return 1 if $v > $n ;
136
+ }
137
+
138
+ return 1;
139
+ }
140
+
95
141
# ##############################################################################
96
142
143
+ sub _pebble_version {
144
+ my $ver = ` $PEBBLE -version 2>&1` ;
145
+
146
+ if ($ver =~ / version: v?([\d .]+)/ ) {
147
+ Test::Nginx::log_core(' || ACME: pebble version' , $1 );
148
+ return $1 ;
149
+ } elsif (defined $ver ) {
150
+ # The binary is available, but does not have the version info.
151
+ Test::Nginx::log_core(' || ACME: pebble version unknown' );
152
+ return ' 0' ;
153
+ }
154
+ }
155
+
97
156
sub _get_body {
98
157
my ($port , $uri ) = @_ ;
99
158
0 commit comments