![Cole Helbling](/assets/img/avatar_default.png)
This shouldn't be possible normally, but it is possible to: $db->resultset('RunCommandLogs')->new({ uuid => "../etc/passwd" }); if you have access to the `$db`.
94 lines
2.7 KiB
Perl
94 lines
2.7 KiB
Perl
use strict;
|
|
use warnings;
|
|
use Setup;
|
|
use File::Temp;
|
|
|
|
my $ctx = test_context();
|
|
my $db = $ctx->db();
|
|
|
|
require Hydra::Helper::Nix;
|
|
|
|
use Test2::V0;
|
|
|
|
my $dir = File::Temp->newdir();
|
|
my $machines = "$dir/machines";
|
|
|
|
$ENV{'NIX_REMOTE_SYSTEMS'} = $machines;
|
|
|
|
open(my $fh, '>', $machines) or die "Could not open file '$machines' $!";
|
|
print $fh q|
|
|
# foobar
|
|
root@ip x86_64-darwin /sshkey 15 15 big-parallel,kvm,nixos-test - base64key
|
|
|
|
# Macs
|
|
# root@bar x86_64-darwin /sshkey 6 1 big-parallel
|
|
root@baz aarch64-darwin /sshkey 4 1 big-parallel
|
|
|
|
root@bux i686-linux,x86_64-linux /var/sshkey 1 1 kvm,nixos-test benchmark
|
|
root@lotsofspace i686-linux,x86_64-linux /var/sshkey 1 1 kvm,nixos-test benchmark
|
|
|
|
|;
|
|
close $fh;
|
|
|
|
is(Hydra::Helper::Nix::getMachines(), {
|
|
'root@ip' => {
|
|
'systemTypes' => ["x86_64-darwin"],
|
|
'sshKeys' => '/sshkey',
|
|
'maxJobs' => 15,
|
|
'speedFactor' => 15,
|
|
'supportedFeatures' => ["big-parallel", "kvm", "nixos-test" ],
|
|
'mandatoryFeatures' => [ ],
|
|
},
|
|
'root@baz' => {
|
|
'systemTypes' => [ "aarch64-darwin" ],
|
|
'sshKeys' => '/sshkey',
|
|
'maxJobs' => 4,
|
|
'speedFactor' => 1,
|
|
'supportedFeatures' => ["big-parallel"],
|
|
'mandatoryFeatures' => [],
|
|
},
|
|
'root@bux' => {
|
|
'systemTypes' => [ "i686-linux", "x86_64-linux" ],
|
|
'sshKeys' => '/var/sshkey',
|
|
'maxJobs' => 1,
|
|
'speedFactor' => 1,
|
|
'supportedFeatures' => [ "kvm", "nixos-test", "benchmark" ],
|
|
'mandatoryFeatures' => [ "benchmark" ],
|
|
},
|
|
'root@lotsofspace' => {
|
|
'systemTypes' => [ "i686-linux", "x86_64-linux" ],
|
|
'sshKeys' => '/var/sshkey',
|
|
'maxJobs' => 1,
|
|
'speedFactor' => 1,
|
|
'supportedFeatures' => [ "kvm", "nixos-test", "benchmark" ],
|
|
'mandatoryFeatures' => [ "benchmark" ],
|
|
},
|
|
|
|
}, ":)");
|
|
|
|
subtest "constructRunCommandLogPath" => sub {
|
|
my $builds = $ctx->makeAndEvaluateJobset(
|
|
expression => "basic.nix",
|
|
);
|
|
my $build = $builds->{"empty_dir"};
|
|
my $runlog = $db->resultset('RunCommandLogs')->create({
|
|
job_matcher => "*:*:*",
|
|
build_id => $build->get_column('id'),
|
|
command => "bogus",
|
|
});
|
|
|
|
like(
|
|
Hydra::Helper::Nix::constructRunCommandLogPath($runlog),
|
|
qr@/runcommand-logs/[0-9a-f]{2}/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}@,
|
|
"The constructed RunCommandLog path is sufficiently bucketed and UUID-like."
|
|
);
|
|
|
|
my $badlog = $db->resultset('RunCommandLogs')->new({ uuid => "../../../etc/passwd" });
|
|
ok(
|
|
dies { Hydra::Helper::Nix::constructRunCommandLogPath($badlog) },
|
|
"Expected invalid UUID to be rejected and not have a path constructed for it.",
|
|
);
|
|
};
|
|
|
|
done_testing;
|