use lib ;
use Test;
use Test::Helpers;
# very basic Telemetry tests
# make sure we don't have any overrides
BEGIN {
%*ENV.DELETE-KEY($_) for <
RAKUDO_REPORT_COLUMNS
RAKUDO_REPORT_HEADER_REPEAT
RAKUDO_REPORT_LEGEND
RAKUDO_REPORT_CSV
RAKUDO_TELEMETRY_INSTRUMENTS
>;
}
use Test;
use Telemetry;
plan 42;
my $T = T;
isa-ok $T, Telemetry, 'did we get a Telemetry object from T';
for {
todo 'JVM gives zero for max-rss', 2 if $*VM.name eq 'jvm' and $_ eq 'max-rss';
todo 'Solaris gives zero for max-rss - see getrusage(3C)', 2 if $*VM.osname eq 'solaris';
ok $T{$_}, "did we get a non-zero value for $_ using AT-KEY";
ok $T."$_"(), "did we get a non-zero value for $_ with a method";
}
my $T2 = $T.raku.EVAL;
isa-ok $T2, Telemetry, 'did we get a Telemetry object from T.raku.EVAL';
is $T2{$_}, $T{$_}, "did $_ roundtrip ok in Telemetry?"
for ;
my $P = T() - $T;
isa-ok $P, Telemetry::Period, 'Did we get a Telemetry::Period';
for {
ok $P{$_}, "did we get a non-zero value for $_ using AT-KEY";
ok $P."$_"(), "did we get a non-zero value for $_ using AT-KEY";
}
my $P2 = $P.raku.EVAL;
isa-ok $P2, Telemetry::Period,
'did we get a Telemetry::Period object from period.raku.EVAL';
is $P2{$_}, $P{$_}, "did $_ roundtrip ok in Telemetry::Period?"
for ;
my $sampler = $T.sampler;
isa-ok $sampler, Telemetry::Sampler, 'did it contain a Sampler';
my @instruments = $sampler.instruments;
is +@instruments, 2, 'there are 2 default default instruments';
for (Telemetry::Instrument::Usage, Telemetry::Instrument::ThreadPool).kv
-> $index, $class {
isa-ok @instruments[$index], $class, "did we get a $class.^name()";
}
for <&snap &snapper &periods &report &safe-ctrl-c &T> -> $name {
isa-ok ::{$name}, Sub, "was $name exported";
}
is snap, Nil, 'did the snap return nothing';
my @periods = periods;
is +@periods, 1, 'did periods auto-add an extra snap?';
isa-ok @periods[0], Telemetry::Period, 'is it a Telemetry::Period';
is +periods, 0, 'Did the call to periods remove all of the snaps?';
is snapper, Nil, 'did the snapper return nothing';
sleep 1 * (%*ENV//1);
snapper(:stop);
sleep .1 * (%*ENV//1);
ok +periods() > 0, 'did the snapper start taking snaps';
sleep .2 * (%*ENV//1);
ok +periods() == 0, 'did the snapper actually stop';
snapper(2);
sleep .5 * (%*ENV//1); # give snapper thread some time to start up
ok +periods() >= 1, 'did the snapper start taking snaps';
snapper(:stop);
sleep 2 * (%*ENV//1);
my @report = report.lines;
is +@report, 2, 'did we only get the header of the report';
ok @report[0].starts-with('Telemetry Report of Process'), 'line 1 of report';
is @report[1], 'Number of Snapshots: 0', 'line 2 of report';
{ # https://github.com/rakudo/rakudo/issues/1714
(temp %*ENV) = 'blahblah';
is-run 「
use snapper;
for ^1_000 {
(^100).race(batch=>1).map({ $_ }).List
};
print 'pass'
」, :err{.contains: 'Unknown Telemetry column `blahblah`'}, :out,
'giving unknown column in RAKUDO_REPORT_COLUMNS warns instead of crashing'
}
# vim: expandtab shiftwidth=4