blob: cc82b6edf9fa3d9bcc87800fb5229abe5c28f07f [file] [log] [blame]
######################################################################
#
# File: tests.txt
# Purpose: This is a series of tests for the ClassAd library.
# Currently there is no good documentation for how to write
# tests, you'll just have to look in test_classads.C
#
######################################################################
######################################################################
#
# Test the lexer
#
######################################################################
test-lexer-one-token 123 LEX_INTEGER_VALUE
test-lexer-one-token 123.456 LEX_REAL_VALUE
test-lexer-one-token true LEX_BOOLEAN_VALUE
test-lexer-one-token false LEX_BOOLEAN_VALUE
test-lexer-one-token "blah" LEX_STRING_VALUE
test-lexer-one-token "new\nline" LEX_STRING_VALUE
test-lexer-one-token "blue bibs be big" LEX_STRING_VALUE
test-lexer-one-token blah LEX_IDENTIFIER
test-lexer-one-token __ LEX_IDENTIFIER
test-lexer-one-token undefined LEX_UNDEFINED_VALUE
test-lexer-one-token error LEX_ERROR_VALUE
test-lexer-one-token . LEX_SELECTION
test-lexer-one-token * LEX_MULTIPLY
test-lexer-one-token / LEX_DIVIDE
test-lexer-one-token % LEX_MODULUS
test-lexer-one-token + LEX_PLUS
test-lexer-one-token - LEX_MINUS
test-lexer-one-token & LEX_BITWISE_AND
test-lexer-one-token | LEX_BITWISE_OR
test-lexer-one-token ~ LEX_BITWISE_NOT
test-lexer-one-token ^ LEX_BITWISE_XOR
test-lexer-one-token << LEX_LEFT_SHIFT
test-lexer-one-token >> LEX_RIGHT_SHIFT
test-lexer-one-token >>> LEX_URIGHT_SHIFT
test-lexer-one-token && LEX_LOGICAL_AND
test-lexer-one-token || LEX_LOGICAL_OR
test-lexer-one-token ! LEX_LOGICAL_NOT
test-lexer-one-token < LEX_LESS_THAN
test-lexer-one-token <= LEX_LESS_OR_EQUAL
test-lexer-one-token > LEX_GREATER_THAN
test-lexer-one-token >= LEX_GREATER_OR_EQUAL
test-lexer-one-token == LEX_EQUAL
test-lexer-one-token != LEX_NOT_EQUAL
test-lexer-one-token is LEX_META_EQUAL
test-lexer-one-token isnt LEX_META_NOT_EQUAL
test-lexer-one-token = LEX_BOUND_TO
test-lexer-one-token ? LEX_QMARK
test-lexer-one-token : LEX_COLON
test-lexer-one-token ; LEX_SEMICOLON
test-lexer-one-token , LEX_COMMA
test-lexer-one-token [ LEX_OPEN_BOX
test-lexer-one-token ] LEX_CLOSE_BOX
test-lexer-one-token ( LEX_OPEN_PAREN
test-lexer-one-token ) LEX_CLOSE_PAREN
test-lexer-one-token { LEX_OPEN_BRACE
test-lexer-one-token } LEX_CLOSE_BRACE
# I think this should evaluate to LEX_BACKSLASH. Apparently
# it's not actually used anywhere, so it's an error instead.
test-lexer-one-token \ LEX_TOKEN_ERROR
######################################################################
#
# ClassAds
#
######################################################################
begin-classad Job-1
[
Requirements = (other.Type == "Machine" && other.memory >= 4000);
Type = "Job";
Memoryused = 6000;
]
end-classad
begin-classad Machine-1
[
Type = "machine";
Requirements = (other.Type == "job" && other.memoryused < 8000);
Memory = 5000;
]
end-classad
begin-classad Machine-2
[
Type = "Machine";
Requirements = other.mytype == "Job";
Memory = 3000
]
end-classad
begin-classad Machine-3
[
Type = "Machine";
Requirements = other.mytype == "Job";
Memory = 6000
]
end-classad
begin-classad Misc
[
Type = "Misc";
Self = [
one = "foo";
two = "bar";
rank = Other[StrCat(one, two)];
];
Other = [
one = 1;
two = 2;
foobar = 15
];
Buddha = [
which = Self.which;
];
ClassAds = { [a = 1], [a = 2], [a = 3] };
Set = ClassAds.a;
SizeSet = size(Set);
SizeZero = size({});
SizeOne = size({1});
SizeTwo = size({1, 2});
Sum = sum(Set);
Average = avg(Set);
Min = min(Set);
Max = max(Set);
AllSmall = allcompare("<", Set, 100);
AllBig = allcompare(">", Set, 100);
AnyTwo = anycompare("==", Set, 2);
AllTwo = allcompare("==", Set, 2);
A = 1;
B = true;
C = !A;
D = !B;
R1 = regexp(".*\.cs\.uchicago\.edu", "gargoyle.cs1uchicago.edu");
R2 = regexp(".*\.cs\.wisc\.edu", "beak.cs.wisc.edu");
R3 = regexp(".*\.cs\.uchicago\.edu", "beak.cs.wisc.edu");
R4 = regexp(".*\.cs\.wisc\.edu", "gargoyle.cs.uchicago.edu");
R5 = regexp(".*\.cs\.wisc\.edu|.*\.cs\.uchicago\.edu",
"gargoyle\.cs\.uchicago.edu");
R6 = regexp(".*\.cs\.wisc\.edu|.*\.cs\.uchicago\.edu",
"beak.cs.wisc\.edu");
]
end-classad
begin-classad Motherboard
[
have_match = machine_enclosure.machine.Requirements
&& job_enclosure.job.Requirements
&& storage_enclosure.storage.Requirements;
machine_enclosure =
[
job = job_enclosure.job;
storage = storage_enclosure.storage;
machine = [
Type="Machine";
RAM=6000;
Requirements = (job.MemoryNeeded <= RAM);
];
];
job_enclosure =
[
machine = machine_enclosure.machine;
storage = storage_enclosure.storage;
job = [
Type="Job";
MemoryNeeded = 6000;
DiskSpaceNeeded = 8000;
Requirements = (machine.RAM >= MemoryNeeded
&& storage.FreeDiskSpace > DiskSpaceNeeded)
];
];
storage_enclosure =
[
job = job_enclosure.job;
machine = machine_enclosure.machine;
storage = [
Type = "Storage";
FreeDiskSpace = 10000;
Requirements = job.DiskSpaceNeeded < FreeDiskSpace;
];
];
]
end-classad
evaluate Motherboard job_enclosure.job.Requirements
evaluate Motherboard machine_enclosure.job.Requirements
evaluate Motherboard storage_enclosure.storage.Requirements
evaluate Motherboard have_match
######################################################################
#
# Basic Evaluation Tests
#
######################################################################
evaluate Job-1 TestTernary
evaluate Misc Self.rank
evaluate Machine-1 memory
evaluate Misc Set
evaluate Misc Sum
evaluate Misc Average
evaluate Misc Min
evaluate Misc Max
evaluate Misc AllSmall
evaluate Misc AllBig
evaluate Misc AnyTwo
evaluate Misc AllTwo
evaluate Misc ClassAds.b
evaluate Misc ClassAds.c
evaluate Misc All_Undefined
evaluate Misc Any_Undefined
evaluate Misc A
evaluate Misc B
evaluate Misc C
evaluate Misc D
evaluate Misc SizeSet;
evaluate Misc SizeZero;
evaluate Misc SizeOne;
evaluate Misc SizeTwo;
evaluate Misc R1;
evaluate Misc R2;
evaluate Misc R3;
evaluate Misc R4;
evaluate Misc R5;
evaluate Misc R6;
######################################################################
#
# Matching tests
#
######################################################################
test-match symmetricMatch Job-1 Machine-1 ExpectMatch
test-match leftMatchesRight Job-1 Machine-1 ExpectMatch
test-match rightMatchesLeft Job-1 Machine-1 ExpectMatch
test-match symmetricMatch Job-1 Machine-2 ExpectDontMatch
######################################################################
#
# Collections
#
######################################################################
#make-collection Machines machines-log
make-collection Machines
add-to-collection Machines Machine-1
add-to-collection Machines Machine-2
add-to-collection Machines Machine-3
create-subview Machines root Machine-View (other.Memory >= 4000)
check-in-view Machines Machine-View Machine-1 ExpectIn
check-in-view Machines Machine-View Machine-2 ExpectNotIn
check-in-view Machines Machine-View Machine-3 ExpectIn
create-subview Machines Machine-View BigMachine-View (other.Memory > 5000)
check-in-view Machines BigMachine-View Machine-1 ExpectNotIn
check-in-view Machines BigMachine-View Machine-2 ExpectNotIn
check-in-view Machines BigMachine-View Machine-3 ExpectIn
#truncate-log Machines
begin-classad Group-1
[
Type = "Group";
Users = {"Alain", "Peter"};
]
end-classad
begin-classad Group-2
[
Type = "Group";
Users = {"Annalisa", "David"};
]
end-classad
#make-collection Groups groups-log
make-collection Groups groups-log
add-to-collection Groups Group-1
add-to-collection Groups Group-2
begin-classad List-Eval
[ a = { x }; x = 1 ]
end-classad
evaluate Misc SizeOne;
evaluate Misc SizeTwo;
evaluate List-Eval a[0]
begin-classad Lexer-Fault
[ a=!b; b=true; ]
end-classad
evaluate Lexer-Fault b
evaluate Lexer-Fault a
begin-classad Octal
[ a = "\101\044\44\1"; /* Should be A(( */ ]
end-classad
evaluate Octal a
begin-classad Floats
[a = 0.7 * 4.5; ]
end-classad
begin-classad Quoted-Names
[
'a' = 4;
'b.##$%' = 5;
]
end-classad
begin-classad Times
[
Abs1 = absTime("2003-09-03T");
Rel1 = relTime("2+25:14:16.123");
]
end-classad
begin-classad Numbers
[
X = 4.3;
Y = real("4.3");
Not = real("NaN");
Infinite = real("INF");
Negative_Infinite = real("-INF");
]
end-classad
print-classad Floats
print-classad Quoted-Names
print-classad Times
print-classad Numbers
print-classad-xml Numbers
begin-classad Loop
[
attr = a//b
]
end-classad
#begin-classad Crash
#[
# attr = a<b>
#]
#end-classad
begin-classad policy
[
type = 'machine';
access_times =
[
globus = [start = 1900; end = 2100;];
condor = [start = 100; end = 500;];
]
]
end-classad
evaluate policy access_times
evaluate policy access_times["globus"]
evaluate policy access_times["globus"].start