/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
using System;
using System.IO;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using AWSSDK_DotNet.IntegrationTests.Utils;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using Amazon.S3.Transfer;
using System.Security.Cryptography;
using System.Net;
using ThirdParty.MD5;
using System.Collections.Generic;
using Amazon;
namespace AWSSDK_DotNet.IntegrationTests.Tests.S3
{
///
/// Tests for StorageInsightsAnalytics
///
[TestClass]
public class StorageInsightsAnalyticsTests : TestBase
{
public static string bucketName;
[TestInitialize]
public void Init()
{
bucketName = S3TestUtils.CreateBucketWithWait(Client);
}
[TestCleanup]
public void Cleanup()
{
AmazonS3Util.DeleteS3BucketWithObjects(Client, bucketName);
}
[TestCategory("S3")]
[TestMethod]
public void BucketAnalyticsConfigurationsTestWithSigV4()
{
AWSConfigsS3.UseSignatureVersion4 = true;
BucketAnalyticsConfigurationsAndFilterTest();
BucketAnalyticsConfigurationsPrefixFilterTest();
BucketAnalyticsConfigurationsTagFilterTest();
}
[TestCategory("S3")]
[TestMethod]
public void BucketAnalyticsConfigurationsTestWithS3SigV2()
{
AWSConfigsS3.UseSignatureVersion4 = false;
BucketAnalyticsConfigurationsAndFilterTest();
BucketAnalyticsConfigurationsPrefixFilterTest();
BucketAnalyticsConfigurationsTagFilterTest();
}
public void BucketAnalyticsConfigurationsAndFilterTest()
{
Tag tag = new Tag()
{
Key = "tagK",
Value = "tagV"
};
List list = new List();
list.Add(new AnalyticsPrefixPredicate("string"));
list.Add(new AnalyticsTagPredicate(tag));
PutBucketAnalyticsConfigurationRequest putBucketAnalyticsConfigurationRequest = new PutBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId",
AnalyticsConfiguration = new AnalyticsConfiguration()
{
AnalyticsFilter = new AnalyticsFilter()
{
AnalyticsFilterPredicate = new AnalyticsAndOperator(list)
},
AnalyticsId = "configId",
StorageClassAnalysis = new StorageClassAnalysis()
{
DataExport = new StorageClassAnalysisDataExport()
{
OutputSchemaVersion = StorageClassAnalysisSchemaVersion.V_1,
Destination = new AnalyticsExportDestination()
{
S3BucketDestination = new AnalyticsS3BucketDestination()
{
Format = AnalyticsS3ExportFileFormat.CSV,
BucketAccountId = "599169622985",
Prefix = "string",
BucketName = "arn:aws:s3:::" + bucketName
}
}
}
}
}
};
var putBucketAnalyticsConfigurationResponse = Client.PutBucketAnalyticsConfiguration(putBucketAnalyticsConfigurationRequest);
GetBucketAnalyticsConfigurationRequest getBucketAnalyticsConfigurationRequest = new GetBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId"
};
var getBucketAnalyticsConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
{
var res = Client.GetBucketAnalyticsConfiguration(getBucketAnalyticsConfigurationRequest);
return res.AnalyticsConfiguration?.AnalyticsId == putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration.AnalyticsId ? res : null;
});
var getAnalyticsConfiguration = getBucketAnalyticsConfigurationResponse.AnalyticsConfiguration;
var putAnalyticsConfiguration = putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration;
foreach (var predicate in ((AnalyticsNAryOperator)getAnalyticsConfiguration.AnalyticsFilter.AnalyticsFilterPredicate).Operands)
{
if (predicate is AnalyticsPrefixPredicate)
{
Assert.AreEqual(((AnalyticsPrefixPredicate)predicate).Prefix, "string");
}
else
{
Assert.AreEqual(((AnalyticsTagPredicate)predicate).Tag.Key, "tagK");
Assert.AreEqual(((AnalyticsTagPredicate)predicate).Tag.Value, "tagV");
}
}
GetBucketAnalyticsValidation(getAnalyticsConfiguration, putAnalyticsConfiguration);
ListBucketAnalytics();
DeleteAnalyticsBucketAndValidate();
}
public void BucketAnalyticsConfigurationsPrefixFilterTest()
{
PutBucketAnalyticsConfigurationRequest putBucketAnalyticsConfigurationRequest = new PutBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId",
AnalyticsConfiguration = new AnalyticsConfiguration()
{
AnalyticsFilter = new AnalyticsFilter()
{
AnalyticsFilterPredicate = new AnalyticsPrefixPredicate("string")
},
AnalyticsId = "configId",
StorageClassAnalysis = new StorageClassAnalysis()
{
DataExport = new StorageClassAnalysisDataExport()
{
OutputSchemaVersion = StorageClassAnalysisSchemaVersion.V_1,
Destination = new AnalyticsExportDestination()
{
S3BucketDestination = new AnalyticsS3BucketDestination()
{
Format = AnalyticsS3ExportFileFormat.CSV,
BucketAccountId = "599169622985",
Prefix = "string",
BucketName = "arn:aws:s3:::" + bucketName
}
}
}
}
}
};
var putBucketAnalyticsConfigurationResponse = Client.PutBucketAnalyticsConfiguration(putBucketAnalyticsConfigurationRequest);
GetBucketAnalyticsConfigurationRequest getBucketAnalyticsConfigurationRequest = new GetBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId"
};
var getBucketAnalyticsConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
{
var res = Client.GetBucketAnalyticsConfiguration(getBucketAnalyticsConfigurationRequest);
return res.AnalyticsConfiguration?.AnalyticsId == putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration.AnalyticsId ? res : null;
});
var getAnalyticsConfiguration = getBucketAnalyticsConfigurationResponse.AnalyticsConfiguration;
var putAnalyticsConfiguration = putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration;
Assert.AreEqual(((AnalyticsPrefixPredicate)getAnalyticsConfiguration.AnalyticsFilter.AnalyticsFilterPredicate).Prefix, "string");
GetBucketAnalyticsValidation(getAnalyticsConfiguration, putAnalyticsConfiguration);
ListBucketAnalytics();
DeleteAnalyticsBucketAndValidate();
}
public void BucketAnalyticsConfigurationsTagFilterTest()
{
Tag tag = new Tag()
{
Key = "tagK",
Value = "tagV"
};
PutBucketAnalyticsConfigurationRequest putBucketAnalyticsConfigurationRequest = new PutBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId",
AnalyticsConfiguration = new AnalyticsConfiguration()
{
AnalyticsFilter = new AnalyticsFilter()
{
AnalyticsFilterPredicate = new AnalyticsTagPredicate(tag)
},
AnalyticsId = "configId",
StorageClassAnalysis = new StorageClassAnalysis()
{
DataExport = new StorageClassAnalysisDataExport()
{
OutputSchemaVersion = StorageClassAnalysisSchemaVersion.V_1,
Destination = new AnalyticsExportDestination()
{
S3BucketDestination = new AnalyticsS3BucketDestination()
{
Format = AnalyticsS3ExportFileFormat.CSV,
BucketAccountId = "599169622985",
Prefix = "string",
BucketName = "arn:aws:s3:::" + bucketName
}
}
}
}
}
};
var putBucketAnalyticsConfigurationResponse = Client.PutBucketAnalyticsConfiguration(putBucketAnalyticsConfigurationRequest);
GetBucketAnalyticsConfigurationRequest getBucketAnalyticsConfigurationRequest = new GetBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId"
};
var getBucketAnalyticsConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
{
var res = Client.GetBucketAnalyticsConfiguration(getBucketAnalyticsConfigurationRequest);
return res.AnalyticsConfiguration?.AnalyticsId == putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration.AnalyticsId ? res : null;
});
var getAnalyticsConfiguration = getBucketAnalyticsConfigurationResponse.AnalyticsConfiguration;
var putAnalyticsConfiguration = putBucketAnalyticsConfigurationRequest.AnalyticsConfiguration;
Assert.AreEqual(((AnalyticsTagPredicate)getAnalyticsConfiguration.AnalyticsFilter.AnalyticsFilterPredicate).Tag.Key, "tagK");
Assert.AreEqual(((AnalyticsTagPredicate)getAnalyticsConfiguration.AnalyticsFilter.AnalyticsFilterPredicate).Tag.Value, "tagV");
GetBucketAnalyticsValidation(getAnalyticsConfiguration, putAnalyticsConfiguration);
ListBucketAnalytics();
DeleteAnalyticsBucketAndValidate();
}
private static void ListBucketAnalytics()
{
ListBucketAnalyticsConfigurationsRequest listBucketAnalyticsConfigurationsRequest = new ListBucketAnalyticsConfigurationsRequest()
{
BucketName = bucketName
};
var response = Client.ListBucketAnalyticsConfigurations(listBucketAnalyticsConfigurationsRequest);
}
private static void DeleteAnalyticsBucketAndValidate()
{
DeleteBucketAnalyticsConfigurationRequest deleteBucketAnalyticsConfigurationRequest = new DeleteBucketAnalyticsConfigurationRequest()
{
BucketName = bucketName,
AnalyticsId = "configId"
};
var deleteBucketAnalyticsConfigurationResponse = Client.DeleteBucketAnalyticsConfiguration(deleteBucketAnalyticsConfigurationRequest);
var response = Client.ListObjects(new ListObjectsRequest()
{
BucketName = bucketName
});
var successFlag = true;
if (response.S3Objects.Count > 0)
{
successFlag = false;
}
Assert.IsTrue(successFlag);
}
private static void GetBucketAnalyticsValidation(AnalyticsConfiguration getAnalyticsConfiguration, AnalyticsConfiguration putAnalyticsConfiguration)
{
Assert.AreEqual(getAnalyticsConfiguration.AnalyticsId, putAnalyticsConfiguration.AnalyticsId);
var getDestination = getAnalyticsConfiguration.StorageClassAnalysis.DataExport.Destination;
var getOutputSchemaVersion = getAnalyticsConfiguration.StorageClassAnalysis.DataExport.OutputSchemaVersion;
var getS3BucketDestination = getDestination.S3BucketDestination;
var putDestination = putAnalyticsConfiguration.StorageClassAnalysis.DataExport.Destination;
var putOutputSchemaVersion = putAnalyticsConfiguration.StorageClassAnalysis.DataExport.OutputSchemaVersion;
var putS3BucketDestination = putDestination.S3BucketDestination;
Assert.AreEqual(getOutputSchemaVersion, putOutputSchemaVersion);
Assert.AreEqual(getS3BucketDestination.BucketName, putS3BucketDestination.BucketName);
Assert.AreEqual(getS3BucketDestination.BucketAccountId, putS3BucketDestination.BucketAccountId);
Assert.AreEqual(getS3BucketDestination.Format, putS3BucketDestination.Format);
Assert.AreEqual(getS3BucketDestination.Prefix, putS3BucketDestination.Prefix);
}
}
}