mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
Refactor MockSolrLoggerServiceImpl to initialize FakeDatabaseReader before every method
This commit is contained in:
@@ -8,21 +8,34 @@
|
||||
package org.dspace.statistics;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.maxmind.geoip2.DatabaseReader;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dspace.content.DSpaceObject;
|
||||
import org.dspace.eperson.EPerson;
|
||||
import org.dspace.services.ConfigurationService;
|
||||
import org.dspace.solr.MockSolrServer;
|
||||
import org.dspace.usage.UsageWorkflowEvent;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Mock service that uses an embedded SOLR server for the statistics core.
|
||||
*/
|
||||
@Service
|
||||
public class MockSolrLoggerServiceImpl
|
||||
extends SolrLoggerServiceImpl
|
||||
implements InitializingBean, DisposableBean {
|
||||
|
||||
private static final Logger log = LogManager.getLogger();
|
||||
|
||||
private MockSolrServer mockSolrServer;
|
||||
|
||||
@Autowired(required = true)
|
||||
@@ -33,15 +46,44 @@ public class MockSolrLoggerServiceImpl
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
// Initialize our service with a Mock Solr statistics core
|
||||
mockSolrServer = new MockSolrServer("statistics");
|
||||
solr = mockSolrServer.getSolrServer();
|
||||
}
|
||||
|
||||
new FakeDatabaseReader(); // Activate fake
|
||||
new FakeDatabaseReader.Builder(); // Activate fake
|
||||
String locationDbPath = configurationService.getProperty("usage-statistics.dbfile");
|
||||
File locationDb = new File(locationDbPath);
|
||||
locationDb.createNewFile();
|
||||
locationService = new DatabaseReader.Builder(locationDb).build();
|
||||
@Override
|
||||
public void postView(DSpaceObject dspaceObject, HttpServletRequest request,
|
||||
EPerson currentUser) {
|
||||
// Load our FakeDatabaseReader before each view event is logged
|
||||
loadFakeDatabaseReader();
|
||||
// Call overridden method
|
||||
super.postView(dspaceObject, request, currentUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postView(DSpaceObject dspaceObject,
|
||||
String ip, String userAgent, String xforwardedfor, EPerson currentUser) {
|
||||
// Load our FakeDatabaseReader before each view event is logged
|
||||
loadFakeDatabaseReader();
|
||||
// Call overridden method
|
||||
super.postView(dspaceObject, ip, userAgent, xforwardedfor, currentUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postSearch(DSpaceObject resultObject, HttpServletRequest request, EPerson currentUser,
|
||||
List<String> queries, int rpp, String sortBy, String order, int page, DSpaceObject scope) {
|
||||
// Load our FakeDatabaseReader before each search event is logged
|
||||
loadFakeDatabaseReader();
|
||||
// Call overridden method
|
||||
super.postSearch(resultObject, request, currentUser, queries, rpp, sortBy, order, page, scope);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postWorkflow(UsageWorkflowEvent usageWorkflowEvent) throws SQLException {
|
||||
// Load our FakeDatabaseReader before each workflow event is logged
|
||||
loadFakeDatabaseReader();
|
||||
// Call overridden method
|
||||
super.postWorkflow(usageWorkflowEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,4 +91,22 @@ public class MockSolrLoggerServiceImpl
|
||||
mockSolrServer.destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load / activate our FakeDatabaseReader which uses JMockit to replace specific
|
||||
* methods of the DatabaseReader. This MUST be called for each method that uses
|
||||
* DatabaseReader as JMockit fake classes are only in effect for tests in which
|
||||
* they are defined: http://jmockit.github.io/tutorial/Faking.html
|
||||
*/
|
||||
private void loadFakeDatabaseReader() {
|
||||
try {
|
||||
new FakeDatabaseReader(); // Activate fake
|
||||
new FakeDatabaseReader.Builder(); // Activate fake
|
||||
String locationDbPath = configurationService.getProperty("usage-statistics.dbfile");
|
||||
File locationDb = new File(locationDbPath);
|
||||
locationDb.createNewFile();
|
||||
locationService = new DatabaseReader.Builder(locationDb).build();
|
||||
} catch (Exception e) {
|
||||
log.error("Unable to load FakeDatabaseReader", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user