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());

            Assert.That(messageBodyMock.Object.DataFile, Is.SameAs(sut));
        }
Exemplo n.º 2
0
        internal override void Lock(MessageBody messageBody)
        {
            if (_logger.IsDebugEnabled)
            {
                _logger.DebugFormat("Locking {0}.", 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
                                ? (DataFile)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);

            Assert.That(messageBodyMock.Object.DataFile, Is.TypeOf <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);

            Assert.That(messageBodyMock.Object.DataFile, Is.SameAs(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);

            Assert.That(messageBodyMock.Object.DataFile, Is.TypeOf <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);

            Assert.That(messageBodyMock.Object.DataFile, Is.TypeOf <GatheredDataFile>());
            Assert.That(messageBodyMock.Object.DataFile, Is.Not.SameAs(sut));
            Assert.That(sut.Path.Tokenize().LockTime < messageBodyMock.Object.DataFile.Path.Tokenize().LockTime);
        }
        internal override void Gather(MessageBody messageBody, string gatheringDirectory)
        {
            if (gatheringDirectory.IsNullOrEmpty())
            {
                throw new ArgumentNullException("gatheringDirectory");
            }

            if (_logger.IsDebugEnabled)
            {
                _logger.DebugFormat("Gathering {0}.", 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
                                ? (DataFile)gatheredDataFile
                                : new AwaitingRetryDataFile(this);
        }