tripwire-open-source/src/test-harness/tests/complex.pm

174 lines
4.5 KiB
Perl

use twtools;
package complex;
######################################################################
# One time module initialization goes in here...
#
BEGIN {
%TESTS = (
"0-createDir" => {
# An add violation for adding blah.txt,
# and a change violation for changing the
# contents of the directory proper.
#
changeFunc => \&twtools::CreateFile,
createFunc => \&twtools::CreateDir,
file => "blah.txt",
dir => "temp",
perms => "a+w",
contents => "testing",
violations => "V:2 S:0 A:1 R:0 C:1"
},
"1-createFile" => {
changeFunc => undef,
createFunc => \&twtools::CreateFile,
file => "test.txt",
dir => "temp",
perms => "a+w",
contents => "testing",
violations => "V:0 S:0 A:0 R:0 C:0"
},
"2-createDir" => {
changeFunc => undef,
createFunc => \&twtools::CreateDir,
dir => "temp/dog",
perms => "a+w",
violations => "V:0 S:0 A:0 R:0 C:0"
},
"3-createDir" => {
changeFunc => undef,
createFunc => \&twtools::CreateDir,
dir => "temp/cat",
perms => "a+w",
violations => "V:0 S:0 A:0 R:0 C:0"
},
# Shouldn't get any violation for creating this
# file since we put a stop rule on temp/dog.
#
"4-createFile" => {
changeFunc => \&twtools::Chmod,
createFunc => \&twtools::CreateFile,
dir => "temp/dog",
file => "test.txt",
perms => "a+r",
contents => "testing",
violations => "V:0 S:0 A:0 R:0 C:0"
},
# One change violation for the directory temp/cat, and
# one change violation for the file test.txt itself.
#
"5-createFile" => {
changeFunc => \&twtools::Chmod,
createFunc => \&twtools::CreateFile,
dir => "temp/cat",
file => "test.txt",
perms => "a+r",
contents => "testing",
violations => "V:1 S:0 A:0 R:0 C:1"
},
);
$description = "nested policy test";
}
######################################################################
# Return the policy file text for this test...
#
sub getPolicyFileString {
return <<EOT;
(rulename=level1)
{
$twtools::twcwd/$twtools::twrootdir/$TESTS{"1-createFile"}{dir}/$TESTS{"1-createFile"}{file} -> \$(ReadOnly);
(rulename=level2)
{
$twtools::twcwd/$twtools::twrootdir/$TESTS{"0-createDir"}{dir} -> \$(ReadOnly) (recurse=true);
!$twtools::twcwd/$twtools::twrootdir/$TESTS{"2-createDir"}{dir};
}
}
EOT
}
######################################################################
#
# Initialize, get ready to run this test...
#
sub initialize() {
my $twstr = getPolicyFileString();
twtools::GeneratePolicyFile($twstr);
}
######################################################################
#
# Run the test.
#
sub run() {
twtools::logStatus("*** Beginning $description\n");
printf("%-30s", "-- $description");
if ($^O eq "skyos") {
++$twtools::twskippedtests;
print "SKIPPED; TODO: SkyOS has fewer expected changes here; refactor so we can test for correct values\n";
return;
}
my $twpassed = 1;
#########################################################
#
# Run the tests describe above in the %TESTS structure.
#
$twpassed = twtools::RunIntegrityTests(%TESTS);
#########################################################
#
# See if the tests all succeeded...
#
if ($twpassed) {
print "PASSED\n";
++$twtools::twpassedtests;
}
else {
++$twtools::twfailedtests;
print "*FAILED*\n";
}
}
######################################################################
# One time module cleanup goes in here...
#
END {
}
1;