@Test public void testSaveToVersion() throws Exception { Log.info(Log.FAC_TEST, "Starting testSaveToVersion"); // Testing problem of disappearing versions, inability to get latest. Use simpler // object than a collection. NDNHandle lput = NDNHandle.open(); NDNHandle lget = NDNHandle.open(); try { ContentName testName = new ContentName(testHelper.getTestNamespace("testSaveToVersion"), stringObjName); NDNTime desiredVersion = NDNTime.now(); NDNStringObject so = new NDNStringObject(testName, "First value", SaveType.REPOSITORY, lput); setupNamespace(testName); saveAndLog("SpecifiedVersion", so, desiredVersion, "Time: " + desiredVersion); TestUtils.checkObject(lput, so); Assert.assertEquals("Didn't write correct version", desiredVersion, so.getVersion()); NDNStringObject ro = new NDNStringObject(testName, lget); ro.waitForData(); Assert.assertEquals("Didn't read correct version", desiredVersion, ro.getVersion()); ContentName versionName = ro.getVersionedName(); saveAndLog("UpdatedVersion", so, null, "ReplacementData"); TestUtils.checkObject(lput, so); updateAndLog("UpdatedData", ro, null); Assert.assertTrue( "New version " + so.getVersion() + " should be later than old version " + desiredVersion, (desiredVersion.before(so.getVersion()))); Assert.assertEquals("Didn't read correct version", so.getVersion(), ro.getVersion()); NDNStringObject ro2 = new NDNStringObject(versionName, null); ro2.waitForData(); Assert.assertEquals("Didn't read correct version", desiredVersion, ro2.getVersion()); } finally { lput.close(); lget.close(); KeyManager.closeDefaultKeyManager(); } Log.info(Log.FAC_TEST, "Completed testSaveToVersion"); }
@Test public void testUpdateInBackground() throws Exception { Log.info(Log.FAC_TEST, "Starting testUpdateInBackground"); NDNHandle thandle = NDNHandle.open(); NDNHandle thandle2 = NDNHandle.open(); NDNHandle thandle3 = NDNHandle.open(); try { ContentName testName = new ContentName( testHelper.getTestNamespace("testUpdateInBackground"), stringObjName, "name1"); // Make writer first, so it picks up readers first interests even before it writes. NDNStringObject c2 = new NDNStringObject(testName, (String) null, SaveType.REPOSITORY, thandle); NDNStringObject c0 = new NDNStringObject(testName, (String) null, SaveType.REPOSITORY, thandle2); c0.updateInBackground(); NDNStringObject c1 = new NDNStringObject(testName, (String) null, SaveType.REPOSITORY, thandle3); c1.updateInBackground(true); Assert.assertFalse(c0.available()); Assert.assertFalse(c0.isSaved()); Assert.assertFalse(c1.available()); Assert.assertFalse(c1.isSaved()); NDNTime t1 = saveAndLog("First string", c2, null, "Here is the first string."); TestUtils.checkObject(thandle, c2); Log.info( Log.FAC_TEST, "Saved c2: " + c2.getVersionedName() + " c0 available? " + c0.available() + " c1 available? " + c1.available()); c0.waitForData(); Assert.assertEquals("c0 update", c0.getVersion(), c2.getVersion()); c1.waitForData(); Assert.assertEquals("c1 update", c1.getVersion(), c2.getVersion()); NDNTime t2 = saveAndLog("Second string", c2, null, "Here is the second string."); TestUtils.checkObject(thandle, c2); doWait(c1, t2); Assert.assertEquals("c1 update 2", c1.getVersion(), c2.getVersion()); Assert.assertEquals("c0 unchanged", c0.getVersion(), t1); // Sleep for a while and see how fast the interests come. Should be only 2 interests. Log.info(Log.FAC_TEST, "Sleeping, count background interests."); long time = System.currentTimeMillis(); Thread.sleep(2000); long elapsed = System.currentTimeMillis() - time; long count = (elapsed / 4000) + 1; Log.info( Log.FAC_TEST, "Slept " + elapsed / 1000.0 + " seconds, should have been " + count + " interests."); NDNTime t3 = saveAndLog("Third string", c2, null, "Here is the third string."); TestUtils.checkObject(thandle, c2); doWait(c1, t3); Assert.assertEquals("c1 update 3", c1.getVersion(), c2.getVersion()); Assert.assertEquals("c0 unchanged", c0.getVersion(), t1); c1.cancelInterest(); } finally { thandle.close(); thandle2.close(); thandle3.close(); KeyManager.closeDefaultKeyManager(); } Log.info(Log.FAC_TEST, "Completed testUpdateInBackground"); }