AnyEvent-MCP

 view release on metacpan or  search on metacpan

t/16_vim_auth.t  view on Meta::CPAN

   my $leaving = vim_connect ("secondary", "leaving-vim");
   $leaving->autoflush (1);
   for (1 .. 1000) {
      last if grep $_ eq "leaving-vim", @{target_names ()};
      Time::HiRes::sleep (0.03);
   }
   $browser = browser ();
   print {$leaving} JSON::XS::encode_json ([0, [session => "leaving", {
      origin => "http://page.example:818", filename => "leaving.txt",
   }]]), JSON::XS::encode_json ([0, [save => "leaving"]]);
   vim_call $leaving;
   is browser_json ($browser)->[0], "upload", "disconnect test starts an unfinished upload";
   close $leaving;
   is ws_message ($browser)->[0], 8, "Vim disconnect aborts its unfinished browser upload";
   close $browser->[0];

   done_testing;
};
}

send_tool 200, "grep", $grep_args;
my $disconnected_call = vim_call;
close $valid;
my $disconnected_reply = mcp_reply;
ok $disconnected_reply->{id} == 200 && $disconnected_reply->{result}{isError}
   && $disconnected_reply->{result}{content}[0]{text} =~ /vim disconnected/,
   "disconnect fails an outstanding callback RPC";
close $ready if $ready;
close $in;
my $exit;
for (1 .. 1200) {
   my $w = waitpid ($pid, WNOHANG);
   if ($w == $pid) {
      $exit = $? >> 8;
      last;
   }
   Time::HiRes::sleep (0.025);
}
if (!defined $exit) {
   kill TERM => $pid;
   waitpid ($pid, 0);
   $exit = -1;
}
is $exit, 0, "broker exits after stdio EOF";
close $out;
local $/;
my $log = <$err> // "";
like $log, qr/vim <secondary-vim> connected/,
   "authenticated editor registration is logged without debug mode";
like $log, qr/vim <secondary-vim> disconnected/,
   "editor disconnect is logged without debug mode";
like $log, qr/ex target=secondary-vim command="echo 'hello' \| echo 'world'\\nlet g:example = 1"/,
   "Ex call logs its command preview without requiring debug verbosity";
SKIP: {
   skip "WebSocket modules not installed", 4 unless $have_websocket;
   like $log, qr/Vim WebSocket rejected: invalid token \(127\.0\.0\.1:\d+\)/,
      "wrong Vim WebSocket token produces one meaningful warning with peer";
   like $log, qr/Vim WebSocket rejected: invalid path \(127\.0\.0\.1:\d+\)/,
      "malformed Vim WebSocket path produces one meaningful warning with peer";
   unlike $log, qr/secret-do-not-log-XYZ|\/secondary\//,
      "rejected URL never exposes supplied credentials in the log";
   unlike $log, qr/handshake response was undef/,
      "rejected Vim WebSocket upgrade never reports an undef handshake response";
}
close $err;

done_testing;



( run in 0.633 second using v1.01-cache-2.11-cpan-3f962061493 )