package org.ourgrid.peer.controller.matcher.jdl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.File; import java.util.Arrays; import org.glite.jdl.Jdl; import org.junit.BeforeClass; import org.junit.Test; import org.ourgrid.common.spec.main.JDLTests; import org.ourgrid.common.specification.OurGridSpecificationConstants; import org.ourgrid.common.specification.main.ClassAdSyntacticalAnalyzerStream; import org.ourgrid.common.specification.main.JDLSemanticAnalyzer; import org.ourgrid.common.specification.main.JDLTagsPublisher; import org.ourgrid.common.specification.main.SDFClassAdsSyntacticalAnalyzer; import org.ourgrid.common.specification.worker.WorkerSpecificationConstants; import org.ourgrid.peer.business.controller.matcher.Matcher; import org.ourgrid.peer.business.controller.matcher.MatcherImpl; import condor.classad.AttrRef; import condor.classad.ClassAdParser; import condor.classad.Constant; import condor.classad.ListExpr; import condor.classad.RecordExpr; /** * This class contains unit tests for the peer matcher using JDL to describe jobs and ClassAds to describe * machines. * @author David Candeia Medeiros Maia * */ public class NewMatcherImplTest implements JDLTests{ private static Matcher matcher; private static RecordExpr machine1; private static RecordExpr machine2; private static RecordExpr machine3; private static RecordExpr machine4; private static String diff_JDL; private static String echo_JDL; private static String java_io_JDL; private static String java_JDL; private static String java_output_JDL; private static String matcher1_JDL; private static String matcher2_JDL; @BeforeClass public static void setUp() throws Exception { //Loading tags JDLTagsPublisher.loadGLUETags(ACCEPTANCE_TEST_DIR+File.separator+"tags.conf"); //Loading some jobs info diff_JDL = JDLSemanticAnalyzer.compileJDL(DIFF_JOB).get(0).getRequirements(); echo_JDL = JDLSemanticAnalyzer.compileJDL(ECHO_JOB).get(0).getRequirements(); java_io_JDL = JDLSemanticAnalyzer.compileJDL(JAVA_IO_JOB).get(0).getRequirements(); java_JDL = JDLSemanticAnalyzer.compileJDL(JAVA_JOB).get(0).getRequirements(); java_output_JDL = JDLSemanticAnalyzer.compileJDL(JAVA_OUTPUT_JOB).get(0).getRequirements(); matcher1_JDL = JDLSemanticAnalyzer.compileJDL(MATCHER1_JOB).get(0).getRequirements(); matcher2_JDL = JDLSemanticAnalyzer.compileJDL(MATCHER2_JOB).get(0).getRequirements(); //Machine expressions matcher = new MatcherImpl(); machine1 = new RecordExpr(); machine2 = new RecordExpr(); machine3 = new RecordExpr(); machine4 = new RecordExpr(); putAttribute(OurGridSpecificationConstants.USERNAME, "\"machine1\"", machine1); putAttribute(WorkerSpecificationConstants.OS, "\"linux\"", machine1); putAttribute(WorkerSpecificationConstants.SITE_NAME, "\"lsd\"", machine1); putAttribute(WorkerSpecificationConstants.MAIN_MEMORY, "200", machine1); putAttribute("SO", "\"bla\"", machine1); putAttribute(Jdl.REQUIREMENTS, "true", machine1); putAttribute(Jdl.RANK, "0", machine1); putAttribute(OurGridSpecificationConstants.USERNAME, "\"machineWithoutAttributes\"", machine2); putAttribute(Jdl.REQUIREMENTS, "True", machine2); putAttribute(Jdl.RANK, "0", machine2); putAttribute(OurGridSpecificationConstants.USERNAME, "\"machine3\"", machine3); putAttribute(WorkerSpecificationConstants.OS, "\"windows\"", machine3); putAttribute(WorkerSpecificationConstants.SITE_NAME, "\"puc\"", machine3); putAttribute(WorkerSpecificationConstants.MAIN_MEMORY, "50", machine3); putAttribute(Jdl.REQUIREMENTS, "True", machine3); putAttribute(Jdl.RANK, "0", machine3); putAttribute(OurGridSpecificationConstants.USERNAME, "\"machine4\"", machine4); putAttribute(WorkerSpecificationConstants.MAIN_MEMORY, "256", machine4); putAttribute(Jdl.REQUIREMENTS, "True", machine4); putAttribute(Jdl.RANK, "0", machine4); } private static void putAttribute(String name, String value, RecordExpr record){ if(value.contains(SDFClassAdsSyntacticalAnalyzer.LIST_SYMBOL)){ record.insertAttribute(name, new ListExpr(Arrays.asList(value))); }else if(value.contains(SDFClassAdsSyntacticalAnalyzer.RECORD_SYMBOL)){ inserRecordAttribute(name, value, record); }else{ Constant constant = null; if(value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")){ boolean realValue = Boolean.valueOf(value); constant = Constant.getInstance(realValue); record.insertAttribute(name, constant); }else if(!value.contains("\"")){ try{ Integer intValue = Integer.valueOf(value); constant = Constant.getInstance(intValue); record.insertAttribute(name, constant); return; }catch(Exception e){ } try{ Long longValue = Long.valueOf(value); constant = Constant.getInstance(longValue); record.insertAttribute(name, constant); return; }catch(Exception e){ } try{ Double doubleValue = Double.valueOf(value); constant = Constant.getInstance(doubleValue); record.insertAttribute(name, constant); }catch(Exception e){ AttrRef ref = new AttrRef(value); record.insertAttribute(name, ref); } }else{ constant = Constant.getInstance(value.replaceAll("\"", "")); record.insertAttribute(name, constant); } } } private static void inserRecordAttribute(String name, String value, RecordExpr record) { ClassAdSyntacticalAnalyzerStream.changeSystemErrToStream(); RecordExpr expr = (RecordExpr) new ClassAdParser(value).parse(); String errorMessage = ClassAdSyntacticalAnalyzerStream.getErrorMessage(); if(errorMessage.length() > 0){ throw new IllegalArgumentException("Mal formed attribute "+name+" "+errorMessage); } record.insertAttribute(name, expr); ClassAdSyntacticalAnalyzerStream.resetSystemErr(); } /** * Test method for {@link org.ourgrid.peer.controller.matcher.NewMatcherImpl#match(String, String)}. */ @Test(expected=AssertionError.class) public void testMatchNullJDLExpression() { matcher.match(null, ""); } /** * Test method for {@link org.ourgrid.peer.controller.matcher.NewMatcherImpl#match(String, String)}. */ @Test(expected=AssertionError.class) public void testMatchNullClassAdExpression() { matcher.match("", (String)null); } /** * Test method for {@link org.ourgrid.peer.controller.matcher.NewMatcherImpl#match(String, String)}. */ @Test(expected=AssertionError.class) public void testMatchEmptyJDL() { matcher.match("", "[ username = \"username1;\" ]"); } /** * Test method for {@link org.ourgrid.peer.controller.matcher.NewMatcherImpl#match(String, String)}. */ @Test(expected=AssertionError.class) public void testMatchEmptyClassAd() { matcher.match("[ username = \"username1;\" ]", ""); } /** * Test method for {@link org.ourgrid.peer.controller.matcher.NewMatcherImpl#match(String, String)}. */ @Test(expected=AssertionError.class) public void testMatchEchoJob() { matcher.match("[ username = \"username1;\" ]", ""); } @Test public void testMatchesWithNotDefinedAttributes() { String jobRequirement = "[Requirements = other.siteName != lsd.ufcg.edu.br;Rank = 0]"; int matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.siteName != lsd.ufcg.edu.br && other.os == linux;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.siteName != lsd.ufcg.edu.br && other.os == windows;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.siteName != lsd.ufcg.edu.br || other.os == window;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.siteName != lsd.ufcg.edu.br || other. os == windows;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !other.siteName != lsd.ufcg.edu.br;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.mainMemory < 200;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1,matched ); jobRequirement = "[Requirements = other.mainMemory <= 200;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.mainMemory > 200;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.mainMemory >= 200;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !other.siteName != lsd.ufcg.edu.br || other.mainMemory >= 200;Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !siteName != lsd.ufcg.edu.br || mainMemory >= 200; Rank = 0]"; matched = matcher.match( jobRequirement, machine2.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched ); assertEquals(-1, matched ); } @Test public void testMatchesWithDefinedAndNotDefinedAttributes() { String jobRequirement = "[Requirements = other.siteName != \"lsd.ufcg.edu.br\"; Rank = 0]"; int matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.siteName != \"lsd.ufcg.edu.br\" && other.so == \"linux\";Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.siteName == \"puc\" && other.OS == \"windows\";Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.siteName == \"puc\" || other.OS == \"linux\"; Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.siteName == \"lsd\" || other.OS == \"windows\"; Rank = 0;]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[Requirements = !(caca != \"lsd\"); Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.mainMemory < 200 || other.caca == \"lsd\"; Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.mainMemory <= 200; Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.mainMemory > 200; Rank=0;]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = other.mainMemory >= 200; Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !(other.siteName != \"lsd.ufcg.edu.br\") || (other.mainMemory >= 200) || ( other.OS == \"windows\" ) || ( other.caca == \"xpto\"); Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); } @Test public void testMatchesWithDefinedAndNotDefinedAttributesAndAnyOtherReference() { String jobRequirement = "[Requirements = siteName != \"lsd.ufcg.edu.br\"; Rank = 0]"; int matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = siteName != \"lsd.ufcg.edu.br\" && so == \"linux\";Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = siteName == \"puc\" && OS == \"windows\";Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); assertEquals(-1, matched ); jobRequirement = "[Requirements = siteName == \"puc\" || OS == \"linux\"; Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = siteName == \"lsd\" || OS == \"windows\"; Rank = 0;]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !(caca != \"lsd\"); Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = mainMemory < 200 || caca == \"lsd\"; Rank = 0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = mainMemory <= 200; Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = mainMemory > 200; Rank=0;]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = mainMemory >= 200; Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[Requirements = !(siteName != \"lsd.ufcg.edu.br\") || (mainMemory >= 200) || ( OS == \"windows\" ) || ( caca == \"xpto\"); Rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); } /** * This test contains some positive matches tests. It also contains some cases * in which different cases are used. */ @Test public void testGoodMatches() { String jobRequirement = "[Requirements = other.os == \"linux\"; Rank=0]"; int matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.siteName == \"lsd\"; Rank = 0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[Requirements = other.SItename == \"lsd\" && other.os == \"linux\"; Rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = other.siteName == \"xpto\" || other.os == \"linux\"; rank=0;]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = other.sitename != \"xpto\" && other.os == \"linux\";rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.os == \"linux\");rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( other.os == \"linux\" && !( other.sitename == \"ucsd\" ) ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = other.mainMemory > 100; rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ((other.siteName == \"ucsd\"|| other.sitename == \"lsd\" ) && other.mainMemory > 100 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( other.mainMemory < 300 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( (other.sitename == \"ucsd\" || other.sitename == \"lsd\" )&& ( other.mainmemory > 100 && other.mainmemory< 300 )); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.mainmemory >= 200 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.mainmemory <= 200 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !( other.mainmemory>300); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !(other.mainmemory == 300); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !( other.sitename == \"ucsd\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !( other.SO != \"bla\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !( other.os != \"linux\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = !( other.mainmemory > 300 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =!(other.mainmemory>300); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =!(other.mainmemory == 300); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =!( other.sitename == \"ucsd\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =!( other.SO != \"bla\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =!( other.os != \"linux\");rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.mainmemory <= 200 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements =( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.mainmemory <= 200 ); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = ( other.SO == \"bla\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(0, matched ); jobRequirement = "[requirements = (other.os == \"blablabla\") || (other.mainmemory >= 200); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[requirements = (other.os != \"bla\") || (other.mainmemory != 200); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[requirements = !(other.os == \"windows\") || (other.sitename >= \"200\"); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[requirements = (other.mainMemory == 50) || !(other.os == \"2\");rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); //Using inexistent ref windows jobRequirement = "[requirements = (other.os != \"linux\") || (other.mainMemory > windows); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); //Using existent ref val jobRequirement = "[val=100000; requirements = (other.os != \"linux\") || (other.mainMemory > self.val); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); //Using existent ref val without self jobRequirement = "[val=100000; requirements = (other.os != \"linux\") || (other.mainMemory > val); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); } @Test public void testGoodMatchesFromFile(){ int matched = matcher.match(diff_JDL, machine4.toString()); assertEquals(0, matched); matched = matcher.match(echo_JDL, machine4.toString()); assertEquals(0, matched); matched = matcher.match(java_io_JDL, machine4.toString()); assertEquals(0, matched); matched = matcher.match(java_output_JDL, machine4.toString()); assertEquals(0, matched); matched = matcher.match(java_JDL, machine4.toString()); assertEquals(0, matched); matched = matcher.match(matcher1_JDL, machine1.toString()); assertEquals(0, matched); } @Test public void testGoodMatchesWithDifferentRanks(){ String jobRequirement = "[requirements = (other.mainMemory == 50) || !(other.os == \"2\");rank=0]"; int matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(0, matched ); jobRequirement = "[requirements = (other.mainMemory == 50) || !(other.os == \"2\");rank=22220]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(22220, matched ); jobRequirement = "[requirements = (other.os == \"blablabla\") || (other.mainmemory >= 200); rank=-10000000]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals(-10000000, matched ); jobRequirement = "[requirements =( ( other.sitename == \"ucsd\" || other.sitename == \"lsd\" ) && other.mainmemory <= 200 ); rank=1000]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(1000, matched ); jobRequirement = "[requirements = !( other.os != \"linux\"); rank=10]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(10, matched ); } @Test public void testBadMatches() { String jobRequirement = "[requirements = !(other.siteName == \"lsd\" );rank=0]"; int matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(-1, matched ); jobRequirement = "[requirements = ( other.sitename == \"xpto\" && other.os == \"linux\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(-1, matched ); jobRequirement = "[requirements = ( other.sitename != \"xpto\" && other.os == \"windows\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.mainmemory == 400 || other.os == \"windows\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.os == \"windows\" && ( other.sitename != \"ucsd\" ) );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.os == \"windows\" && ( other.sitename == \"noname\" ) );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.mainMemory < 300 && other.sitename == \"noname\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.XPTO == \"bla\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.XPTO == \"bla\" ) && ( other.XPTO2 != \"ble\" );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = ( other.XPTO3 < 9876543210 );rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals( -1, matched ); jobRequirement = "[requirements = (other.os == \"1\") && (other.mainmemory >= 200);rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals( -1, matched ); jobRequirement = "[requirements = (other.sitename <= \"200\") || (other.os == \"50\");rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine1.toString() + " ? ==> " + matched ); assertEquals( -1, matched ); jobRequirement = "[requirements = (other.mainmemory < 50) || !(other.os != \"20\");rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals( -1, matched ); jobRequirement = "[requirements = !(other.os == \"linux\") && (other.mainmemory == windows);rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals( -1, matched ); //Expressions containing AND, OR and NOT operators jobRequirement = "[val=100000; requirements = (other.os != \"linux\") OR (other.mainMemory > val); rank=0]"; try{ matched = matcher.match( jobRequirement, machine3.toString() ); fail("Invalid job requirement: OR!"); }catch(NullPointerException e){ } jobRequirement = "[requirements = !(other.mainmemory == 300) AND other.mainmemory != 300; rank=0]"; try{ matched = matcher.match( jobRequirement, machine1.toString() ); fail("Invalid job requirement: AND!"); }catch(NullPointerException e){ } jobRequirement = "[requirements = NOT(other.mainmemory == 300); rank=0]"; matched = matcher.match( jobRequirement, machine1.toString() ); assertEquals(-1, matched); //Using different types jobRequirement = "[val=100000; requirements = (other.os != 1) || (other.mainMemory > self.val); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[val=100000; requirements = (other.requirements == 1); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); jobRequirement = "[val=100000; requirements = (other.requirements > \"zzz\"); rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); //Invalid rank type jobRequirement = "[requirements = (other.mainMemory == 50) || !(other.os == \"2\");rank=22220.9]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); } @Test public void testBadMatchesFromFile(){ int matched = matcher.match(diff_JDL, machine1.toString()); assertEquals(-1, matched); matched = matcher.match(java_io_JDL, machine1.toString()); assertEquals(-1, matched); matched = matcher.match(java_output_JDL, machine1.toString()); assertEquals(-1, matched); matched = matcher.match(java_JDL, machine1.toString()); assertEquals(-1, matched); matched = matcher.match(matcher1_JDL, machine4.toString()); assertEquals(-1, matched); matched = matcher.match(matcher2_JDL, machine4.toString()); assertEquals(-1, matched); matched = matcher.match(matcher2_JDL, machine3.toString()); assertEquals(-1, matched); matched = matcher.match(matcher2_JDL, machine2.toString()); assertEquals(-1, matched); matched = matcher.match(matcher2_JDL, machine1.toString()); assertEquals(-1, matched); } @Test public void testExceptionsMatches() { String jobRequirement; jobRequirement = "[requirements =( other.mainmemory >= \"linux\" && ( other.sitename == \"ucsd\" ) );rank=0]"; assertEquals( -1, matcher.match( jobRequirement, machine1.toString() ) ); } @Test public void testExpressionsWithoutReqOrRank(){ //Positive match without rank String jobRequirement = "[val=100000; requirements = (other.os != \"linux\") || (other.mainMemory > val);]"; int matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); //Negative match without rank jobRequirement = "[val=100000; requirements = (other.requirements > \"zzz\");]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); //Positive match without requirements jobRequirement = "[val=100000; rank=0]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); //Negative match without requirements jobRequirement = "[val=100000; rank=10]"; matched = matcher.match( jobRequirement, machine3.toString() ); System.out.println( "test > " + jobRequirement + " matches " + machine3.toString() + " ? ==> " + matched ); assertEquals(-1, matched ); } }