*
* @throws Exception
*/
@Test
public void testCreateListVersionsBetween() throws Exception {
KiWiVersioningConnection connection = vpersistence.getConnection();
try {
KiWiUriResource subject = new KiWiUriResource("http://localhost/resource/"+ RandomStringUtils.randomAlphanumeric(8));
KiWiUriResource pred_1 = new KiWiUriResource("http://localhost/predicate/P1");
KiWiUriResource pred_2 = new KiWiUriResource("http://localhost/predicate/P2");
KiWiUriResource object_1 = new KiWiUriResource("http://localhost/resource/"+RandomStringUtils.randomAlphanumeric(8));
KiWiStringLiteral object_2 = new KiWiStringLiteral(RandomStringUtils.randomAlphanumeric(32));
KiWiUriResource context = new KiWiUriResource("http://localhost/context/"+RandomStringUtils.randomAlphanumeric(8));
connection.storeNode(subject, false);
connection.storeNode(pred_1, false);
connection.storeNode(pred_2, false);
connection.storeNode(object_1, false);
connection.storeNode(object_2, false);
connection.storeNode(context, false);
KiWiTriple triple1 = new KiWiTriple(subject,pred_1,object_1,context);
KiWiTriple triple2 = new KiWiTriple(subject,pred_2,object_2,context);
connection.storeTriple(triple1);
connection.storeTriple(triple2);
connection.commit();
Date date1 = new Date();
// wait for one second to be sure to capture MySQL cutting milliseconds
mysqlSleep();
Version version1 = new Version();
version1.setCommitTime(new Date());
version1.addTriple(triple1);
connection.storeVersion(version1);
connection.commit();
// wait for one second to be sure to capture MySQL cutting milliseconds
mysqlSleep();
Date date2 = new Date();
// wait for one second to be sure to capture MySQL cutting milliseconds
mysqlSleep();
Version version2 = new Version();
version2.setCommitTime(new Date());
version2.addTriple(triple2);
version2.removeTriple(triple1);
connection.storeVersion(version2);
connection.commit();
// wait for one second to be sure to capture MySQL cutting milliseconds
mysqlSleep();
Date date3 = new Date();
// now we test different ways of listing versions between dates
List<Version> list1 = Iterations.asList(connection.listVersions(date1,date2));
Assert.assertEquals("there should be exactly one version from "+date1+" to "+date2,1,list1.size());
Assert.assertEquals("contents of version differ", version1, list1.get(0));
Assert.assertEquals("version id is not 1", 1L, (long)list1.get(0).getId());
// check if getLatestVersion at date2 works
Version latest2 = connection.getLatestVersion(subject,date2);
Assert.assertNotNull("latest version for subject was not found",latest2);
Assert.assertEquals("latest version is not the expected version", version1,latest2);
// check if listVersions with subject1 now gives exactly one version
List<Version> listr1 = Iterations.asList(connection.listVersions(subject,date1,date2));
Assert.assertEquals("there should be exactly one version", 1, listr1.size());
Assert.assertEquals("contents of version differ", version1, listr1.get(0));
Assert.assertEquals("version id is not 1", 1L, (long)listr1.get(0).getId());
List<Version> list2 = Iterations.asList(connection.listVersions(date2,date3));
Assert.assertEquals("there should be exactly one version from "+date2+" to "+date3,1,list2.size());
Assert.assertEquals("contents of version differ", version2, list2.get(0));
Assert.assertEquals("version id is not 2", 2L, (long)list2.get(0).getId());
List<Version> list3 = Iterations.asList(connection.listVersions(date3,new Date()));
Assert.assertEquals("there should be no version from "+date3+" to now",0,list3.size());
List<Version> list4 = Iterations.asList(connection.listVersions(date1,date3));
Assert.assertEquals("there should be exactly two versions from "+date1+" to "+date3,2,list4.size());
Assert.assertEquals("contents of version1 differ", version1, list4.get(0));
Assert.assertEquals("contents of version2 differ", version2, list4.get(1));
connection.commit();
} finally {
connection.close();
}
}