t/lib/es_async.pl (93 lines of code) (raw):
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#!perl -d
use EV;
use AE;
use lib qw(lib t/lib);
use Promises backend => ['EV'];
use Search::Elasticsearch::Async;
use Test::More;
use strict;
use warnings;
$ENV{ES} = $ENV{ELASTICSEARCH_URL} || 'https://elastic:changeme@localhost:9200';
my $trace
= !$ENV{TRACE} ? undef
: $ENV{TRACE} eq '1' ? 'Stderr'
: [ 'File', $ENV{TRACE} ];
unless ($ENV{CLIENT_VER}) {
plan skip_all => 'No $ENV{CLIENT_VER} specified';
exit;
}
unless ($ENV{ES}) {
plan skip_all => 'No Elasticsearch test node available';
exit;
}
my $cv = AE::cv;
my $api = "$ENV{CLIENT_VER}::Direct";
my $body = $ENV{ES_BODY} || 'GET';
my $cxn = $ENV{ES_CXN} || do "default_async_cxn.pl" || die( $@ || $! );
my $cxn_pool = $ENV{ES_CXN_POOL} || 'Async::Static';
my @plugins = split /,/, ( $ENV{ES_PLUGINS} || '' );
our %Auth;
if ( $cxn eq 'Mojo' && !eval { require Mojo::UserAgent; 1 } ) {
plan skip_all => 'Mojo::UserAgent not installed';
exit;
}
{
no warnings 'redefine';
#===================================
sub wait_for {
#===================================
my $promise = shift;
my $cv = AE::cv;
$promise->done( $cv, sub { $cv->croak(@_) } );
$cv->recv;
}
}
$ENV{PERL_HTTP_TINY_SSL_INSECURE_BY_DEFAULT} = 1;
my $es;
if ( $ENV{ES} ) {
eval {
$es = Search::Elasticsearch::Async->new(
nodes => [ $ENV{ES} ],
trace_to => $trace,
cxn => $cxn,
cxn_pool => $cxn_pool,
client => $api,
send_get_body_as => $body,
plugins => \@plugins,
%Auth
);
if ( $ENV{ES_SKIP_PING} ) {
$cv->send(1);
}
else {
$es->ping->then( sub { $cv->send(@_) }, sub { $cv->croak(@_) } );
}
$cv->recv;
1;
} or do {
diag $@;
undef $es;
};
}
unless ($es) {
plan skip_all => 'No Elasticsearch test node available';
exit;
}
unless ( $ENV{ES_SKIP_PING} ) {
my $version = wait_for( $es->info )->{version}{number};
my $api = $es->api_version;
unless ( $version eq '8.0.0-SNAPSHOT' || ( $api eq '0_90' && $version =~ /^0\.9/
|| substr( $api, 0, 1 ) eq substr( $version, 0, 1 ) ) )
{
plan skip_all =>
"Tests are for API version $api but Elasticsearch is version $version\n";
exit;
}
}
return $es;
unless ( $ENV{ES_SKIP_PING} ) {
my $version = wait_for( $es->info )->{version}{number};
my $api = $es->api_version;
diag "$version - $api\n";
die "Tests are for API version $api but Elasticsearch is version $version\n"
unless $api eq '0.90' && $version =~ /^0\.9/
|| substr( $api, 0, 1 ) eq substr( $version, 0, 1 );
}
return $es;