diff --git a/src/ByteSync.Client/Services/Communications/Transfers/Uploading/FileUploadProcessor.cs b/src/ByteSync.Client/Services/Communications/Transfers/Uploading/FileUploadProcessor.cs index 34e0f8b4..eb49194a 100644 --- a/src/ByteSync.Client/Services/Communications/Transfers/Uploading/FileUploadProcessor.cs +++ b/src/ByteSync.Client/Services/Communications/Transfers/Uploading/FileUploadProcessor.cs @@ -45,7 +45,7 @@ public async Task ProcessUpload(SharedFileDefinition sharedFileDefinition, int? _progressState = new UploadProgressState(); // Start upload workers - for (var i = 0; i < 6; i++) + for (var i = 0; i < 2; i++) { _ = Task.Run(() => _fileUploadWorker.UploadAvailableSlicesAsync(_fileUploadCoordinator.AvailableSlices, _progressState)); } @@ -62,7 +62,7 @@ await Task.Run(() => _fileSlicer.SliceAndEncryptAsync(sharedFileDefinition, _pro if (_progressState.LastException != null) { var source = _localFileToUpload ?? "a stream"; - throw new Exception($"An error occured while uploading '{source}' / sharedFileDefinition.Id:{sharedFileDefinition.Id}", + throw new InvalidOperationException($"An error occured while uploading '{source}' / sharedFileDefinition.Id:{sharedFileDefinition.Id}", _progressState.LastException); } diff --git a/src/ByteSync.Client/Services/Encryptions/SlicerEncrypter.cs b/src/ByteSync.Client/Services/Encryptions/SlicerEncrypter.cs index f52d750f..bb3b10eb 100644 --- a/src/ByteSync.Client/Services/Encryptions/SlicerEncrypter.cs +++ b/src/ByteSync.Client/Services/Encryptions/SlicerEncrypter.cs @@ -1,6 +1,6 @@ using System.IO; using System.Security.Cryptography; -using System.Threading.Tasks; +using System.Threading; using ByteSync.Business.Communications.Transfers; using ByteSync.Common.Business.SharedFiles; using ByteSync.Interfaces.Controls.Encryptions; @@ -22,8 +22,7 @@ public SlicerEncrypter(ICloudSessionConnectionRepository cloudSessionConnectionR _logger = logger; BufferSize = 4096; - MaxSliceLength = 64 * 1024 * 1024; // 64 Mo - MaxSliceLength = 4 * 1024 * 1024; // 4 Mo + MaxSliceLength = 1024 * 1024; // 1 Mb } public void Initialize(FileInfo fileToEncrypt, SharedFileDefinition sharedFileDefinition) @@ -83,7 +82,7 @@ public int MaxSliceLength public async Task SliceAndEncrypt() { - CryptoStream? cryptoSteam = null; + CryptoStream? cryptoStream = null; FileUploaderSlice? fileUploaderSlice = null; var bytes = InReader.ReadBytes(BufferSize); @@ -93,19 +92,19 @@ public int MaxSliceLength var canContinue = TotalGeneratedFiles == 0 || readBytes > 0; while (canContinue) { - if (cryptoSteam == null) + if (cryptoStream == null) { TotalGeneratedFiles += 1; var memoryStream = new MemoryStream(); var encryptor = Aes.CreateEncryptor(Aes.Key, Aes.IV); - cryptoSteam = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write, true); + cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write, true); fileUploaderSlice = new FileUploaderSlice(TotalGeneratedFiles, memoryStream); } - - await cryptoSteam.WriteAsync(bytes, 0, readBytes); - + + await cryptoStream.WriteAsync(bytes.AsMemory(0, readBytes), CancellationToken.None); + var sizeToRead = BufferSize; if (thisSessionReadBytes + sizeToRead > MaxSliceLength) { @@ -129,7 +128,7 @@ public int MaxSliceLength } } - cryptoSteam?.Dispose(); + cryptoStream?.Dispose(); return fileUploaderSlice; } @@ -139,5 +138,7 @@ public void Dispose() InStream?.Dispose(); InReader?.Dispose(); Aes?.Dispose(); + + GC.SuppressFinalize(this); } } \ No newline at end of file diff --git a/tests/ByteSync.Client.Tests/Services/Communications/Transfers/Uploading/FileUploadProcessorTests.cs b/tests/ByteSync.Client.Tests/Services/Communications/Transfers/Uploading/FileUploadProcessorTests.cs index b54a1ee5..b6380fdc 100644 --- a/tests/ByteSync.Client.Tests/Services/Communications/Transfers/Uploading/FileUploadProcessorTests.cs +++ b/tests/ByteSync.Client.Tests/Services/Communications/Transfers/Uploading/FileUploadProcessorTests.cs @@ -14,17 +14,17 @@ namespace ByteSync.Tests.Services.Communications.Transfers.Uploading; [TestFixture] public class FileUploadProcessorTests { - private Mock _mockSlicerEncrypter; - private Mock _mockLogger; - private Mock _mockFileUploadCoordinator; - private Mock _mockFileSlicer; - private Mock _mockFileUploadWorker; - private Mock _mockFilePartUploadAsserter; - private SharedFileDefinition _sharedFileDefinition; - private string _testFilePath; - private MemoryStream _testMemoryStream; - private FileUploadProcessor _fileUploadProcessor; - private SemaphoreSlim _semaphoreSlim; + private Mock _mockSlicerEncrypter = null!; + private Mock _mockLogger = null!; + private Mock _mockFileUploadCoordinator = null!; + private Mock _mockFileSlicer = null!; + private Mock _mockFileUploadWorker = null!; + private Mock _mockFilePartUploadAsserter = null!; + private SharedFileDefinition _sharedFileDefinition = null!; + private string _testFilePath = null!; + private MemoryStream _testMemoryStream = null!; + private FileUploadProcessor _fileUploadProcessor = null!; + private SemaphoreSlim _semaphoreSlim = null!; [SetUp] public void SetUp() @@ -116,7 +116,7 @@ public async Task ProcessUpload_ShouldStartUploadWorkers() await _fileUploadProcessor.ProcessUpload(_sharedFileDefinition); // Assert - _mockFileUploadWorker.Verify(x => x.UploadAvailableSlicesAsync(It.IsAny>(), It.IsAny()), Times.Exactly(6)); + _mockFileUploadWorker.Verify(x => x.UploadAvailableSlicesAsync(It.IsAny>(), It.IsAny()), Times.Exactly(2)); } [Test]