public void WriteLockReturnsFalseIfUnknownException() { var fileSystem = Substitute.For <ICalamariFileSystem>(); var lockFilePath = "fake path"; var lockIo = new LockIo(fileSystem); fileSystem.FileExists(lockFilePath).Returns(true); fileSystem.OpenFileExclusively(lockFilePath, Arg.Any <FileMode>(), Arg.Any <FileAccess>()) .Returns(x => { throw new Exception("Unknown exception"); }); var currentProcess = System.Diagnostics.Process.GetCurrentProcess(); var result = lockIo.WriteLock(lockFilePath, new FileLock(currentProcess.Id, currentProcess.ProcessName, Thread.CurrentThread.ManagedThreadId, 636114372739676700)); Assert.That(result, Is.False); }
public void WriteLockDoesNotOverwriteLockFileIfItsIdenticalToWhatWeAreWantingToWrite() { var fileSystem = Substitute.For <ICalamariFileSystem>(); var lockFilePath = "fake path"; var lockIo = new LockIo(fileSystem); fileSystem.FileExists(lockFilePath).Returns(true); var currentProcess = System.Diagnostics.Process.GetCurrentProcess(); var fileContent = $"{{\"__type\":\"FileLock:#Calamari.Integration.Processes.Semaphores\",\"ProcessId\":{currentProcess.Id},\"ProcessName\":\"{currentProcess.ProcessName}\",\"ThreadId\":{Thread.CurrentThread.ManagedThreadId},\"Timestamp\":636114372739676700}}"; fileSystem.OpenFileExclusively(lockFilePath, FileMode.Open, FileAccess.Read) .Returns(x => new MemoryStream(Encoding.UTF8.GetBytes(fileContent))); var lockFile = lockIo.ReadLock(lockFilePath); lockIo.WriteLock(lockFilePath, lockFile); }
public void WriteLockDeletesLockIfUnableToDeserialise() { var fileSystem = Substitute.For <ICalamariFileSystem>(); var lockFilePath = "fake path"; var lockIo = new LockIo(fileSystem); fileSystem.FileExists(lockFilePath).Returns(true); var currentProcess = System.Diagnostics.Process.GetCurrentProcess(); var expectedFileContent = $"{{\"__type\":\"FileLock:#Calamari.Integration.Processes.Semaphores\",\"ProcessId\":{currentProcess.Id},\"ProcessName\":\"{currentProcess.ProcessName}\",\"ThreadId\":{Thread.CurrentThread.ManagedThreadId},\"Timestamp\":636114372739676700}}"; fileSystem.OpenFileExclusively(lockFilePath, FileMode.Open, FileAccess.Read) .Returns(x => new MemoryStream(Encoding.UTF8.GetBytes("non deserialisable content")), x => new MemoryStream(Encoding.UTF8.GetBytes(expectedFileContent))); fileSystem.OpenFileExclusively(lockFilePath, FileMode.CreateNew, FileAccess.Write) .Returns(x => new MemoryStream()); var result = lockIo.WriteLock(lockFilePath, new FileLock(currentProcess.Id, currentProcess.ProcessName, Thread.CurrentThread.ManagedThreadId, 636114372739676700)); fileSystem.Received().DeleteFile(lockFilePath); Assert.That(result, Is.True); }
public void WriteLockOverwritesLockFileIfTimestampIsDifferent() { var fileSystem = Substitute.For <ICalamariFileSystem>(); var lockFilePath = "fake path"; var lockIo = new LockIo(fileSystem); fileSystem.FileExists(lockFilePath).Returns(true); var currentProcess = System.Diagnostics.Process.GetCurrentProcess(); var fileContent = $"{{\"__type\":\"FileLock:#Calamari.Integration.Processes.Semaphores\",\"ProcessId\":{currentProcess.Id},\"ProcessName\":\"{currentProcess.ProcessName}\",\"ThreadId\":{Thread.CurrentThread.ManagedThreadId},\"Timestamp\":636114372739676700}}"; fileSystem.OpenFileExclusively(lockFilePath, FileMode.Open, FileAccess.Read) .Returns(x => new MemoryStream(Encoding.UTF8.GetBytes(fileContent))); var lockFile = (FileLock)lockIo.ReadLock(lockFilePath); lockFile.Timestamp = lockFile.Timestamp + 1; fileSystem.OpenFileExclusively(lockFilePath, FileMode.Create, FileAccess.Write) .Returns(x => new MemoryStream()); var result = lockIo.WriteLock(lockFilePath, lockFile); Assert.That(result, Is.True); }