negentropy/test/protoversion.pl

60 lines
1.4 KiB
Perl
Raw Normal View History

2023-09-16 22:51:22 -04:00
#!/usr/bin/env perl
use strict;
$|++;
use IPC::Open2;
use Session::Token;
use FindBin;
use lib "$FindBin::Bin";
use Utils;
die "usage: $0 <lang>" if @ARGV < 1;
my $harnessCmd = Utils::harnessTypeToCmd(shift) || die "please provide harness type (cpp, js, etc)";
my $expectedResp;
2023-10-20 15:25:40 -04:00
## Get expected response using protocol version 1
2023-09-16 22:51:22 -04:00
{
my ($infile, $outfile);
my $pid = open2($outfile, $infile, $harnessCmd);
2023-10-20 15:25:40 -04:00
print $infile "item,12345,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n";
2023-09-16 22:51:22 -04:00
print $infile "seal\n";
2023-10-20 15:25:40 -04:00
print $infile "msg,6100000200\n"; ## full range bound, empty IdList
2023-09-16 22:51:22 -04:00
my $resp = <$outfile>;
chomp $resp;
$expectedResp = $resp;
}
2023-10-20 15:25:40 -04:00
## Client tries to use some hypothetical newer version, but falls back to version 1
2023-09-16 22:51:22 -04:00
{
my ($infile, $outfile);
my $pid = open2($outfile, $infile, $harnessCmd);
2023-10-20 15:25:40 -04:00
print $infile "item,12345,eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n";
2023-09-16 22:51:22 -04:00
print $infile "seal\n";
2023-10-20 15:25:40 -04:00
print $infile "msg,62aabbccddeeff\n"; ## some new protocol message
2023-09-16 22:51:22 -04:00
my $resp = <$outfile>;
chomp $resp;
2023-10-20 15:25:40 -04:00
## 61: Preferred protocol version
die "bad upgrade response: $resp" unless $resp eq "msg,61";
2023-09-16 22:51:22 -04:00
2023-10-20 15:25:40 -04:00
## Try again with protocol version 1
print $infile "msg,6100000200\n"; ## full range bound, empty IdList
2023-09-16 22:51:22 -04:00
$resp = <$outfile>;
chomp $resp;
2023-10-20 15:25:40 -04:00
die "didn't fall back to protocol version 1: $resp" unless $resp eq $expectedResp;
2023-09-16 22:51:22 -04:00
}
print "OK\n";