/*
* Copyright (C) 2008 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.peer.controller.matcher;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.ourgrid.peer.business.controller.matcher.Matcher;
import org.ourgrid.peer.business.controller.matcher.MatcherImpl;
public class MatcherTest extends TestCase {
private Map<String,String> machine1 = new HashMap<String,String>();
private Map<String,String> machine2 = new HashMap<String,String>();
private Map<String,String> machine3 = new HashMap<String,String>();
private Matcher matcher;
/*
* Constructor
*/
public MatcherTest( String s ) {
super( s );
matcher = new MatcherImpl();
}
/*
* Initialization of the test
*
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
machine1.put( "username", "machine1" );
machine1.put( "os", "linux" );
machine1.put( "site", "lsd" );
machine1.put( "ram", "200" );
machine1.put( "SO", "bla" );
machine2.put( "username", "machineWithoutAttributes" );
machine3.put( "username", "machine3" );
machine3.put( "os", "windows" );
machine3.put( "site", "puc" );
machine3.put( "mem", "50" );
}
/*
* Finishes the test
*
* @see junit.framework.TestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testMatchesWithNotDefinedAttributes() {
String jobRequirement = "(site != lsd.ufcg.edu.br)";
boolean matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(site != lsd.ufcg.edu.br) && (os == linux)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "( site != lsd.ufcg.edu.br ) AND ( os == windows )";
matched = matcher.match( jobRequirement, machine2 );
assertFalse( matched );
jobRequirement = "(site != lsd.ufcg.edu.br) || (os == windows)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(site != lsd.ufcg.edu.br) OR ( os == windows)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "! (site != lsd.ufcg.edu.br)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem < 200)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem <= 200)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem > 200)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem >= 200)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "! (site != lsd.ufcg.edu.br) || (mem >= 200)";
matched = matcher.match( jobRequirement, machine2 );
System.out.println( "test > " + jobRequirement + " matches " + machine2 + " ? ==> " + matched );
assertFalse( matched );
}
public void testMatchesWithDefinedAndNotDefinedAttributes() {
String jobRequirement = "(site != lsd.ufcg.edu.br)";
boolean matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(site != lsd.ufcg.edu.br) && (so == linux)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "( site == puc ) AND ( os == windows )";
matched = matcher.match( jobRequirement, machine3 );
assertTrue( matched );
jobRequirement = "(site == puc) || (os == linux)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(site == lsd) OR ( os == windows)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
jobRequirement = "! (caca != lsd)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem < 200) || ( caca = lsd)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(mem <= 200)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(mem > 200)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem >= 200)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertFalse( matched );
jobRequirement = "! (site != lsd.ufcg.edu.br) || (mem >= 200) || ( os == windows ) || ( caca == xpto )";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 + " ? ==> " + matched );
assertTrue( matched );
}
public void testGoodMatches() {
String jobRequirement = "os == linux";
boolean matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "site == lsd";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( site == lsd && os == linux )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( site == xpto || os == linux )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( site != xpto && os == linux )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ( site == ucsd || site == lsd ) && os == linux )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( os == linux && ! ( site == ucsd ) )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "ram > 100";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "((site == ucsd|| site== lsd ) && ram >100 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ram < 300 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( (site == ucsd || site == lsd )&& ( ram > 100 && ram< 300 ))";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ( site = ucsd || site = lsd ) && ram >= 200 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ( site == ucsd || site == lsd ) && ram <= 200 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "! ( ram>300)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "!(ram = 300)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "!( site == ucsd)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "!( SO != bla)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "!( os != linux)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not ( ram > 300 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not(ram>300)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not(ram = 300)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not( site == ucsd)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not( SO != bla)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "not( os != linux)";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ( site == ucsd OR site == lsd ) AND ram <= 200 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( ( site = ucsd OR site = lsd ) AND ram <= 200 )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "( SO = bla )";
matched = matcher.match( jobRequirement, machine1 );
assertTrue( matched );
jobRequirement = "(os == 1) || (ram >= 200)";
matched = matcher.match( jobRequirement, machine1 );
System.out.println( "test > " + jobRequirement + " matches " + machine1 +
" ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(os != 1) || (ram != 200)";
matched = matcher.match( jobRequirement, machine1 );
System.out.println( "test > " + jobRequirement + " matches " + machine1 +
" ? ==> " + matched );
assertTrue( matched );
jobRequirement = "!(os = windows) or (site > 200)";
matched = matcher.match( jobRequirement, machine1 );
System.out.println( "test > " + jobRequirement + " matches " + machine1 +
" ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(mem = 50) || not(os = 2)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 +
" ? ==> " + matched );
assertTrue( matched );
jobRequirement = "(os != linux) OR (mem > windows)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 +
" ? ==> " + matched );
assertTrue( matched );
}
public void testBadMatches() {
String jobRequirement = "!(site == lsd )";
boolean matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( site == xpto && os = linux )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( site != xpto && os = windows )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( ram == 400 || os == windows )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( os == windows && ( site != ucsd ) )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( os == windows && ( site == noname ) )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( ram < 300 && site == noname )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( XPTO == bla )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( XPTO == bla ) && ( XPTO2 != ble )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "( XPTO3 < 9876543210 )";
matched = matcher.match( jobRequirement, machine1 );
assertFalse( matched );
jobRequirement = "(os == 1) && (ram >= 200)";
matched = matcher.match( jobRequirement, machine1 );
System.out.println( "test > " + jobRequirement + " matches " + machine1 +
" ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(site > 200) || (os == 50)";
matched = matcher.match( jobRequirement, machine1 );
System.out.println( "test > " + jobRequirement + " matches " + machine1 +
" ? ==> " + matched );
assertFalse( matched );
jobRequirement = "(mem < 50) OR NoT(os != 20)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 +
" ? ==> " + matched );
assertFalse( matched );
jobRequirement = "!(os == linux) and (mem == windows)";
matched = matcher.match( jobRequirement, machine3 );
System.out.println( "test > " + jobRequirement + " matches " + machine3 +
" ? ==> " + matched );
assertFalse( matched );
}
public void testExceptionsMatches() {
String jobRequirement;
jobRequirement = "( ram >= linux && ( site == ucsd ) )";
assertFalse( matcher.match( jobRequirement, machine1 ) );
}
}