/*
* Copyright 1999-2006 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.globus.rsl.tests;
import org.globus.rsl.*;
import java.util.*;
import java.io.*;
import junit.framework.*;
import junit.extensions.*;
public class RslNodeTest extends TestCase {
protected RslNode rslTree;
public RslNodeTest(String name) {
super(name);
}
public static void main (String[] args) {
junit.textui.TestRunner.run (suite());
}
public static Test suite() {
return new TestSuite(RslNodeTest.class);
}
public void setUp() {
String rsl = "&(exECutable=/bin/ls)(arGUments=-arg1 -arg2 \" -arg3 \")(directory=/home/vijay/gram)(stdin=https://localhost:9999/test)(environment=(v1 value1/$(JAREK)/value2 ) (v2 $(GLOBUS)) (v3 $(HOME)/data # /bin))";
try {
rslTree = RSLParser.parse(rsl);
} catch(Exception e) {
fail("Failed to parse rsl");
}
}
public void testMerge() {
RslNode node = null;
String rsl2 = "&(rslSubSTitution=(var1 value1))(arguments=\" -end\")(stdout=stdout.file)";
try {
node = RSLParser.parse(rsl2);
} catch(Exception e) {
fail("Failed to parse rsl");
}
// merge the rsl
rslTree.merge(node);
NameOpValue nv = null;
List values;
nv = rslTree.getParam("ARGUMENTS");
values = nv.getValues();
assertEquals("arg size",
4,
values.size());
assertEquals("arg 1",
"-arg1",
((Value)values.get(0)).getValue() );
assertEquals("arg 2",
"-arg2",
((Value)values.get(1)).getValue() );
assertEquals("arg 3",
" -arg3 ",
((Value)values.get(2)).getValue() );
assertEquals("arg 4",
" -end",
((Value)values.get(3)).getValue() );
nv = rslTree.getParam("stdout");
values = nv.getValues();
assertEquals("stdout size",
1,
values.size());
assertEquals("stdout value",
"stdout.file",
((Value)values.get(0)).getValue() );
Bindings db = rslTree.getBindings("rsl_substitutION");
assertTrue("bindings null", (db != null));
values = db.getValues();
assertEquals("rslsubsitution size",
1,
values.size() );
assertEquals("rslsub variable",
"var1",
((Binding)values.get(0)).getName());
assertEquals("rslsub variable value",
"value1",
((Binding)values.get(0)).getValue().getValue());
System.out.println("the final rsl:" + rslTree);
}
public void testCreate() {
RslNode rslTree = new RslNode(RslNode.AND);
Bindings bindings = null;
NameOpValue nv = null;
List values = null;
rslTree.put(new NameOpValue("executable",
NameOpValue.EQ,
"/usr/local/bin/ls"));
rslTree.put(new NameOpValue("executable",
NameOpValue.EQ,
"/bin/ls"));
rslTree.put(new NameOpValue("myMemory",
NameOpValue.LTEQ,
"5"));
rslTree.put(new NameOpValue("arguments",
NameOpValue.EQ,
new String [] {"-l", "-p", " -o "}));
bindings = new Bindings("rsl_substitution");
bindings.add(new Binding("var1", "value1"));
bindings.add(new Binding("var2", "value2"));
bindings.add(new Binding("var3", "value3"));
rslTree.put(bindings);
// test stuff
nv = rslTree.getParam("ARGUMENTS");
values = nv.getValues();
assertEquals("arg size",
3,
values.size());
assertEquals("arg 1",
"-l",
((Value)values.get(0)).getValue() );
assertEquals("arg 2",
"-p",
((Value)values.get(1)).getValue() );
assertEquals("arg 3",
" -o ",
((Value)values.get(2)).getValue() );
// remove some args...
assertEquals("remove arg",
false, nv.remove(new Value("-p ")));
assertEquals("remove arg2",
true, nv.remove(new Value("-p")));
// test the args again...
assertEquals("arg size",
2,
values.size());
assertEquals("arg 1",
"-l",
((Value)values.get(0)).getValue() );
assertEquals("arg 2",
" -o ",
((Value)values.get(1)).getValue() );
// test the executable..
nv = rslTree.getParam("EXECUTABLE");
assertEquals("executable",
"/bin/ls",
((Value)nv.getFirstValue()).getValue() );
nv = rslTree.getParam("MY_MEMORY");
assertEquals("myMemory",
"5",
((Value)nv.getFirstValue()).getValue() );
assertEquals("myMemory operator",
NameOpValue.LTEQ,
nv.getOperator());
// test bindings
bindings = rslTree.getBindings("rslSUBstitution");
assertTrue("bindings null", (bindings != null));
values = bindings.getValues();
assertEquals("bind size",
3,
values.size());
assertEquals("bind 1",
"var1",
((Binding)values.get(0)).getName() );
assertEquals("bind 2",
"var2",
((Binding)values.get(1)).getName() );
assertEquals("bind 3",
"var3",
((Binding)values.get(2)).getName() );
}
public void testRemove() {
RslNode node = null;
String rsl2 = "&(\"rsl_SubSTitution\"=(var1 value1))(arguments=\" -end\")(stdout=stdout.file)(stdout=ptys)";
try {
node = RSLParser.parse(rsl2);
} catch(Exception e) {
fail("Failed to parse rsl");
}
NameOpValue nv = null;
Bindings bindings = null;
List values;
nv = node.removeParam("stdout");
values = nv.getValues();
assertEquals("stdout",
"ptys",
((Value)values.get(0)).getValue() );
assertEquals("stdout",
null,
node.removeParam("stdout"));
bindings = node.removeBindings("rslsubstitutION");
values = bindings.getValues();
assertEquals("rsl subst.",
"var1",
((Binding)values.get(0)).getName() );
assertEquals("rsl subst.",
null,
node.removeBindings("rsl_substiTution"));
}
public void testEvaluate() {
String rsl =
" + " +
"(& " +
"(directory = $(TOPDIR))" +
"(executable = $(VAR1))" +
")" +
"(&" +
"(rsl_substitution = (TOPDIR \"/home/nobody\")" +
"(DATADIR $(TOPDIR)\"/data\") " +
"(EXECDIR $(TOPDIR)/bin) )" +
"(executable = $(EXECDIR)/a # .out" +
"(* ^-- implicit concatenation *))" +
"(directory = $(TOPDIR) )" +
"(arguments = $(DATADIR)/file1\n" +
"(* ^-- implicit concatenation *)" +
"$(DATADIR) # /file2\n" +
"(* ^-- explicit concatenation *)" +
"'$(FOO)' (* <-- a quoted literal *))" +
"(environment = (DATADIR $(DATADIR)))" +
"(count = 1)" +
")";
RslNode tree = null;
try {
tree = RSLParser.parse(rsl);
} catch(Exception e) {
fail("Rsl failed to parse!");
}
System.out.println( tree.toRSL(true) );
// null is the symbol table
Properties p = new Properties();
p.put("VAR1", "testValue1");
p.put("TOPDIR", "/home/gawor");
AbstractRslNode finalRsl = null;
try {
finalRsl = tree.evaluate(p);
} catch (RslEvaluationException e) {
fail("failed to evaluate rsl!");
}
System.out.println();
System.out.println( finalRsl.toRSL(true) );
NameOpValue nv = null;
List values = null;
List specs = finalRsl.getSpecifications();
// this should be the first one...
finalRsl = (RslNode)specs.get(0);
assertTrue("rsl node 0 null", (finalRsl != null));
nv = finalRsl.getParam("executable");
values = nv.getValues();
assertEquals("executable",
"testValue1",
((Value)values.get(0)).getValue());
nv = finalRsl.getParam("directory");
values = nv.getValues();
assertEquals("directory",
"/home/gawor",
((Value)values.get(0)).getValue());
// this should be the second one...
finalRsl = (RslNode)specs.get(1);
assertTrue("rsl node 1 null", (finalRsl != null));
nv = finalRsl.getParam("executable");
values = nv.getValues();
assertEquals("executable",
"/home/nobody/bin/a.out",
((Value)values.get(0)).getValue());
nv = finalRsl.getParam("directory");
values = nv.getValues();
assertEquals("directory",
"/home/nobody",
((Value)values.get(0)).getValue());
nv = finalRsl.getParam("arguments");
values = nv.getValues();
assertEquals("arg1",
"/home/nobody/data/file1",
((Value)values.get(0)).getValue());
assertEquals("arg2",
"/home/nobody/data/file2",
((Value)values.get(1)).getValue());
assertEquals("arg3",
"$(FOO)",
((Value)values.get(2)).getValue());
nv = finalRsl.getParam("environment");
values = nv.getValues();
values = (List)values.get(0);
assertEquals("env name",
"DATADIR",
((Value)values.get(0)).getValue());
assertEquals("env value",
"/home/nobody/data",
((Value)values.get(1)).getValue());
Bindings bindings = finalRsl.getBindings("rsl_substitution");
assertTrue("bindings null", (bindings != null));
values = bindings.getValues();
assertEquals("bind1: name",
"TOPDIR",
((Binding)values.get(0)).getName());
assertEquals("bind1: value",
"/home/nobody",
((Binding)values.get(0)).getValue().getValue());
assertEquals("bind2: name",
"DATADIR",
((Binding)values.get(1)).getName());
assertEquals("bind2: value",
"/home/nobody/data",
((Binding)values.get(1)).getValue().getValue());
assertEquals("bind3: name",
"EXECDIR",
((Binding)values.get(2)).getName());
assertEquals("bind3: value",
"/home/nobody/bin",
((Binding)values.get(2)).getValue().getValue());
}
}