using System.Collections.Generic;
using System.Threading.Tasks;
public class S3HealthCheckServiceTests
public async Task GetHealthStatusAsync_WhenS3ObjectExists_ReturnsHealthyStatus()
var s3ClientMock = new Mock<IAmazonS3>();
var getObjectResponse = new GetObjectResponse
HttpStatusCode = HttpStatusCode.OK
s3ClientMock.Setup(c => c.GetObjectAsync(It.IsAny<GetObjectRequest>()))
.ReturnsAsync(getObjectResponse);
var service = new S3HealthCheckService(s3ClientMock.Object);
var result = await service.GetHealthStatusAsync();
Assert.True(result.IsHealthy);
Assert.Single(result.Messages);
Assert.Equal("Success: S3 Bucket is healthy.", result.Messages[0]);
public async Task GetHealthStatusAsync_WhenS3ObjectDoesNotExist_ReturnsUnhealthyStatus()
var s3ClientMock = new Mock<IAmazonS3>();
var getObjectResponse = new GetObjectResponse
HttpStatusCode = HttpStatusCode.NotFound
s3ClientMock.Setup(c => c.GetObjectAsync(It.IsAny<GetObjectRequest>()))
.ReturnsAsync(getObjectResponse);
var service = new S3HealthCheckService(s3ClientMock.Object);
var result = await service.GetHealthStatusAsync();
Assert.False(result.IsHealthy);
Assert.Single(result.Messages);
Assert.Equal("Failure: S3 Bucket is unhealthy. Reason: NotFound", result.Messages[0]);
public async Task GetHealthStatusAsync_WhenS3ClientThrowsException_ReturnsUnhealthyStatusWithFailureReason()
var s3ClientMock = new Mock<IAmazonS3>();
var exceptionMessage = "Exception occurred while accessing S3 bucket.";
s3ClientMock.Setup(c => c.GetObjectAsync(It.IsAny<GetObjectRequest>()))
.ThrowsAsync(new Exception(exceptionMessage));
var service = new S3HealthCheckService(s3ClientMock.Object);
var result = await service.GetHealthStatusAsync();
Assert.False(result.IsHealthy);
Assert.Single(result.Messages);
Assert.Equal($"Failure: S3 Bucket is unhealthy. Reason: {exceptionMessage}", result.Messages[0]);