diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java index 9c59011fbb1be72e093b358a6e4525561e8cbdb8..8b4fe75f878c4eb01f1c732a7c42ed45328a58a2 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java @@ -236,6 +236,9 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { // Get identifier and setSpec field, add setSpec prefix if not already set. String identifier = OAIPMHUtilities.fieldLoader(json, this.identifierField); + + System.out.println("id=" + identifier); + String setSpec = OAIPMHUtilities.getSetSpec(set, this.specFieldPrefix, identifier); try { diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhDariahdeOnlineTests.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhDariahdeOnlineTests.java index cd41748ed45feedf992c5f438eaa7fcfc5863e6a..a0ab9da1f3b8b4ee76815703bc5ebdc1a7dc64aa 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhDariahdeOnlineTests.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhDariahdeOnlineTests.java @@ -32,520 +32,558 @@ import org.junit.Test; */ @Ignore public class OaiPmhDariahdeOnlineTests { - // ** - // FINALS - // ** - - // private static final String PROPERTIES_FILE = "oaipmh.test.repository-de-dariah-eu.properties"; - private static final String PROPERTIES_FILE = "oaipmh.test.trep-de-dariah-eu.properties"; - - // ** - // STATICS - // ** - - // Some JAXRS things. - private static String oaipmhEndpoint; - private static OAIPMHProducer JAXRSClient; - private static Client oaipmhWebClient; - - // Properties - private static String expectedListSets; - private static String checkGetRecordDC; - private static String expectedGetRecordDC; - private static String checkGetRecordDATACITE; - private static String expectedGetRecordDATACITE; - private static String checkListRecordsDC; - private static String checkListRecordsDCFrom; - private static String checkListRecordsDCUntil; - private static String checkListRecordsDATACITEFrom; - private static String checkListRecordsDATACITEUntil; - private static String checkListIdentifiersSet; - private static List<String> checkGetRecordIDList = new ArrayList<String>(); - - // ** - // PREPARATIONS - // ** - - /** - * @throws Exception - */ - @BeforeClass - public static void setUpBeforeClass() throws Exception { - - // Load properties file. - Properties p = new Properties(); - p.load(new FileInputStream(OaiPmhTestUtilities.getResource(PROPERTIES_FILE))); - - System.out.println("Properties file: " + PROPERTIES_FILE); - p.list(System.out); - - // Get other needed properties. - oaipmhEndpoint = p.getProperty("oaipmhEndpoint"); - expectedListSets = p.getProperty("expectedListSets"); - checkGetRecordDC = p.getProperty("checkGetRecordDC"); - expectedGetRecordDC = p.getProperty("expectedGetRecordDC"); - checkGetRecordDATACITE = p.getProperty("checkGetRecordDATACITE"); - expectedGetRecordDATACITE = p.getProperty("expectedGetRecordDATACITE"); - checkListRecordsDC = p.getProperty("checkListRecordsDC"); - checkListRecordsDCFrom = p.getProperty("checkListRecordsDCFrom"); - checkListRecordsDCUntil = p.getProperty("checkListRecordsDCUntil"); - checkListRecordsDATACITEFrom = p.getProperty("checkListRecordsDATACITEFrom"); - checkListRecordsDATACITEUntil = p.getProperty("checkListRecordsDATACITEUntil"); - checkListIdentifiersSet = p.getProperty("checkListIdentifiersSet"); - checkGetRecordIDList = - OaiPmhTestUtilities.getListFromProperties((String) p.get("checkGetRecordIDList")); - - // Get OAI-PMH REST endpoint and HTTP client. - System.out.println("Getting OAI-PMH HTTP client --> " + oaipmhEndpoint + " <--"); - - // Get proxy first, set policy. - JAXRSClient = JAXRSClientFactory.create(oaipmhEndpoint, OAIPMHProducer.class); - HTTPConduit conduit = WebClient.getConfig(JAXRSClient).getHttpConduit(); - HTTPClientPolicy policy = new HTTPClientPolicy(); - policy.setReceiveTimeout(OaiPmhTestUtilities.OAIPMH_CLIENT_TIMEOUT); - conduit.setClient(policy); - - // Create Web Client from Web Proxy. - oaipmhWebClient = WebClient.client(JAXRSClient); - } - - /** - * @throws Exception - */ - @AfterClass - public static void tearDownAfterClass() throws Exception {} - - /** - * @throws Exception - */ - @Before - public void setUp() throws Exception {} - - /** - * @throws Exception - */ - @After - public void tearDown() throws Exception {} - - // ** - // TESTS - // ** - - /** - * @throws IOException - */ - @Test - public void testGetVersion() throws IOException { - - String shouldStartWith = "oaipmh-core"; - - System.out.println(OaiPmhTestUtilities.TESTING + "#GETVERSION for '" + shouldStartWith + "'"); - - String versionString = JAXRSClient.getVersion(); - - if (!versionString.startsWith(shouldStartWith)) { - System.err.println( - OaiPmhTestUtilities.ERROR + ": response should start with '" + shouldStartWith + "'"); - assertTrue(false); - } - - System.out.println("\tresponse: " + versionString); - System.out.println(OaiPmhTestUtilities.OK); - } - - /** - * @throws IOException - */ - @Test - public void testRootWithSlash() throws IOException { - - String url = "oai/"; - String shouldContain = "DARIAH-DE Repository"; - - testRootURL(url, shouldContain); - } - - /** - * @throws IOException - */ - @Test - public void testRootWithoutSlash() throws IOException { - - String url = "oai"; - String shouldContain = "DARIAH-DE Repository"; - - testRootURL(url, shouldContain); - } - - /** - * @throws IOException - */ - @Test - public void testBlubbVerb() throws IOException { - - String url = "verb=BLUBB"; - String shouldContain = "Illegal OAI verb"; - - testRootURL(url, shouldContain); - } - - /** - * @throws IOException - */ - @Test - public void testIdentify() throws IOException { - - String verb = "Identify"; - String shouldContain = "DARIAH-DE Repository"; - - System.out.println(OaiPmhTestUtilities.TESTING + "#IDENTIFY"); - - Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, "verb=" + verb); - int status = response.getStatus(); + // ** + // FINALS + // ** + + // private static final String PROPERTIES_FILE = + // "oaipmh.test.repository-de-dariah-eu.properties"; + private static final String PROPERTIES_FILE = "oaipmh.test.trep-de-dariah-eu.properties"; + + // ** + // STATICS + // ** + + // Some JAXRS things. + private static String oaipmhEndpoint; + private static OAIPMHProducer JAXRSClient; + private static Client oaipmhWebClient; + + // Properties + private static String expectedListSets; + private static String checkGetRecordDC; + private static String expectedGetRecordDC; + private static String checkGetRecordDATACITE; + private static String expectedGetRecordDATACITE; + private static String checkListRecordsDC; + private static String checkListRecordsDCFrom; + private static String checkListRecordsDCUntil; + private static String checkListRecordsDATACITEFrom; + private static String checkListRecordsDATACITEUntil; + private static String checkListIdentifiersSet; + private static List<String> checkGetRecordIDList = new ArrayList<String>(); + + // ** + // PREPARATIONS + // ** + + /** + * @throws Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + + // Load properties file. + Properties p = new Properties(); + p.load(new FileInputStream( + OaiPmhTestUtilities.getResource(PROPERTIES_FILE))); + + System.out.println("Properties file: " + PROPERTIES_FILE); + p.list(System.out); + + // Get other needed properties. + oaipmhEndpoint = p.getProperty("oaipmhEndpoint"); + expectedListSets = p.getProperty("expectedListSets"); + checkGetRecordDC = p.getProperty("checkGetRecordDC"); + expectedGetRecordDC = p.getProperty("expectedGetRecordDC"); + checkGetRecordDATACITE = p.getProperty("checkGetRecordDATACITE"); + expectedGetRecordDATACITE = p.getProperty("expectedGetRecordDATACITE"); + checkListRecordsDC = p.getProperty("checkListRecordsDC"); + checkListRecordsDCFrom = p.getProperty("checkListRecordsDCFrom"); + checkListRecordsDCUntil = p.getProperty("checkListRecordsDCUntil"); + checkListRecordsDATACITEFrom = p + .getProperty("checkListRecordsDATACITEFrom"); + checkListRecordsDATACITEUntil = p + .getProperty("checkListRecordsDATACITEUntil"); + checkListIdentifiersSet = p.getProperty("checkListIdentifiersSet"); + checkGetRecordIDList = OaiPmhTestUtilities + .getListFromProperties((String) p.get("checkGetRecordIDList")); + + // Get OAI-PMH REST endpoint and HTTP client. + System.out.println( + "Getting OAI-PMH HTTP client --> " + oaipmhEndpoint + " <--"); + + // Get proxy first, set policy. + JAXRSClient = JAXRSClientFactory.create(oaipmhEndpoint, + OAIPMHProducer.class); + HTTPConduit conduit = WebClient.getConfig(JAXRSClient).getHttpConduit(); + HTTPClientPolicy policy = new HTTPClientPolicy(); + policy.setReceiveTimeout(OaiPmhTestUtilities.OAIPMH_CLIENT_TIMEOUT); + conduit.setClient(policy); + + // Create Web Client from Web Proxy. + oaipmhWebClient = WebClient.client(JAXRSClient); + } + + /** + * @throws Exception + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + /** + * @throws Exception + */ + @Before + public void setUp() throws Exception { + } + + /** + * @throws Exception + */ + @After + public void tearDown() throws Exception { + } + + // ** + // TESTS + // ** + + /** + * @throws IOException + */ + @Test + public void testGetVersion() throws IOException { + + String shouldStartWith = "oaipmh-core"; + + System.out.println(OaiPmhTestUtilities.TESTING + "#GETVERSION for '" + + shouldStartWith + "'"); + + String versionString = JAXRSClient.getVersion(); + + if (!versionString.startsWith(shouldStartWith)) { + System.err.println(OaiPmhTestUtilities.ERROR + + ": response should start with '" + shouldStartWith + "'"); + assertTrue(false); + } + + System.out.println("\tresponse: " + versionString); + System.out.println(OaiPmhTestUtilities.OK); + } + + /** + * @throws IOException + */ + @Test + public void testRootWithSlash() throws IOException { + + String url = "oai/"; + String shouldContain = "DARIAH-DE Repository"; + + testRootURL(url, shouldContain); + } + + /** + * @throws IOException + */ + @Test + public void testRootWithoutSlash() throws IOException { + + String url = "oai"; + String shouldContain = "DARIAH-DE Repository"; + + testRootURL(url, shouldContain); + } + + /** + * @throws IOException + */ + @Test + public void testBlubbVerb() throws IOException { + + String url = "verb=BLUBB"; + String shouldContain = "Illegal OAI verb"; + + testRootURL(url, shouldContain); + } + + /** + * @throws IOException + */ + @Test + public void testIdentify() throws IOException { + + String verb = "Identify"; + String shouldContain = "DARIAH-DE Repository"; + + System.out.println(OaiPmhTestUtilities.TESTING + "#IDENTIFY"); + + Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, + "verb=" + verb); + int status = response.getStatus(); + + String responseString = IOUtils + .readStringFromStream((InputStream) response.getEntity()); + + if (status != HttpStatus.SC_OK + || !responseString.contains(shouldContain)) { + System.err.println("\tstatus: " + status); + System.err.println(OaiPmhTestUtilities.ERROR + + ": response should contain '" + shouldContain + "'"); + assertTrue(false); + } + + System.out.println("\tresponse: " + responseString); + System.out.println(OaiPmhTestUtilities.OK); + } - String responseString = IOUtils.readStringFromStream((InputStream) response.getEntity()); + /** + * @throws IOException + */ + @Test + public void testListSets() throws IOException { + testListSet(expectedListSets, expectedListSets); + } - if (status != HttpStatus.SC_OK || !responseString.contains(shouldContain)) { - System.err.println("\tstatus: " + status); - System.err - .println(OaiPmhTestUtilities.ERROR + ": response should contain '" + shouldContain + "'"); - assertTrue(false); - } + /** + * @throws IOException + */ + @Test + public void testListRecordsDC() throws IOException { - System.out.println("\tresponse: " + responseString); - System.out.println(OaiPmhTestUtilities.OK); - } + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); - /** - * @throws IOException - */ - @Test - public void testListSets() throws IOException { - testListSet(expectedListSets, expectedListSets); - } + testList("ListRecords", "oai_dc", OaiPmhTestUtilities.NO_SET); + } - /** - * @throws IOException - */ - @Test - public void testListRecordsDC() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); - - testList("ListRecords", "oai_dc", OaiPmhTestUtilities.NO_SET); - } - - /** - * @throws IOException - */ - @Test - public void testListRecordsDCFromUntil() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); - - testList("ListRecords", "oai_dc", OaiPmhTestUtilities.NO_SET, checkListRecordsDCFrom, - checkListRecordsDCUntil); - } - - /** - * @throws IOException - */ - @Test - public void testListRecordsDATASITE() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); - - testList("ListRecords", "oai_datacite", OaiPmhTestUtilities.NO_SET); - } - - /** - * @throws IOException - */ - @Test - public void testListRecordsDATASITEFromUntil() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); - - testList("ListRecords", "oai_datacite", OaiPmhTestUtilities.NO_SET, - checkListRecordsDATACITEFrom, checkListRecordsDATACITEUntil); - } - - /** - * @throws IOException - */ - @Test - @Ignore - public void testGetRecordDC() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#GETRECORD"); - - String identifier = ""; - String shouldContain = ""; - - String path = "verb=GetRecord&identifier=" + identifier + "&metadataPrefix=oai_dc"; - - // FIXME Complete test! - } - - /** - * @throws IOException - */ - @Test - @Ignore - public void testGetRecordDATASITE() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#GETRECORD"); - - String identifier = ""; - String shouldContain = ""; - - String path = "verb=GetRecord&identifier=" + identifier + "&metadataPrefix=oai_datacite"; - - // FIXME Complete test! - } - - /** - * @throws IOException - */ - @Test - public void testListIdentifiersDC() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTIDENTIFIERS"); - - testList("ListIdentifiers", "oai_dc", OaiPmhTestUtilities.NO_SET); - } - - /** - * @throws IOException - */ - @Test - public void testListIdentifiersDATASITE() throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTIDENTIFIERS"); - - testList("ListIdentifiers", "oai_datacite", OaiPmhTestUtilities.NO_SET); - } - - // ** - // PRIVATE METHODS - // ** - - /** - * TODO Generalise in OaiPmhTestUtilities! - * - * @param theResponse - * @return Resumption token string, if existing, -1 if either no <resumptionToken> tag is - * existing, tag is existing and has no token value. - * @throws IOException - */ - private static String examineResumptionTokenTag(Response theResponse, String recordOrHeader, - String oldtok) throws IOException { - - String responseString = IOUtils.readStringFromStream((InputStream) theResponse.getEntity()); - - // Test for OAIPMH errors. - if (responseString.contains("<error code=\"badArgument\">")) { - System.err.println(OaiPmhTestUtilities.ERROR + " IN OAIPMH RESPONSE: " + responseString); - assertTrue(false); - } - - // Count response objects at first. - int recordCount = 0; - int i = responseString.indexOf("<" + recordOrHeader + ">", 0); - while (i != -1) { - recordCount++; - i++; - i = responseString.indexOf("<" + recordOrHeader + ">", i); - } - - System.out.println("\t" + recordOrHeader + "s: " + recordCount); - - // Check if token tag is existing. - int tokStart = responseString.indexOf("<resumptionToken"); - int tokEnd = responseString.indexOf("</resumptionToken"); - - if (tokStart == -1 && tokEnd == -1) { - System.out.println("\ttoken: no token"); - - return "-1"; - } - - String restokTmp = responseString.substring(tokStart, tokEnd); - // Get token tag. - String toktag = restokTmp.substring(0, restokTmp.indexOf(">") + 1).trim(); - System.out.println("\ttokentag: " + toktag); - - // Get token. - String restok = restokTmp.substring(restokTmp.indexOf(">") + 1).trim(); - System.out.println("\ttoken: " + restok); - - // Check if old and new token are equal or not. - boolean tokchanged = !oldtok.equals(restok); - System.out.println("\ttokchngd: " + tokchanged); - - // Get completeListSize and cursor. - String sizeStr = toktag.substring(toktag.indexOf("completeListSize=\"") + 18); - int size = Integer.parseInt(sizeStr.substring(0, sizeStr.indexOf("\""))); - String cursorStr = toktag.substring(toktag.indexOf("cursor=\"") + 8); - int cursor = Integer.parseInt(cursorStr.substring(0, cursorStr.indexOf("\""))); - System.out.println("\tsize: " + size + " / " + cursor); - - // If token is provided, and we have less than 100 elements: mekkern! - if (!restok.isEmpty()) { - synchronized (OaiPmhDariahdeOnlineTests.class) { - // Check <record> or <header> count, must be 100! - if (recordCount != 100) { - System.err.println(OaiPmhTestUtilities.ERROR + ": " + recordOrHeader - + " count mismatch, must be 100 if token is provided, but is " + recordCount); - } - if (size <= 100) { - System.err.println(OaiPmhTestUtilities.ERROR - + ": completeListSize count mismatch, must be > 100 if token is provided, but is " - + size); - } - if (recordCount != 100 || size <= 100) { - assertTrue(false); - } - } - } - - // If no token is provided, stop querying. - else { - // Check <record> count, must be completeListSize % 100. - if (recordCount != size % 100) { - System.err.println( - OaiPmhTestUtilities.ERROR + ": " + recordOrHeader + " count mismatch, should be " - + size % 100 + ", but is " + recordCount); - assertTrue(false); - } - - // No resumption token available in response. - return "-1"; - } - - return restok; - } - - /** - * @param theVerb - * @param theMetadataPrefix - * @param theSet - * @return - * @throws IOException - */ - private static int testList(String theVerb, String theMetadataPrefix, String theSet) - throws IOException { - return testList(theVerb, theMetadataPrefix, theSet, OaiPmhTestUtilities.NO_FROM, - OaiPmhTestUtilities.NO_UNTIL); - } - - /** - * TODO Generalise in OaiPmhTestUtilities! - * - * @param theVerb - * @param theMetadataPrefix - * @param theSet - * @param from - * @param until - * @return How many pages were delivered - * @throws IOException - */ - private static int testList(String theVerb, String theMetadataPrefix, String theSet, String from, - String until) throws IOException { - - int result; - - long startTime = System.currentTimeMillis(); - - String testOccurance = "header"; - if (theVerb.equals(OaiPmhTestUtilities.VERB_LIST_RECORDS)) { - testOccurance = "record"; - } - - String path = "verb=" + theVerb + "&metadataPrefix=" + theMetadataPrefix; - - if (theSet != null && !theSet.isEmpty()) { - path += "&set=" + theSet; - } - - if (from != null && until != null) { - path += "&from=" + from + "&until=" + until; - } - - Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, path); - int status = response.getStatus(); - - long timeRunning = System.currentTimeMillis() - startTime; - System.out.println("\ttime: " + OaiPmhTestUtilities.getDurationInSecs(timeRunning)); - - String restok = examineResumptionTokenTag(response, testOccurance, ""); - - result = 1; - while (status == HttpStatus.SC_OK && !restok.equals("-1")) { - path = "verb=" + theVerb + "&resumptionToken=" + restok; - response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, path); - timeRunning = System.currentTimeMillis() - startTime; - System.out.println("\ttime: " + OaiPmhTestUtilities.getDurationInSecs(timeRunning)); - restok = examineResumptionTokenTag(response, testOccurance, restok); - result++; - } - - System.out.println("\tpage amount: " + result); - System.out.println(OaiPmhTestUtilities.OK); - - return result; - } - - /** - * @param theSet - * @throws IOException - */ - private static void testListSet(String theSet, String theExpectedResponse) throws IOException { - - String verb = "ListSets"; - - System.out.println(OaiPmhTestUtilities.TESTING + "#LISTSETS"); - - Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, "verb=" + verb); - int status = response.getStatus(); - - String responseString = IOUtils.readStringFromStream((InputStream) response.getEntity()); - - if (status != HttpStatus.SC_OK || !responseString.contains(theExpectedResponse)) { - System.err.println("\tstatus: " + status); - System.err.println( - OaiPmhTestUtilities.ERROR + ": response should contain '" + theExpectedResponse + "'"); - System.err.println(responseString); - assertTrue(false); - } - - System.out.println("\tresponse: " + responseString); - System.out.println(OaiPmhTestUtilities.OK); - } - - /** - * @param theURL - * @param shouldContain - * @throws IOException - */ - private static void testRootURL(String theURL, String shouldContain) throws IOException { - - System.out.println(OaiPmhTestUtilities.TESTING + "#ROOTURL"); - - Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, theURL); - int status = response.getStatus(); - - String responseString = IOUtils.readStringFromStream((InputStream) response.getEntity()); - - if (status != HttpStatus.SC_OK || !responseString.contains(shouldContain)) { - System.err.println("\tstatus: " + status); - System.err - .println(OaiPmhTestUtilities.ERROR + ": response should contain '" + shouldContain + "'"); - assertTrue(false); - } - - System.out.println("\tresponse: " + responseString); - System.out.println(OaiPmhTestUtilities.OK); - } + /** + * @throws IOException + */ + @Test + public void testListRecordsDCFromUntil() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); + + testList("ListRecords", "oai_dc", OaiPmhTestUtilities.NO_SET, + checkListRecordsDCFrom, checkListRecordsDCUntil); + } + + /** + * @throws IOException + */ + @Test + public void testListRecordsDATASITE() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); + + testList("ListRecords", "oai_datacite", OaiPmhTestUtilities.NO_SET); + } + + /** + * @throws IOException + */ + @Test + public void testListRecordsDATASITEFromUntil() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTRECORDS"); + + testList("ListRecords", "oai_datacite", OaiPmhTestUtilities.NO_SET, + checkListRecordsDATACITEFrom, checkListRecordsDATACITEUntil); + } + + /** + * @throws IOException + */ + @Test + @Ignore + public void testGetRecordDC() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#GETRECORD"); + + String identifier = ""; + String shouldContain = ""; + + String path = "verb=GetRecord&identifier=" + identifier + + "&metadataPrefix=oai_dc"; + + // FIXME Complete test! + } + + /** + * @throws IOException + */ + @Test + @Ignore + public void testGetRecordDATASITE() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#GETRECORD"); + + String identifier = ""; + String shouldContain = ""; + + String path = "verb=GetRecord&identifier=" + identifier + + "&metadataPrefix=oai_datacite"; + + // FIXME Complete test! + } + + /** + * @throws IOException + */ + @Test + public void testListIdentifiersDC() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTIDENTIFIERS"); + + testList("ListIdentifiers", "oai_dc", OaiPmhTestUtilities.NO_SET); + } + + /** + * @throws IOException + */ + @Test + public void testListIdentifiersDATASITE() throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTIDENTIFIERS"); + + testList("ListIdentifiers", "oai_datacite", OaiPmhTestUtilities.NO_SET); + } + + // ** + // PRIVATE METHODS + // ** + + /** + * TODO Generalise in OaiPmhTestUtilities! + * + * @param theResponse + * @return Resumption token string, if existing, -1 if either no + * <resumptionToken> tag is existing, tag is existing and has no + * token value. + * @throws IOException + */ + private static String examineResumptionTokenTag(Response theResponse, + String recordOrHeader, String oldtok) throws IOException { + + String responseString = IOUtils + .readStringFromStream((InputStream) theResponse.getEntity()); + + // Test for OAIPMH errors. + if (responseString.contains("<error code=\"badArgument\">")) { + System.err.println(OaiPmhTestUtilities.ERROR + + " IN OAIPMH RESPONSE: " + responseString); + assertTrue(false); + } + + // Count response objects at first. + int recordCount = 0; + int i = responseString.indexOf("<" + recordOrHeader + ">", 0); + while (i != -1) { + recordCount++; + i++; + i = responseString.indexOf("<" + recordOrHeader + ">", i); + } + + System.out.println("\t" + recordOrHeader + "s: " + recordCount); + + // Check if token tag is existing. + int tokStart = responseString.indexOf("<resumptionToken"); + int tokEnd = responseString.indexOf("</resumptionToken"); + + if (tokStart == -1 && tokEnd == -1) { + System.out.println("\ttoken: no token"); + + return "-1"; + } + + String restokTmp = responseString.substring(tokStart, tokEnd); + // Get token tag. + String toktag = restokTmp.substring(0, restokTmp.indexOf(">") + 1) + .trim(); + System.out.println("\ttokentag: " + toktag); + + // Get token. + String restok = restokTmp.substring(restokTmp.indexOf(">") + 1).trim(); + System.out.println("\ttoken: " + restok); + + // Check if old and new token are equal or not. + boolean tokchanged = !oldtok.equals(restok); + System.out.println("\ttokchngd: " + tokchanged); + + // Get completeListSize and cursor. + String sizeStr = toktag + .substring(toktag.indexOf("completeListSize=\"") + 18); + int size = Integer + .parseInt(sizeStr.substring(0, sizeStr.indexOf("\""))); + String cursorStr = toktag.substring(toktag.indexOf("cursor=\"") + 8); + int cursor = Integer + .parseInt(cursorStr.substring(0, cursorStr.indexOf("\""))); + System.out.println("\tsize: " + size + " / " + cursor); + + // If token is provided, and we have less than 100 elements: mekkern! + if (!restok.isEmpty()) { + synchronized (OaiPmhDariahdeOnlineTests.class) { + // Check <record> or <header> count, must be 100! + if (recordCount != 100) { + System.err.println(OaiPmhTestUtilities.ERROR + ": " + + recordOrHeader + + " count mismatch, must be 100 if token is provided, but is " + + recordCount); + } + if (size <= 100) { + System.err.println(OaiPmhTestUtilities.ERROR + + ": completeListSize count mismatch, must be > 100 if token is provided, but is " + + size); + } + if (recordCount != 100 || size <= 100) { + assertTrue(false); + } + } + } + + // If no token is provided, stop querying. + else { + // Check <record> count, must be completeListSize % 100. + if (recordCount != size % 100) { + System.err.println(OaiPmhTestUtilities.ERROR + ": " + + recordOrHeader + " count mismatch, should be " + + size % 100 + ", but is " + recordCount); + assertTrue(false); + } + + // No resumption token available in response. + return "-1"; + } + + return restok; + } + + /** + * @param theVerb + * @param theMetadataPrefix + * @param theSet + * @return + * @throws IOException + */ + private static int testList(String theVerb, String theMetadataPrefix, + String theSet) throws IOException { + return testList(theVerb, theMetadataPrefix, theSet, + OaiPmhTestUtilities.NO_FROM, OaiPmhTestUtilities.NO_UNTIL); + } + + /** + * TODO Generalise in OaiPmhTestUtilities! + * + * @param theVerb + * @param theMetadataPrefix + * @param theSet + * @param from + * @param until + * @return How many pages were delivered + * @throws IOException + */ + private static int testList(String theVerb, String theMetadataPrefix, + String theSet, String from, String until) throws IOException { + + int result; + + long startTime = System.currentTimeMillis(); + + String testOccurance = "header"; + if (theVerb.equals(OaiPmhTestUtilities.VERB_LIST_RECORDS)) { + testOccurance = "record"; + } + + String path = "verb=" + theVerb + "&metadataPrefix=" + + theMetadataPrefix; + + if (theSet != null && !theSet.isEmpty()) { + path += "&set=" + theSet; + } + + if (from != null && until != null) { + path += "&from=" + from + "&until=" + until; + } + + Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, + path); + int status = response.getStatus(); + + long timeRunning = System.currentTimeMillis() - startTime; + System.out.println("\ttime: " + + OaiPmhTestUtilities.getDurationInSecs(timeRunning)); + + String restok = examineResumptionTokenTag(response, testOccurance, ""); + + result = 1; + while (status == HttpStatus.SC_OK && !restok.equals("-1")) { + path = "verb=" + theVerb + "&resumptionToken=" + restok; + response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, + path); + timeRunning = System.currentTimeMillis() - startTime; + System.out.println("\ttime: " + + OaiPmhTestUtilities.getDurationInSecs(timeRunning)); + restok = examineResumptionTokenTag(response, testOccurance, restok); + result++; + } + + System.out.println("\tpage amount: " + result); + System.out.println(OaiPmhTestUtilities.OK); + + return result; + } + + /** + * @param theSet + * @throws IOException + */ + private static void testListSet(String theSet, String theExpectedResponse) + throws IOException { + + String verb = "ListSets"; + + System.out.println(OaiPmhTestUtilities.TESTING + "#LISTSETS"); + + Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, + "verb=" + verb); + int status = response.getStatus(); + + String responseString = IOUtils + .readStringFromStream((InputStream) response.getEntity()); + + if (status != HttpStatus.SC_OK + || !responseString.contains(theExpectedResponse)) { + System.err.println("\tstatus: " + status); + System.err.println( + OaiPmhTestUtilities.ERROR + ": response should contain '" + + theExpectedResponse + "'"); + System.err.println(responseString); + assertTrue(false); + } + + System.out.println("\tresponse: " + responseString); + System.out.println(OaiPmhTestUtilities.OK); + } + + /** + * @param theURL + * @param shouldContain + * @throws IOException + */ + private static void testRootURL(String theURL, String shouldContain) + throws IOException { + + System.out.println(OaiPmhTestUtilities.TESTING + "#ROOTURL"); + + Response response = OaiPmhTestUtilities.getHttpResponse(oaipmhWebClient, + theURL); + int status = response.getStatus(); + + String responseString = IOUtils + .readStringFromStream((InputStream) response.getEntity()); + + if (status != HttpStatus.SC_OK + || !responseString.contains(shouldContain)) { + System.err.println("\tstatus: " + status); + System.err.println(OaiPmhTestUtilities.ERROR + + ": response should contain '" + shouldContain + "'"); + assertTrue(false); + } + + System.out.println("\tresponse: " + responseString); + System.out.println(OaiPmhTestUtilities.OK); + } }