// simulate "user request" by adding IP address to requests
shadowRequest.getRequestContext().put(AccessManager.REQUEST_REMOTE_ADDRESS, "127.0.0.1");
masterRequest.getRequestContext().put(AccessManager.REQUEST_REMOTE_ADDRESS, "127.0.0.1");
StorageItem shadowItem = shadowRepository.retrieveItem(shadowRequest);
assertTrue("Shadow MUST return a link", StorageLinkItem.class.isAssignableFrom(shadowItem.getClass()));
StorageItem masterItem = masterRepository.retrieveItem(masterRequest);
assertTrue("Master MUST NOT return a link", !StorageLinkItem.class.isAssignableFrom(masterItem.getClass()));
// produce a lastRequest timestamp to now less 10 days
long lastRequest = System.currentTimeMillis() - 10 * A_DAY;
// now set the lastRequest stamp programatically to both items to this "old" timestamp
shadowRepository.getAttributesHandler().touchItemLastRequested(lastRequest, shadowItem);
masterRepository.getAttributesHandler().touchItemLastRequested(lastRequest, masterItem);
// now request the object, the lastRequested timestamp should be updated
shadowItem = shadowRepository.retrieveItem(shadowRequest);
assertTrue("Shadow MUST return a link", StorageLinkItem.class.isAssignableFrom(shadowItem.getClass()));
// verify that shadow item lastRequested is updated, but master is still untouched
// the attribute load will give us items without UIDs!
Attributes shadowItem1 =
shadowRepository.getAttributesHandler().getAttributeStorage().getAttributes(
shadowRepository.createUid(shadowPath));
Assert.assertTrue("Shadow must have updated lastRequested field!",
shadowItem1.getLastRequested() > lastRequest);
// verify that shadow item lastRequested is updated, but master is still untouched
// the attribute load will give us items without UIDs!
Attributes masterItem1 =
masterRepository.getAttributesHandler().getAttributeStorage().getAttributes(
masterRepository.createUid(masterPath));
Assert.assertTrue("Master must have untouched lastRequested field!",
masterItem1.getLastRequested() == lastRequest);
// now dereference the link
masterItem = getRootRouter().dereferenceLink((StorageLinkItem) shadowItem);
assertTrue("Dereferenced item MUST NOT return a link", !StorageLinkItem.class.isAssignableFrom(masterItem
.getClass()));
// remember the lastRequests
long shadowLastRequested = shadowItem.getLastRequested();
long masterLastRequested = masterItem.getLastRequested();
// verify that lastRequested is maintained (is updated to now)
Assert.assertTrue("Shadow lastRequested have to be updated", shadowLastRequested > lastRequest);
Assert.assertTrue("Master lastRequested have to be updated", masterLastRequested > lastRequest);