#!/usr/bin/perl BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use strict; use warnings; use Test::More; use lib 'lib'; eval "use LWP::UserAgent"; plan skip_all => "LWP::UserAgent required for testing ping" if $@; eval "use Test::TCP"; plan skip_all => "Test::TCP required for testing ping" if $@; plan tests => 24; use Ubic; use Ubic::PortMap; use Cwd; use Try::Tiny; use t::Utils; rebuild_tfiles(); local_ubic; my $ignore_warn = ignore_warn(qr/Can't construct 'broken': failed/); END { Ubic->stop('ubic.ping'); } my $port = empty_port(); $ENV{UBIC_SERVICE_PING_PORT} = $port; $ENV{UBIC_SERVICE_PING_LOG} = 'tfiles/ubic-ping.log'; try { Ubic->start('ubic.ping'); } catch { diag("Error: $_"); open my $log_fh, '<', 'tfiles/ubic-ping.log' or die "Can't open log: $!"; my $log = do { local $/ = undef; <$log_fh> }; $log =~ s/\n/\\n/g; BAIL_OUT("Failed to start ubic.ping: $log"); }; Ubic::PortMap::update; my $another_port = Ubic->service('fake-http-service')->port; my $ua = LWP::UserAgent->new; # ping ping (2) { my $response = $ua->get("http://localhost:$port/ping"); ok($response->is_success, '/ping successful'); is($response->content, "ok\n", '/ping returns ok'); } # /status/service/ (9) { my $response = $ua->get("http://localhost:$port/status/service/unknown"); is($response->code, 404, 'unknown service not found'); $response = $ua->get("http://localhost:$port/status/service/ubic.ping"); is($response->code, 200, 'ubic.ping service found'); is($response->content, "ok\n", 'ubic.ping service is ok'); $response = $ua->get("http://localhost:$port/status/service/fake-http-service"); is($response->code, 200, "service fake-http-service found"); is($response->content, "disabled\n", 'fake-http-service is not running'); Ubic->start('fake-http-service'); $response = $ua->get("http://localhost:$port/status/service/fake-http-service"); is($response->code, 200, "service fake-http-service found"); is($response->content, "ok\n", 'fake-http-service now is running'); $response = $ua->get("http://localhost:$port/status/service/fake-http-service2"); is($response->code, 200, "service fake-http-service2 found"); is($response->content, "disabled\n", 'fake-http-service is still down'); Ubic->stop('fake-http-service'); } # /status/port/ (9) { my $response = $ua->get("http://localhost:$port/status/port/80"); is($response->code, 404, 'service on 80 port not found'); $response = $ua->get("http://localhost:$port/status/port/$port"); is($response->code, 200, "service on $port port found"); is($response->content, "ok\n", 'ubic.ping service is running'); $response = $ua->get("http://localhost:$port/status/port/$another_port"); is($response->code, 200, "service on $another_port port found"); is($response->content, "disabled\n", 'service is not running'); Ubic->start('fake-http-service'); $response = $ua->get("http://localhost:$port/status/port/$another_port"); is($response->code, 200, "service on $another_port found"); is($response->content, "ok\n", "service on $another_port now is running"); Ubic->stop('fake-http-service'); Ubic->start('fake-http-service2'); $response = $ua->get("http://localhost:$port/status/port/$another_port"); is($response->code, 200, "service on $another_port found"); is($response->content, "ok\n", "service on $another_port is still running - ubic.ping chooses best service by port"); Ubic->stop('fake-http-service2'); } # /noc/ (4) { my $response = $ua->get("http://localhost:$port/noc/80"); is($response->code, 404, 'service on 80 port not found'); $response = $ua->get("http://localhost:$port/noc/$port"); is($response->code, 200, "service on $port port found"); is($response->content, "ok\n", 'ubic.ping service is running'); $response = $ua->get("http://localhost:$port/noc/$another_port"); is($response->code, 500, "service on $port port is down"); }