JMAP-Tester

 view release on metacpan or  search on metacpan

lib/JMAP/Tester/UA/LWP.pm  view on Meta::CPAN

use v5.14.0;
use warnings;

package JMAP::Tester::UA::LWP 0.109;

use Moo;
with 'JMAP::Tester::Role::UA';

use experimental 'signatures';

use Carp ();
use Future;

has lwp => (
  is   => 'ro',
  lazy => 1,
  default => sub ($self) {
    require LWP::UserAgent;
    my $lwp = LWP::UserAgent->new(keep_alive => 1);
    $lwp->cookie_jar({});

    $lwp->default_header('Content-Type' => 'application/json');

    if ($ENV{IGNORE_INVALID_CERT}) {
      $lwp->ssl_opts(SSL_verify_mode => 0, verify_hostname => 0);
    }

    return $lwp;
  },
);

sub set_cookie ($self, $arg) {
  for (qw(api_uri name value)) {
    Carp::confess("can't set_cookie without $_") unless $arg->{$_};
  }

  my $uri = URI->new($arg->{api_uri});

  $self->lwp->cookie_jar->set_cookie(
    1,
    $arg->{name},
    $arg->{value},
    '/',
    $arg->{domain} // $uri->host,
    $uri->port,
    0,
    ($uri->port == 443 ? 1 : 0),
    86400,
    0,
    $arg->{rest} || {},
  );
}

sub scan_cookies ($self, $callback) {
  return $self->lwp->cookie_jar->scan($callback);
}

sub get_default_header ($self, $name) {
  return scalar $self->lwp->default_header($name);
}

sub set_default_header ($self, $name, $value) {
  $self->lwp->default_header($name, $value);
  return;
}

sub request ($self, $tester, $req, $log_type, $log_extra = undef) {
  Carp::cluck("something very strange happened") unless $tester->can('_logger');
  my $logger = $tester->_logger;

  my $log_method = "log_" . ($log_type // 'jmap') . '_request';
  if ($logger->can($log_method)) {
    $self->lwp->set_my_handler(request_send => sub {
      my ($req) = @_;
      $logger->$log_method(
        $tester,
        {
          ($log_extra ? %$log_extra : ()),
          http_request => $req,



( run in 0.508 second using v1.01-cache-2.11-cpan-5735350b133 )