package fr.gael.dhus.datastore.scanner;
import java.util.regex.PatternSyntaxException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import fr.gael.dhus.datastore.scanner.AbstractScanner;
import fr.gael.dhus.datastore.scanner.Scanner;
import fr.gael.drb.DrbDefaultMutableNode;
import fr.gael.drb.DrbNode;
import fr.gael.drbx.cortex.DrbCortexItemClass;
public class AbstractScannerTest
{
private static Log logger = LogFactory.getLog (AbstractScannerTest.class);
final DrbNode[] testItem =
{
new DrbDefaultMutableNode("MyOwnTestItem.1"),
new DrbDefaultMutableNode("MyOwnTestItem.2"),
new DrbDefaultMutableNode("MyOwnTestItem.3"),
new DrbDefaultMutableNode("MyOwnTestItem.tar"),
new DrbDefaultMutableNode("GOM_MM__0PNPDE20041204_012208_000007492032_00360_14442_0031.N1"),
new DrbDefaultMutableNode("GOM_NL__0PNPDE20041215_033131_000053822033_00018_14601_1448.N1"),
new DrbDefaultMutableNode("GOM_TRA_1PNPDE20041113_230620_000000712032_00073_14155_0012.N1"),
new DrbDefaultMutableNode("S1A_IW_GRDH_1SDV_20141009T155724_20141009T155749_002755_003184_8C3F.zip"),
new DrbDefaultMutableNode("S1A_EW_GRDH_1SDH_20141008T090011_20141008T090027_002736_003117_107F.zip"),
new DrbDefaultMutableNode("S1A_S4_RAW__0SSV_20141004T062011_20141004T062031_002676_002FBE_3B30.zip"),
new DrbDefaultMutableNode("S1A_S3_RAW__0SSV_20141003T104036_20141003T104106_002664_002F79_D4F3.zip"),
new DrbDefaultMutableNode("S1A_IW_RAW__0SSV_20141004T212603_20141004T212640_002685_002FF6_E94F.zip"),
new DrbDefaultMutableNode("S1A_IW_SLC__1SDV_20141004T155003_20141004T155031_002682_002FE4_20EA.zip"),
new DrbDefaultMutableNode("S1A_IW_SLC__1SDV_20141003T164823_20141003T164850_002668_002F8B_47F1.zip"),
};
/* Fonctionne sous eclipse mais pas en ligne de commande "mvn test"
* TBC
* */
@Test
public void matchesAll() throws InterruptedException
{
logger.info ("match all list :");
Scanner scanner = getTestScanner();
scanner.setUserPattern (null);
Assert.assertEquals(scanner.scan(), testItem.length);
}
@Test
public void matchesOne() throws InterruptedException
{
logger.info ("matchOne (pattern=\".*\\.tar\") :");
Scanner scanner = getTestScanner();
scanner.setUserPattern(".*\\.tar");
Assert.assertEquals(scanner.scan(), 1);
}
@Test
public void matchesGomos () throws InterruptedException
{
logger.info ("match GOMOS only (pattern=\"GOM.*\\.N1\") :");
Scanner scanner = getTestScanner();
scanner.setUserPattern("GOM.*\\.N1");
Assert.assertEquals(scanner.scan(), 3);
}
@Test
public void matchesThree () throws InterruptedException
{
logger.info ("match tree products (pattern=\".*\\.[0-9]{1}\") :");
Scanner scanner = getTestScanner();
scanner.setUserPattern(".*\\.[0-9]*");
Assert.assertEquals(scanner.scan(), 3);
}
@Test
public void matchesWrongPattern () throws InterruptedException
{
logger.info ("match wrong (pattern=\"*][\") :");
Scanner scanner = getTestScanner();
boolean exception_raised = false;
try
{
scanner.setUserPattern("*][");
}
catch (PatternSyntaxException pse)
{
// exception raised: as expected:
exception_raised=true;
}
Assert.assertEquals(exception_raised, true,
"Error in pattern has not been detected.");
Assert.assertEquals(scanner.scan(), testItem.length);
}
@Test
public void matchesAllSentinels () throws InterruptedException
{
logger.info ("match \"S1A_.*\\.zip\"");
Scanner scanner = getTestScanner();
scanner.setUserPattern("S1A_.*\\.zip");
Assert.assertEquals(scanner.scan(), 7);
}
@Test
public void matchesAllSlcGdmSentinels () throws InterruptedException
{
logger.info ("match \"S1[AB]_\\p{Upper}{2}_(SLC|GRDM).*\"");
Scanner scanner = getTestScanner();
scanner.setUserPattern("S1[AB]_\\p{Upper}{2}_(SLC|GRDM).*");
Assert.assertEquals(scanner.scan(), 2);
}
@Test
public void matchesAllEwSlcGdSentinels () throws InterruptedException
{
logger.info ("match \"S1A_EW_(SLC_|GRD(F|H|M))_.*\"");
Scanner scanner = getTestScanner();
scanner.setUserPattern("S1A_EW_(SLC_|GRD(F|H|M))_.*");
Assert.assertEquals(scanner.scan(), 1);
}
public Scanner getTestScanner ()
{
Scanner scanner = new AbstractScanner(false)
{
@Override
public int scan()
{
int result_count = 0;
// Use scan() method to launch test :-)
for (DrbNode node:testItem)
{
String pattern = getUserPattern()==null?"":getUserPattern().pattern();
/*
String classes = "";
for (DrbCortexItemClass cl : getSupportedClasses())
{
classes += "'" + cl.getOntClass().getNameSpace() + cl.getOntClass().getLocalName() + "', ";
}
logger.info("Supported classes : " + classes);
*/
if (matches(node))
{
result_count ++;
logger.info (" + \"" + pattern + "\" Node " + node.getName() + " match !");
}
else
{
logger.info (" - \"" + pattern + "\" Node " + node.getName() + " Not match scanner.");
}
}
return result_count;
}
};
scanner.setSupportedClasses(ImmutableList.of (DrbCortexItemClass
.getCortexItemClassByName ("http://www.gael.fr/drb#item")));
return scanner;
}
}