Skip to content

Commit

Permalink
Fixes for travis
Browse files Browse the repository at this point in the history
Travis updated the container images so that the perl
reference to 5.18 was outdated. We use now 5.26 which
works, however we should consider to be more flexible.

JSON::Validator didn't compile in the container. Thus
we switched to just use 'JSON'. That also supports JSON
pretty. For the future we should just test for valid JSON
in all unit test files as it is more effective.
  • Loading branch information
drwetter committed Aug 12, 2019
1 parent ddd9d76 commit 8749327
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 41 deletions.
12 changes: 5 additions & 7 deletions .travis.yml
@@ -1,17 +1,15 @@
language: perl language: perl
perl: perl:
- "5.18"
- "5.22"
- "5.24"
- "5.26" - "5.26"
addons: addons:
apt: apt:
packages: packages:
- dnsutils - dnsutils
- jsonlint
install: install:
- cpanm Test::More - cpanm --notest Test::More
- cpanm Data::Dumper - cpanm --notest Data::Dumper
- cpanm JSON - cpanm --notest JSON
- cpanm JSON::Validator # - cpanm JSON::Validator
script: script:
- prove -v - prove -v
75 changes: 42 additions & 33 deletions t/07_isJSON_valid.t
Expand Up @@ -2,63 +2,72 @@


# This is more a PoC. Improvements welcome! # This is more a PoC. Improvements welcome!
# #
# Current catches:
# * JSON::Validator cannot swallow --json-pretty
# * other validators "Test::JSON", "Test::JSON::More", "JSON::Schema", "JSON::Parse" had issues too


use strict; use strict;
use Test::More; use Test::More;
use JSON; use JSON;
use JSON::Validator;

my $tests = 0;
my $jv = JSON::Validator->new; my $prg="./testssl.sh";
my ( my $check2run ="--ip=one -q -p --color 0";
$out, my $uri="";
$json, my $json="";
$found, my $out="";
$tests # Blacklists we use to trigger an error:
); my $socket_regex_bl='(e|E)rror|\.\/testssl\.sh: line |(f|F)atal';
$tests = 0; my $openssl_regex_bl='(e|E)rror|(f|F)atal|\.\/testssl\.sh: line |Oops|s_client connect problem';


my $hostn = "cloudflare.com"; die "Unable to open $prg" unless -f $prg;
my $hostm = "smtp-relay.gmail.com:587";
unlink 'tmp.json'; my $uri="cloudflare.com";


#1 #1
pass("Running testssl.sh against $hostn with plain JSON output"); printf "\n%s\n", "Unit testing plain JSON output --> $uri ...";
$tests++; $out = `./testssl.sh $check2run --jsonfile tmp.json $uri`;
$out = `./testssl.sh --ssl-native --ip=one -q --jsonfile tmp.json --color 0 $hostn`;
$json = json('tmp.json'); $json = json('tmp.json');
unlink 'tmp.json'; unlink 'tmp.json';
my @errors=eval { decode_json($json) };
is(@errors,0,"no errors");
$tests++;


#2 #2
my @errors = $jv->validate(@$json); printf "\n%s\n", "Unit testing pretty JSON output --> $uri ...";
$out = `./testssl.sh $check2run --jsonfile-pretty tmp.json $uri`;
$json = json('tmp.json');
unlink 'tmp.json';
@errors=eval { decode_json($json) };
is(@errors,0,"no errors"); is(@errors,0,"no errors");
$tests++; $tests++;



#3 #3
# This testss.sh run deliberately does NOT work as travis-ci.org blocks port 25 egress. The idea # This testss.sh run deliberately does NOT work as travis-ci.org blocks port 25 egress.
# is to have a unit test for a failed connection. # but the output should be fine. The idea is to have a unit test for a failed connection.
pass("Running testssl.sh --mx against $hostn with plain JSON -- run will fail"); printf "\n%s\n", "Checking plain JSON output for a failed run '--mx $uri' ...";
$tests++; $out = `./testssl.sh --ssl-native --openssl-timeout=10 $check2run --jsonfile tmp.json --mx $uri`;
$out = `./testssl.sh --ssl-native --openssl-timeout=10 --ip=one --mx -q --jsonfile tmp.json --color 0 $hostn`;
$json = json('tmp.json'); $json = json('tmp.json');
unlink 'tmp.json'; unlink 'tmp.json';
@errors=eval { decode_json($json) };
is(@errors,0,"no errors");
$tests++;


#4 #4
my @errors = $jv->validate(@$json); # Same as above but with pretty JSON
printf "\n%s\n", "Checking pretty JSON output for a failed run '--mx $uri' ...";
$out = `./testssl.sh --ssl-native --openssl-timeout=10 $check2run --jsonfile-pretty tmp.json --mx $uri`;
$json = json('tmp.json');
unlink 'tmp.json';
@errors=eval { decode_json($json) };
is(@errors,0,"no errors"); is(@errors,0,"no errors");
$tests++; $tests++;


#5 #5
pass("Running testssl.sh against $hostm with plain JSON output"); my $uri = "smtp-relay.gmail.com:587";
$out = `./testssl.sh --jsonfile tmp.json --color 0 -t smtp $hostm`; printf "\n%s\n", " Unit testing plain JSON output --> $uri ...";
$tests++; $out = `./testssl.sh --jsonfile tmp.json $check2run -t smtp $uri`;
$json = json('tmp.json'); $json = json('tmp.json');
unlink 'tmp.json'; unlink 'tmp.json';

@errors=eval { decode_json($json) };
#6
my @errors = $jv->validate(@$json);
is(@errors,0,"no errors"); is(@errors,0,"no errors");
$tests++; $tests++;


Expand Down
2 changes: 1 addition & 1 deletion testssl.sh
Expand Up @@ -17880,7 +17880,7 @@ determine_service() {
local ua local ua
local protocol local protocol


# check if we can connect to $NODEIP:$PORT # Check if we can connect to $NODEIP:$PORT. Attention: This ALWAYS uses sockets. Thus timeouts for --ssl-=native do not apply
if ! fd_socket 5; then if ! fd_socket 5; then
if [[ -n "$PROXY" ]]; then if [[ -n "$PROXY" ]]; then
fatal "You're sure $PROXYNODE:$PROXYPORT allows tunneling here? Can't connect to \"$NODEIP:$PORT\"" $ERR_CONNECT fatal "You're sure $PROXYNODE:$PROXYPORT allows tunneling here? Can't connect to \"$NODEIP:$PORT\"" $ERR_CONNECT
Expand Down

0 comments on commit 8749327

Please sign in to comment.