/**
* '$RCSfile$'
* Copyright: 2004 Regents of the University of California and the
* National Center for Ecological Analysis and Synthesis
*
* '$Author$'
* '$Date$'
* '$Revision$'
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.ucsb.nceas.metacattest;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import edu.ucsb.nceas.MCTestCase;
import edu.ucsb.nceas.metacat.database.DBConnectionPool;
import edu.ucsb.nceas.metacat.properties.PropertyService;
import edu.ucsb.nceas.metacat.EventLog;
/**
* Test the logging facility against the database connection.
*
* @author jones
*/
public class EventLogWithBlackListTest extends MCTestCase
{
private static final String USERAGENT="useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-"+
"useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-"+
"useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-"+
"useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-"+
"useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-useragent-"+
"useragent-12";
protected void setUp() throws Exception
{
super.setUp();
PropertyService.setPropertyNoPersist("event.log.blacklist.ipaddress", "192.168.1.115:192.168.1.116");
PropertyService.setPropertyNoPersist("event.log.blacklist.subject", "uid=user,o=NCEAS,dc=ecoinformatics,dc=org:http\\://orcid.org/0000-0002-1209-5268");
DBConnectionPool pool = DBConnectionPool.getInstance();
}
/**
* Test whether a valid instance of the EventLog can be retrieved.
*
*/
public void testGetInstance()
{
EventLog logger = EventLog.getInstance();
assertTrue(logger != null);
}
/**
* Test whether the log method can properly insert a log record.
*/
public void testLog() throws Exception
{
long time = System.nanoTime();
String id = "test-1934-wemewen-3-2"+time+".1";
EventLog.getInstance().log("192.168.1.103", "Mozilla", "public", id, "read");
Thread.sleep(2000);
Timestamp startDate = null;
Timestamp endDate = null;
boolean anonymous = false;
String[] principals = {"public", "someone"};
String[] ipList = {"192.168.1.103", "192.168.1.104"};
String[] docList = {id};
String[] eventList = {"read", "insert", "update"};
String report = EventLog.getInstance().getReport(ipList, principals, docList,
eventList, startDate, endDate, anonymous);
//System.out.println("the report is "+report);
assertTrue(report.contains("read"));
assertTrue(report.contains("192.168.1.103"));
assertTrue(report.contains("Mozilla"));
assertTrue(report.contains("public"));
assertTrue(report.contains(""+id+""));
//test a case with a user-agent which length is greater than 512.
time = System.nanoTime();
id = "test-1934-wemewen-3-3"+time+".1";
EventLog.getInstance().log("192.168.1.103", USERAGENT+"extral characters", "public", id, "read");
Thread.sleep(2000);
String[] docs = {id};
report = EventLog.getInstance().getReport(ipList, principals, docs,
eventList, startDate, endDate, anonymous);
System.out.println("the report is "+report);
assertTrue(report.contains("read"));
assertTrue(report.contains("192.168.1.103"));
assertTrue(report.contains(""+USERAGENT+""));
assertTrue(report.contains("public"));
assertTrue(report.contains(""+id+""));
}
/**
* Test whether the log method can properly insert a log record when the black ip and subject lists are set
*/
public void testLogWithBlackList() throws Exception
{
//test to filter out the ip address
long time = System.nanoTime();
String id = "test-1934-wemewen-35"+time+".1";
EventLog.getInstance().log("192.168.1.115", "unknown1", "public", id, "read");
Thread.sleep(2000);
Timestamp startDate = null;
Timestamp endDate = null;
boolean anonymous = false;
String[] principals = {"public", "uid=user,o=NCEAS,dc=ecoinformatics,dc=org", "http://orcid.org/0000-0002-1209-5268"};
String[] ipList = {"192.168.1.115", "192.168.1.100", "192.168.1.105"};
String[] docList = {id};
String[] eventList = {"read", "insert", "update"};
String report = EventLog.getInstance().getReport(ipList, principals, docList,
eventList, startDate, endDate, anonymous);
//System.out.println("===========the report is "+report);
assertTrue(!report.contains("read"));
assertTrue(!report.contains("192.168.1.115"));
assertTrue(!report.contains("unknown1"));
assertTrue(!report.contains("public"));
assertTrue(!report.contains(""+id+""));
//test to filter out the subject
time = System.nanoTime();
id = "test-1934-wemewen-3-37"+time+".1";
EventLog.getInstance().log("192.168.1.105", "unknown", "http://orcid.org/0000-0002-1209-5268", id, "read");
Thread.sleep(2000);
String[] docs = {id};
report = EventLog.getInstance().getReport(ipList, principals, docs,
eventList, startDate, endDate, anonymous);
//System.out.println("=============the report is "+report);
assertTrue(!report.contains("read"));
assertTrue(!report.contains("192.168.1.105"));
assertTrue(!report.contains("unknown"));
assertTrue(!report.contains("http://orcid.org/0000-0002-1209-5268"));
assertTrue(!report.contains(""+id+""));
//test to log data
time = System.nanoTime();
id = "test-1934-wemewen-3-45"+time+".1";
EventLog.getInstance().log("192.168.1.100", "unknown2", "public", id, "read");
Thread.sleep(2000);
String[] docs2 = {id};
report = EventLog.getInstance().getReport(ipList, principals, docs2,
eventList, startDate, endDate, anonymous);
//System.out.println("===============the report is "+report);
assertTrue(report.contains("read"));
assertTrue(report.contains("192.168.1.100"));
assertTrue(report.contains("unknown2"));
assertTrue(report.contains("public"));
assertTrue(report.contains(""+id+""));
}
/**
* Test whether getReport returns correct reports.
*/
public void testGetReport()
{
String[] principals = {"jones", "public", "someone"};
String[] ipList = {"192.168.1.103", "192.168.1.104"};
String[] docList = {"test.2.1", "test.2"};
String[] eventList = {"read", "insert", "update"};
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Timestamp startDate = null;
Timestamp endDate = null;
try {
startDate = new Timestamp((format.parse("2004-04-08 02:32:00")).getTime());
endDate = new Timestamp((format.parse("2004-04-08 11:20:00")).getTime());
} catch (ParseException e) {
System.out.println("Failed to created endDate from format.");
}
String report = EventLog.getInstance().getReport(ipList, principals, docList,
eventList, null, null, false);
System.out.println(report);
report = EventLog.getInstance().getReport(null, null, null,
null, startDate, endDate, false);
System.out.println(report);
}
/**
* Test if the isDeleted method
*/
public void testIsDeleted() throws Exception{
long time = System.nanoTime();
String id = "test-1934-weme123-3-1"+time+".1";
EventLog.getInstance().log("192.168.1.103", "Mozilla", "public", id, "read");
Thread.sleep(2000);
boolean deleted = EventLog.getInstance().isDeleted(id);
assertTrue(deleted == false);
Thread.sleep(2000);
EventLog.getInstance().log("192.168.1.103", "Mozilla", "public", id, EventLog.DELETE);
deleted = EventLog.getInstance().isDeleted(id);
assertTrue(deleted == true);
}
}