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 )