#!/usr/bin/env perl

use strict;
use warnings;
use File::Basename qw(dirname);
use IO::Socket;
use Time::HiRes qw(usleep);

my $dir = dirname($0);
my $hostip = `boot2docker ip`;

sub check_port {
    my ($ip, $port, $times, $sleep) = @_;
    for (my $i = 0; $i < $times; $i++) {
        my $sock = IO::Socket::INET->new(
            PeerAddr => $ip,
            PeerPort => $port,
            Proto => 'tcp',
            Timeout => 2
        );
        return 1 if $sock;
        usleep($sleep * 1000);
    }
    return 0;
}

my $from = $ARGV[0] || 42;
my $to = $ARGV[1] || $from;

for (my $version = $from; $version <= $to; $version++) {
    printf("==================== Wordpress %d ====================\n", $version);
    print(" - Running\n");
    my $ret = system("$dir/run-wordpress $version > /dev/null 2>&1");
    if ($ret) {
        print("   Error: $ret\n");
        next;
    }
    print(" - Waiting\n");
    sleep(10);
    print(" - Checking\n");
    if (!check_port($hostip, 8000 + $version, 10, 500)) {
        print("   Error: No open port\n");
        next;
    }
    print(" - Testing\n");
    $ret = system("$dir/test-wordpress $version");
    if ($ret) {
        print("   Error: $ret\n");
        next;
    }
}