예제 #1
0
        public void GetAllFileNamesWhenThereNoFiles()
        {
            var results = FileStreamer.GetAllFileNames("Test", "Test");

            Assert.IsNotNull(results);
            Assert.IsEmpty(results);
        }
예제 #2
0
        public async Task UndeleteWhenFileExists()
        {
            MockFile.Setup(x => x.Exists(Filename + ".deleted")).ReturnsAsync(true);
            await FileStreamer.Undelete(Filename);

            MockFile.Verify(x => x.Move(Filename + ".deleted", Filename), Times.Once);
        }
예제 #3
0
        public async Task UnlockFileWhenThereIsNoLock()
        {
            await FileStreamer.UnlockFile(Filename);

            MockSemaphoreFactory.Verify(x => x.Create(1, 1), Times.Never);
            MockSemaphore.Verify(x => x.Release(), Times.Never);
        }
예제 #4
0
        public async Task <AuditLog> ReadAllEvents <TDataType>(int id) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} for {DataType} with id ({id})", nameof(FileAuditWorker),
                                      "reading all events", typeof(TDataType).Name, id))
            {
                var filename = GetFileName <TDataType>(id);
                if (!await FileStreamer.Exists(filename))
                {
                    return(null);
                }
                var maxAttempts = MaxAttempts <TDataType>();
                _logger.LogTrace("Will try to write to {filename} {MaxAttempts} times", filename,
                                 maxAttempts >= 0 ? maxAttempts.ToString() : "until success");
                var attempts = 0;
                while (maxAttempts == -1 || attempts < maxAttempts)
                {
                    attempts++;
                    _logger.LogTrace("Attempt number {Attempt}", attempts);
                    if (await FileStreamer.GetLockForFile(filename))
                    {
                        try
                        {
                            var audit = await FileStreamer.ReadDataFromStream <AuditLog>(filename);

                            _logger.LogInformation("Read audit from disk");
                            return(audit);
                        }
                        catch (Exception exception)
                        {
                            _logger.LogWarning(exception, "Failed to read audit");
                        }
                    }
예제 #5
0
        public async Task <bool> Commit <TDataType>(int id) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(FileDataWorker),
                                      "commiting data", typeof(TDataType).Name, id))
            {
                var filename    = GetFileName <TDataType>(id);
                var maxAttempts = MaxAttempts <TDataType>();
                _logger.LogTrace("Will try to write to {filename} {MaxAttempts} times", filename, maxAttempts);
                var attempts = 0;
                while (attempts < maxAttempts)
                {
                    attempts++;
                    _logger.LogTrace("Attempt number {Attempt}", attempts);
                    try
                    {
                        if (await FileStreamer.CloseStream(filename))
                        {
                            _logger.LogInformation("Closed the file and committed the data to disk");
                            await FileStreamer.UnlockFile(filename);

                            return(true);
                        }
                    }
                    catch (Exception exception)
                    {
                        _logger.LogWarning(exception, "Failed to commit data to disk as an error happened");
                    }
                }

                _logger.LogError("Failed to commit data to disk");
                await DiscardChanges <TDataType>(id);

                return(false);
            }
        }
예제 #6
0
        public async Task <bool> GetLockForFileWaitSuccess()
        {
            var result = FileStreamer.GetLockForFile(Filename);

            MockSemaphoreFactory.Verify(x => x.Create(1, 1), Times.Once);
            return(await result);
        }
예제 #7
0
 public async Task <TDataType> Read <TDataType>(int id) where TDataType : DataEntity
 {
     using (_logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(FileDataWorker),
                               "reading", typeof(TDataType).Name, id))
     {
         var filename    = GetFileName <TDataType>(id);
         var maxAttempts = MaxAttempts <TDataType>();
         _logger.LogTrace("Will try to read from {filename} {MaxAttempts} times", filename, maxAttempts);
         var attempts = 0;
         while (attempts < maxAttempts)
         {
             attempts++;
             _logger.LogTrace("Attempt number {Attempt}", attempts);
             if (await FileStreamer.GetLockForFile(filename))
             {
                 try
                 {
                     _logger.LogTrace("Got lock on file");
                     return(await FileStreamer.ReadDataFromStream <TDataType>(filename));
                 }
                 catch (Exception exception)
                 {
                     _logger.LogWarning(exception, "Failed to read data as an error happened");
                 }
             }
예제 #8
0
        static void Main(string[] args)
        {
            var path      = Directory.GetCurrentDirectory();
            var pathInput = $"{path}\\Input.txt";

            var fs = new FileStreamer();
            var conferenceTalkList = fs.FileReader(pathInput);

            var converter = new Converter();
            var conferenceActivityList = new List <Activity>();

            conferenceActivityList = converter.ConvertToActivityListFrom(conferenceTalkList);

            var orderList = new List <Activity>();

            orderList = converter.GetOrderedActivityListFrom(conferenceActivityList);

            var scheduler  = new Scheduler();
            var tracksList = new List <Track>();

            tracksList = scheduler.CreateTracksListFrom(orderList);

            foreach (var track in tracksList)
            {
                track.ActivityList = converter.GetOrderedDateTimeListFrom(track.ActivityList);
            }

            var pathOutput = $"{path}\\Output.txt";

            fs.FileWriter(tracksList, pathOutput);
        }
예제 #9
0
 public async Task <bool> ExistsWhenItDoesNotExist()
 {
     MockFile
     .Setup(x => x.Exists(Filename))
     .ReturnsAsync(false);
     return(await FileStreamer.Exists(Filename));
 }
예제 #10
0
        public async Task ReadDataFromStreamMultipleTimes()
        {
            await FileStreamer.ReadDataFromStream <BasicData>(Filename);

            Assert.AreSame(Data, await FileStreamer.ReadDataFromStream <BasicData>(Filename));
            MockFile.Verify(x => x.OpenRead(Filename), Times.Exactly(2));
            MockMessagePackSerializer.Verify(x => x.Deserialize <BasicData>(ReadStream), Times.Exactly(2));
        }
예제 #11
0
 public async Task ReadDataFromStreamNewStreamNeeded()
 {
     Assert.AreSame(Data, await FileStreamer.ReadDataFromStream <BasicData>(Filename));
     MockFile.Verify(x => x.OpenRead(Filename), Times.Once);
     MockReadStream.Verify(x => x.Close(), Times.Once);
     MockReadStream.Verify(x => x.Dispose(), Times.Once);
     MockMessagePackSerializer.Verify(x => x.Deserialize <BasicData>(ReadStream), Times.Once);
 }
예제 #12
0
        public async Task <bool> WriteDataToStreamNewStreamNeeded()
        {
            var result = FileStreamer.WriteDataToStream(Filename, Data);

            MockFile.Verify(x => x.OpenWrite(Filename), Times.Once);
            MockMessagePackSerializer.Verify(x => x.Serialize(WriteStream, Data), Times.Once);
            return(await result);
        }
예제 #13
0
 public Task <bool> IndexExist <TDataType>(string indexName) where TDataType : DataEntity
 {
     using (_logger.BeginScope("{Operation} is {Action} {IndexName} for {DataType}", nameof(FileIndexWorker),
                               "checking existence of", indexName, typeof(TDataType).Name))
     {
         return(FileStreamer.Exists(GetFileName <TDataType>(indexName)));
     }
 }
예제 #14
0
        private void ReadFile()
        {
            var fs = new FileStreamer(Directory, WordFilename);

            WordList = fs.ReadByLine();

            fs.FileName = LookUpFilename;
            LookUpText  = fs.ReadAllText();
        }
예제 #15
0
        public async Task <bool> GetLockForFileWaitFails()
        {
            MockSemaphore
            .Setup(x => x.Wait(It.Is <TimeSpan>(y => Math.Abs(y.TotalMinutes - 1) < 1)))
            .Returns(false);
            var result = FileStreamer.GetLockForFile(Filename);

            MockSemaphoreFactory.Verify(x => x.Create(1, 1), Times.Once);
            return(await result);
        }
예제 #16
0
        public async Task <bool> WriteDataToStreamMultipleTimes()
        {
            await FileStreamer.WriteDataToStream(Filename, Data);

            var result = FileStreamer.WriteDataToStream(Filename, Data);

            MockFile.Verify(x => x.OpenWrite(Filename), Times.Once);
            MockMessagePackSerializer.Verify(x => x.Serialize(WriteStream, Data), Times.Exactly(2));
            return(await result);
        }
예제 #17
0
        public async Task <bool> CloseStreamWhenThereIsNoStream()
        {
            var result = FileStreamer.CloseStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockReadStream
            .Verify(x => x.Close(), Times.Never);
            return(await result);
        }
예제 #18
0
        public async Task UnlockFileWhenThereIsALockMultipleTimes()
        {
            await FileStreamer.GetLockForFile(Filename);

            await FileStreamer.UnlockFile(Filename);

            await FileStreamer.UnlockFile(Filename);

            MockSemaphoreFactory.Verify(x => x.Create(1, 1), Times.Once);
            MockSemaphore.Verify(x => x.Release(), Times.Exactly(2));
        }
예제 #19
0
        public async Task DisposeOfStreamWhenThereIsNoStream()
        {
            await FileStreamer.DisposeOfStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Never);
            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Never);
        }
예제 #20
0
        public async Task DiscardEvents <TDataType>(TDataType data) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} for {DataType}", nameof(FileAuditWorker),
                                      "discarded events", typeof(TDataType).Name))
            {
                var filename = GetFileName <TDataType>(data.Id);
                _logger.LogTrace("Discarding changes for {filename}", filename);
                await FileStreamer.DisposeOfStream(filename);

                await FileStreamer.UnlockFile(filename);

                _logger.LogInformation("Discarded changes for {filename}", filename);
            }
        }
예제 #21
0
        public async Task DiscardChanges <TDataType>(int id) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} {DataType} with Id ({Id})", nameof(FileDataWorker),
                                      "discarding changes", typeof(TDataType).Name, id))
            {
                var filename = GetFileName <TDataType>(id);
                _logger.LogTrace("Discarding changes to file {filename}", filename);
                await FileStreamer.DisposeOfStream(filename);

                await FileStreamer.UnlockFile(filename);

                _logger.LogInformation("Discarded changes to file");
            }
        }
예제 #22
0
        public async Task DisposeOfStreamWhenThereIsAReadStream()
        {
            await FileStreamer.ReadDataFromStream <BasicData>(Filename);

            await FileStreamer.DisposeOfStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockWriteStream
            .Verify(x => x.Dispose(), Times.Never);
            MockReadStream
            .Verify(x => x.Close(), Times.Once);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Once);
        }
예제 #23
0
        public async Task <bool> CloseStreamWhenThereIsAWriteStream()
        {
            await FileStreamer.WriteDataToStream(Filename, Data);

            var result = FileStreamer.CloseStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Once);
            MockWriteStream
            .Verify(x => x.Dispose(), Times.Once);
            MockReadStream
            .Verify(x => x.Close(), Times.Never);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Never);
            return(await result);
        }
예제 #24
0
        public void Setup()
        {
            Filename    = Randomizer.CreateRandomizer().GetString();
            Data        = new BasicData();
            WriteStream = new MemoryStream();
            ReadStream  = new MemoryStream();

            MockWriteStream = new Mock <IStream>();
            MockWriteStream
            .Setup(x => x.GetStream())
            .Returns(WriteStream);
            MockReadStream = new Mock <IStream>();
            MockReadStream
            .Setup(x => x.GetStream())
            .Returns(ReadStream);

            MockMessagePackSerializer = new Mock <IMessagePackSerializer>();
            MockMessagePackSerializer
            .Setup(x => x.Deserialize <BasicData>(ReadStream))
            .ReturnsAsync(Data);

            MockFile = new Mock <IFile>();
            MockFile
            .Setup(x => x.OpenWrite(Filename))
            .ReturnsAsync(MockWriteStream.Object);
            MockFile
            .Setup(x => x.OpenRead(Filename))
            .ReturnsAsync(MockReadStream.Object);
            MockFile
            .Setup(x => x.Exists(Filename))
            .ReturnsAsync(true);

            MockSemaphore = new Mock <ISemaphore>();
            MockSemaphore
            .Setup(x => x.Wait(It.Is <TimeSpan>(y => Math.Abs(y.TotalMinutes - 1.0) < 1)))
            .Returns(true);

            MockSemaphoreFactory = new Mock <ISemaphoreFactory>();
            MockSemaphoreFactory
            .Setup(x => x.Create(1, 1))
            .Returns(MockSemaphore.Object);

            MockDirectory = new Mock <IDirectory>();

            FileStreamer = new FileStreamer(MockMessagePackSerializer.Object, MockFile.Object,
                                            MockSemaphoreFactory.Object, MockDirectory.Object);
        }
예제 #25
0
        public async Task DisposeOfStreamWhenThereIsAWriteStreamIsAlreadyDisposed()
        {
            await FileStreamer.WriteDataToStream(Filename, Data);

            await FileStreamer.DisposeOfStream(Filename);

            await FileStreamer.DisposeOfStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockWriteStream
            .Verify(x => x.Dispose(), Times.Once);
            MockReadStream
            .Verify(x => x.Close(), Times.Never);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Never);
        }
예제 #26
0
        public async Task <bool> CloseStreamWhenThereIsAReadStreamIsAlreadyClosed()
        {
            await FileStreamer.ReadDataFromStream <BasicData>(Filename);

            await FileStreamer.CloseStream(Filename);

            var result = FileStreamer.CloseStream(Filename);

            MockWriteStream
            .Verify(x => x.Close(), Times.Never);
            MockWriteStream
            .Verify(x => x.Dispose(), Times.Never);
            MockReadStream
            .Verify(x => x.Close(), Times.Once);
            MockReadStream
            .Verify(x => x.Dispose(), Times.Once);
            return(await result);
        }
예제 #27
0
        /// <summary>
        /// Load list of user from file
        /// </summary>
        /// <param name="file">path to file</param>
        public void LoadUsers(string file)
        {
            try
            {
                List <User> tmp = FileStreamer <User> .BinLoad(file);

                if (tmp != null)
                {
                    _users = tmp;
                }
            }
            catch (Exception e)
            {
                FileStreamer <User> .CreateFile(file);

                Console.Out.WriteLine(e);
            }
        }
예제 #28
0
        public void GetAllFileNamesWhenAreFiles()
        {
            MockDirectory
            .Setup(x => x.GetFiles("Test", "Test"))
            .Returns(new List <string>
            {
                "Test1",
                "Test\\Test2",
                "Test\\Test3.Test"
            }.ToArray());
            var results = FileStreamer.GetAllFileNames("Test", "Test");

            Assert.IsNotNull(results);
            Assert.IsNotEmpty(results);
            Assert.AreEqual(3, results.Count());
            Assert.AreEqual("Test1", results[0]);
            Assert.AreEqual("Test2", results[1]);
            Assert.AreEqual("Test3", results[2]);
        }
예제 #29
0
        public async IAsyncEnumerable <IndexKey <TKeyType> > GetKeysFromIndex <TDataType, TKeyType>(string indexName) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} {IndexName} for {DataType}}",
                                      nameof(FileIndexWorker), "getting keys from index", indexName, typeof(TDataType).Name))
            {
                var index = await FileStreamer.ReadDataFromStream <Index <TKeyType> >(GetFileName <TDataType>(indexName));

                var keys = index.Keys;
                if (keys == null)
                {
                    _logger.LogWarning("The index doesn't have the keys");
                    yield break;
                }

                foreach (var key in keys)
                {
                    _logger.LogInformation("Returning {KeyValue}", key.Value, key);
                    yield return(key);
                }
            }
        }
예제 #30
0
        public async Task <bool> CommitEvents <TDataType>(TDataType data) where TDataType : DataEntity
        {
            using (_logger.BeginScope("{Operation} is {Action} for {DataType}", nameof(FileAuditWorker),
                                      "committing events", typeof(TDataType).Name))
            {
                var filename    = GetFileName <TDataType>(data.Id);
                var maxAttempts = MaxAttempts <TDataType>();
                _logger.LogTrace("Will try to write to {filename} {MaxAttempts} times", filename,
                                 maxAttempts >= 0 ? maxAttempts.ToString() : "until success");
                var attempts = 0;
                while (maxAttempts == -1 || attempts < maxAttempts)
                {
                    attempts++;
                    _logger.LogTrace("Attempt number {Attempt}", attempts);
                    try
                    {
                        _logger.LogTrace("Closing audit file");
                        if (await FileStreamer.CloseStream(filename))
                        {
                            _logger.LogTrace("Closed audit file");
                            await FileStreamer.UnlockFile(filename);

                            _logger.LogInformation("Committed audit to file");
                            return(true);
                        }

                        _logger.LogWarning("Failed to close audit file");
                    }
                    catch (Exception exception)
                    {
                        _logger.LogWarning(exception, "Failed to commit audit");
                    }
                }

                await DiscardEvents(data);

                _logger.LogWarning("Discarded events after max attempts trying to commit audit");
                return(false);
            }
        }
예제 #31
0
 public FileContentResult DownloadDemoClip(string clipId)
 {
     IMyMentorRepository repository = new ParseRepository(new WebCacheProvider(HttpContext.ApplicationInstance.Context));
     var clipUrl =  repository.FindDemoClipURI(clipId);
     var streamer = new FileStreamer(HttpContext);
     
     var stream = streamer.GetTempFileUrl(clipUrl);
     return File(stream, "audio/mpeg3");
 }