public void GatherDoesNotTransitionToNewState() { var sut = new GatheredDataFile("201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"); var messageBodyMock = new Mock <MessageBody>(sut); messageBodyMock.SetupAllProperties(); sut.Gather(messageBodyMock.Object, Path.GetTempPath()); messageBodyMock.Object.DataFile.Should().BeSameAs(sut); }
internal override void Lock(MessageBody messageBody) { if (_logger.IsDebugEnabled) { _logger.Debug($"Locking {this}."); } // take a new lock ---update timestamp while staying in gathered state--- so that this agent instance get // exclusive ownership of the data file should there be another remote agent instance working concurrently var gatheredDataFile = new GatheredDataFile(this); var result = DataFileServant.Instance.TryMoveFile(Path, gatheredDataFile.Path); messageBody.DataFile = result ? gatheredDataFile : new AwaitingRetryDataFile(this); }
public void UnlockTransitionsToAwaitingRetryDataFileWhenOperationFails() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); servantMock.Setup(s => s.TryDeleteFile(filePath)).Returns(false); sut.Unlock(messageBodyMock.Object); messageBodyMock.Object.DataFile.Should().BeOfType <AwaitingRetryDataFile>(); }
public void UnlockDoesNotTransitionToNewStateWhenOperationSucceeds() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); servantMock.Setup(s => s.TryDeleteFile(filePath)).Returns(true); sut.Unlock(messageBodyMock.Object); messageBodyMock.Object.DataFile.Should().BeSameAs(sut); }
public void UnlockDeletesDataFile() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); servantMock.Setup(s => s.TryDeleteFile(filePath)).Returns(true).Verifiable(); sut.Unlock(messageBodyMock.Object); servantMock.VerifyAll(); }
public void ReleaseRenamesDataFileAndReleaseClaimTokenFromDatabase() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); servantMock.Setup(s => s.TryReleaseToken(sut.ClaimStoreRelativePath)).Returns(true).Verifiable(); servantMock.Setup(s => s.TryMoveFile(filePath, It.Is <string>(path => path.Tokenize().State == ReleasedDataFile.STATE_TOKEN))).Returns(true).Verifiable(); sut.Release(messageBodyMock.Object); servantMock.VerifyAll(); }
public void ReleaseTransitionsToAwaitingRetryDataFileWhenOperationFails() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); messageBodyMock.SetupAllProperties(); servantMock.Setup(s => s.TryReleaseToken(sut.ClaimStoreRelativePath)).Returns(true); servantMock.Setup(s => s.TryMoveFile(filePath, It.IsAny <string>())).Returns(false); sut.Release(messageBodyMock.Object); messageBodyMock.Object.DataFile.Should().BeOfType <AwaitingRetryDataFile>(); }
public void LockTransitionsToNewGatheredDataFileWhenOperationSucceeds() { var servantMock = new Mock <DataFileServant>(); DataFileServant.Instance = servantMock.Object; const string filePath = "201306158F341A2D6FD7416B87073A0132DD51AE.chk.20150627111406.gathered"; var sut = new GatheredDataFile(filePath); var messageBodyMock = new Mock <MessageBody>(sut); messageBodyMock.SetupAllProperties(); servantMock.Setup(s => s.TryMoveFile(filePath, It.IsAny <string>())).Returns(true); sut.Lock(messageBodyMock.Object); messageBodyMock.Object.DataFile.Should().BeOfType <GatheredDataFile>(); messageBodyMock.Object.DataFile.Should().NotBeSameAs(sut); (sut.Path.Tokenize().LockTime < messageBodyMock.Object.DataFile.Path.Tokenize().LockTime).Should().BeTrue(); }
internal override void Gather(MessageBody messageBody, string gatheringDirectory) { if (gatheringDirectory.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(gatheringDirectory)); } if (_logger.IsDebugEnabled) { _logger.Debug($"Gathering {this}."); } var claimStoreAbsolutePath = System.IO.Path.Combine(gatheringDirectory, ClaimStoreRelativePath); var gatheredDataFile = new GatheredDataFile(this); // message body is not moved but copied to central claim store; it will be deleted only after it has been // successfully gathered and released var result = DataFileServant.Instance.TryCreateDirectory(claimStoreAbsolutePath) && DataFileServant.Instance.TryCopyFile(Path, claimStoreAbsolutePath) && DataFileServant.Instance.TryMoveFile(Path, gatheredDataFile.Path); messageBody.DataFile = result ? gatheredDataFile : new AwaitingRetryDataFile(this); }