public void SharedLock_RefreshLock_Missing() { var node = CreateTestFolder(); var nodeId = node.Id; var lockValue = "LCK_" + Guid.NewGuid(); // ACTION SharedLock.RefreshLock(nodeId, lockValue); }
private async Task <WopiResponse> ProcessLockRequestAsync(LockRequest wopiRequest, CancellationToken cancellationToken) { if (!int.TryParse(wopiRequest.FileId, out var contentId)) { return new WopiResponse { StatusCode = HttpStatusCode.NotFound } } ; if (!(await Node.LoadNodeAsync(contentId, cancellationToken).ConfigureAwait(false) is File file)) { return new WopiResponse { StatusCode = HttpStatusCode.NotFound } } ; var existingLock = SharedLock.GetLock(file.Id, CancellationToken.None); if (existingLock == null) { if (!file.Locked) { SharedLock.Lock(file.Id, wopiRequest.Lock, CancellationToken.None); return(new WopiResponse { StatusCode = HttpStatusCode.OK }); } return(new WopiResponse { StatusCode = HttpStatusCode.Conflict, Headers = new Dictionary <string, string> { { WopiHeader.Lock, "" }, { WopiHeader.LockFailureReason, "CheckedOut" } } }); } if (existingLock != wopiRequest.Lock) { return(new WopiResponse { StatusCode = HttpStatusCode.Conflict, Headers = new Dictionary <string, string> { { WopiHeader.Lock, existingLock }, { WopiHeader.LockFailureReason, "LockedByAnother" } } }); } SharedLock.RefreshLock(contentId, existingLock, CancellationToken.None); return(new WopiResponse { StatusCode = HttpStatusCode.OK }); }
private WopiResponse ProcessLockRequest(LockRequest wopiReq) { if (!int.TryParse(wopiReq.FileId, out var contentId)) { return new WopiResponse { StatusCode = HttpStatusCode.NotFound } } ; if (!(Node.LoadNode(contentId) is File file)) { return new WopiResponse { StatusCode = HttpStatusCode.NotFound } } ; var existingLock = SharedLock.GetLock(file.Id); if (existingLock == null) { if (!file.Locked) { SharedLock.Lock(file.Id, wopiReq.Lock); return(new WopiResponse { StatusCode = HttpStatusCode.OK }); } return(new WopiResponse { StatusCode = HttpStatusCode.Conflict, Headers = new Dictionary <string, string> { { WopiHeader.Lock, "" }, { WopiHeader.LockFailureReason, "CheckedOut" } } }); } if (existingLock != wopiReq.Lock) { return(new WopiResponse { StatusCode = HttpStatusCode.Conflict, Headers = new Dictionary <string, string> { { WopiHeader.Lock, existingLock }, { WopiHeader.LockFailureReason, "LockedByAnother" } } }); } SharedLock.RefreshLock(contentId, existingLock); return(new WopiResponse { StatusCode = HttpStatusCode.OK }); }
public void SharedLock_RefreshLock_TimedOut() { var node = CreateTestFolder(); var nodeId = node.Id; var lockValue = Guid.NewGuid().ToString(); SharedLock.Lock(nodeId, lockValue); SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddHours(-1.0d)); // ACTION SharedLock.RefreshLock(nodeId, lockValue); }
public void SharedLock_RefreshLock_Different() { var node = CreaeTestContent(); var nodeId = node.Id; var lockValue = "LCK_" + Guid.NewGuid(); SharedLock.Lock(nodeId, lockValue); // ACTION var actualLock = SharedLock.RefreshLock(nodeId, "DifferentLock"); Assert.AreEqual(lockValue, actualLock); }
public void SharedLock_RefreshLock_Different() { var node = CreateTestFolder(); var nodeId = node.Id; var lockValue = "LCK_" + Guid.NewGuid(); SharedLock.Lock(nodeId, lockValue, CancellationToken.None); // ACTION var actualLock = SharedLock.RefreshLock(nodeId, "DifferentLock", CancellationToken.None); Assert.AreEqual(lockValue, actualLock); }
public void SharedLock_RefreshLock() { var node = CreaeTestContent(); var nodeId = node.Id; var lockValue = "LCK_" + Guid.NewGuid(); SharedLock.Lock(nodeId, lockValue); SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddMinutes(-10.0d)); // ACTION SharedLock.RefreshLock(nodeId, lockValue); Assert.IsTrue((DateTime.UtcNow - GetSharedLockCreationDate(nodeId)).TotalSeconds < 1); }