using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using Amazon.Runtime;
using Amazon.Runtime.Internal.Util;
using AWSSDK_DotNet.IntegrationTests.Utils;
namespace AWSSDK_DotNet.IntegrationTests.Tests.S3
{
///
/// Tests for versioned S3 buckets
///
[TestClass]
public class VersioningTests : TestBase
{
private const string content = "Test content";
private const string key = "test.txt";
private static string bucketName;
[ClassInitialize()]
public static void Initialize(TestContext tc)
{
bucketName = S3TestUtils.CreateBucketWithWait(Client);
Client.PutBucketVersioning(new PutBucketVersioningRequest
{
BucketName = bucketName,
VersioningConfig = new S3BucketVersioningConfig
{
Status = VersionStatus.Enabled
}
});
S3TestUtils.WaitForConsistency(() =>
{
var res = Client.GetBucketVersioning(new GetBucketVersioningRequest
{
BucketName = bucketName
});
return res.VersioningConfig?.Status == VersionStatus.Enabled ? res : null;
});
}
[ClassCleanup]
public static void ClassCleanup()
{
AmazonS3Util.DeleteS3BucketWithObjects(Client, bucketName);
BaseClean();
}
[TestMethod]
[TestCategory("S3")]
public void TestVersionBucketName()
{
var count = 5;
for (int i = 0; i < count; i++)
{
Client.PutObject(new PutObjectRequest
{
BucketName = bucketName,
Key = key,
ContentBody = content
});
}
var response = S3TestUtils.WaitForConsistency(() =>
{
var res = Client.ListVersions(bucketName);
return res.Versions?.Count == count ? res : null;
});
var versions = response.Versions;
Assert.AreEqual(count, versions.Count);
foreach(var version in versions)
{
Assert.AreEqual(bucketName, version.BucketName);
Assert.AreEqual(key, version.Key);
}
}
}
}