Grpc-XS

 view release on metacpan or  search on metacpan

t/16-xs_secure_end_to_end.t  view on Meta::CPAN

#!perl -w
use strict;
use Data::Dumper;
use Test::More;
use Devel::Peek;

use File::Basename;
use File::Spec;
my $path = File::Basename::dirname( File::Spec->rel2abs(__FILE__) );

plan tests => 46;

use_ok("Grpc::XS::CallCredentials");

## ----------------------------------------------------------------------------

delete @ENV{grep /https?_proxy/i, keys %ENV};

use_ok("Grpc::XS::Server");
use_ok("Grpc::XS::Channel");
use_ok("Grpc::XS::Call");
use_ok("Grpc::XS::Timeval");
use_ok("Grpc::Constants");

sub file_get_contents {
  my $file = shift;
  open(F,"<".$file);
  my $content = join("",<F>);
  close(F);
  return $content;
}

#####################################################
## setup
#####################################################

my $credentials = Grpc::XS::ChannelCredentials::createSsl(
        pem_root_certs => file_get_contents($path.'/data/ca.pem'));
my $server_credentials = Grpc::XS::ServerCredentials::createSsl(
        pem_root_certs  => undef,
        pem_private_key => file_get_contents($path.'/data/server1.key'),
        pem_cert_chain  => file_get_contents($path.'/data/server1.pem'));

my $server = new Grpc::XS::Server();
my $port = $server->addSecureHttp2Port('0.0.0.0:0',
                                              $server_credentials);
$server->start();
my $host_override = 'foo.test.google.fr';
my $channel = new Grpc::XS::Channel(
            'localhost:'.$port,
            'grpc.ssl_target_name_override' => $host_override,
            'grpc.default_authority' => $host_override,
            'credentials' => $credentials,
        );

#####################################################
## testSimpleRequestBody
#####################################################

my $deadline = Grpc::XS::Timeval::infFuture();
my $status_text = 'xyz';
my $call = new Grpc::XS::Call($channel,
                      'dummy_method',
                      $deadline,
                      $host_override);

my $event = $call->startBatch(
      Grpc::Constants::GRPC_OP_SEND_INITIAL_METADATA() => {},
      Grpc::Constants::GRPC_OP_SEND_CLOSE_FROM_CLIENT() => 1,
);

ok($event->{send_metadata},"startBatch failed return send_metadata");
ok($event->{send_close},"startBatch failed return send_close");

$event = $server->requestCall();
ok($event->{method} eq 'dummy_method',"event->method has wrong value");
my $server_call = $event->{call};

$event = $server_call->startBatch(
    Grpc::Constants::GRPC_OP_SEND_INITIAL_METADATA() => {},
    Grpc::Constants::GRPC_OP_SEND_STATUS_FROM_SERVER() => {
        'metadata' => {},
        'code' => Grpc::Constants::GRPC_STATUS_OK(),
        'details' => $status_text,
    },
    Grpc::Constants::GRPC_OP_RECV_CLOSE_ON_SERVER() => 1,
);

ok($event->{send_metadata},"send_metadata is not true");
ok($event->{send_status},"send_status is not true");
ok(!$event->{cancelled},"cancelled is not false");

$event = $call->startBatch(
    Grpc::Constants::GRPC_OP_RECV_INITIAL_METADATA() => 1,
    Grpc::Constants::GRPC_OP_RECV_STATUS_ON_CLIENT() => 1,
);

ok(ref($event->{metadata})=~/HASH/,"event->metadata is not a hash");
ok(!(keys %{$event->{metadata}}),"event->metadata is not an empty hash");

my $status = $event->{status};



( run in 2.866 seconds using v1.01-cache-2.11-cpan-364913b4093 )