Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ internal class BufferedMultipartStream : Stream
{
private readonly IDownloadManager _downloadCoordinator;
private readonly IPartBufferManager _partBufferManager;
private readonly BufferedDownloadConfiguration _config;

private bool _initialized = false;
private bool _disposed = false;
Expand All @@ -59,12 +58,10 @@ internal class BufferedMultipartStream : Stream
/// </summary>
/// <param name="downloadCoordinator"><see cref="IDownloadManager"/> that coordinates download discovery and orchestration.</param>
/// <param name="partBufferManager"><see cref="IPartBufferManager"/> that manages part buffer lifecycle and synchronization.</param>
/// <param name="config"><see cref="BufferedDownloadConfiguration"/> with settings for the stream.</param>
public BufferedMultipartStream(IDownloadManager downloadCoordinator, IPartBufferManager partBufferManager, BufferedDownloadConfiguration config)
public BufferedMultipartStream(IDownloadManager downloadCoordinator, IPartBufferManager partBufferManager)
{
_downloadCoordinator = downloadCoordinator ?? throw new ArgumentNullException(nameof(downloadCoordinator));
_partBufferManager = partBufferManager ?? throw new ArgumentNullException(nameof(partBufferManager));
_config = config ?? throw new ArgumentNullException(nameof(config));
}

/// <summary>
Expand Down Expand Up @@ -96,7 +93,7 @@ public static BufferedMultipartStream Create(IAmazonS3 s3Client, TransferUtility
var dataHandler = new BufferedPartDataHandler(partBufferManager, config);
var downloadCoordinator = new MultipartDownloadManager(s3Client, request, config, dataHandler, requestEventHandler);

return new BufferedMultipartStream(downloadCoordinator, partBufferManager, config);
return new BufferedMultipartStream(downloadCoordinator, partBufferManager);
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void Setup()

private BufferedMultipartStream CreateStream()
{
return new BufferedMultipartStream(_mockCoordinator.Object, _mockBufferManager.Object, _config);
return new BufferedMultipartStream(_mockCoordinator.Object, _mockBufferManager.Object);
}

private async Task<BufferedMultipartStream> CreateInitializedStreamAsync(
Expand Down Expand Up @@ -99,20 +99,18 @@ public void Constructor_WithValidDependencies_CreatesStream()
}

[DataTestMethod]
[DataRow(null, "bufferManager", "config", DisplayName = "Null Coordinator")]
[DataRow("coordinator", null, "config", DisplayName = "Null Buffer Manager")]
[DataRow("coordinator", "bufferManager", null, DisplayName = "Null Config")]
[DataRow(null, "bufferManager", DisplayName = "Null Coordinator")]
[DataRow("coordinator", null, DisplayName = "Null Buffer Manager")]
[ExpectedException(typeof(ArgumentNullException))]
public void Constructor_WithNullParameter_ThrowsArgumentNullException(
string coordinatorKey, string bufferManagerKey, string configKey)
string coordinatorKey, string bufferManagerKey)
{
// Arrange
var coordinator = coordinatorKey != null ? _mockCoordinator.Object : null;
var bufferManager = bufferManagerKey != null ? _mockBufferManager.Object : null;
var config = configKey != null ? _config : null;

// Act
var stream = new BufferedMultipartStream(coordinator, bufferManager, config);
var stream = new BufferedMultipartStream(coordinator, bufferManager);
}

#endregion
Expand Down Expand Up @@ -173,8 +171,7 @@ public async Task InitializeAsync_SinglePart_UsesSinglePartHandler()
.ReturnsAsync(discoveryResult);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand Down Expand Up @@ -203,8 +200,7 @@ public async Task InitializeAsync_SinglePart_CallsStartDownloads()
.Returns(Task.CompletedTask);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand Down Expand Up @@ -237,8 +233,7 @@ public async Task InitializeAsync_Multipart_UsesMultipartHandler()
.Returns(Task.CompletedTask);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand All @@ -265,8 +260,7 @@ public async Task InitializeAsync_Multipart_StartsDownloads()
.Returns(Task.CompletedTask);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand Down Expand Up @@ -297,8 +291,7 @@ public async Task InitializeAsync_SetsDiscoveryResult()
.ReturnsAsync(discoveryResult);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand Down Expand Up @@ -326,8 +319,7 @@ public async Task InitializeAsync_CalledTwice_ThrowsInvalidOperationException()
.ReturnsAsync(discoveryResult);

var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

// Act
await stream.InitializeAsync(CancellationToken.None);
Expand All @@ -345,8 +337,7 @@ public async Task ReadAsync_BeforeInitialize_ThrowsInvalidOperationException()
// Arrange
var mockCoordinator = new Mock<IDownloadManager>();
var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

var buffer = new byte[1024];

Expand All @@ -361,8 +352,7 @@ public async Task ReadAsync_AfterDispose_ThrowsObjectDisposedException()
// Arrange
var mockCoordinator = new Mock<IDownloadManager>();
var mockBufferManager = new Mock<IPartBufferManager>();
var config = MultipartDownloadTestHelpers.CreateBufferedDownloadConfiguration();
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object, config);
var stream = new BufferedMultipartStream(mockCoordinator.Object, mockBufferManager.Object);

stream.Dispose();
var buffer = new byte[1024];
Expand Down