/* * 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 StorageInsightsMetrics /// [TestClass] public class StorageInsightsMetricsTests : TestBase { public static string bucketName; private const string accessPointArn = "arn:aws:s3:us-east-1:123456789012:accesspoint:myendpoint"; [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; BucketMetricsConfigurationsAndFilterTest(); BucketMetricsConfigurationsPrefixFilterTest(); BucketMetricssConfigurationsTagFilterTest(); BucketMetricsConfigurationAccessPointArnFilterTest(); } [TestCategory("S3")] [TestMethod] public void BucketAnalyticsConfigurationsTestWithS3SigV2() { AWSConfigsS3.UseSignatureVersion4 = false; BucketMetricsConfigurationsAndFilterTest(); BucketMetricsConfigurationsPrefixFilterTest(); BucketMetricssConfigurationsTagFilterTest(); BucketMetricsConfigurationAccessPointArnFilterTest(); } public void BucketMetricssConfigurationsTagFilterTest() { Tag tag = new Tag() { Key = "tagK", Value = "tagV" }; PutBucketMetricsConfigurationRequest putBucketMetricsConfigurationRequest = new PutBucketMetricsConfigurationRequest() { BucketName = bucketName, MetricsId = "configId", MetricsConfiguration = new MetricsConfiguration() { MetricsId = "configId", MetricsFilter = new MetricsFilter() { MetricsFilterPredicate = new MetricsTagPredicate(tag) } } }; var putBucketMetricsConfigurationResponse = Client.PutBucketMetricsConfiguration(putBucketMetricsConfigurationRequest); GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest = new GetBucketMetricsConfigurationRequest() { MetricsId = "configId", BucketName = bucketName }; var getBucketMetricsConfigurationResponse = S3TestUtils.WaitForConsistency(() => { var res = Client.GetBucketMetricsConfiguration(getBucketMetricsConfigurationRequest); return res.MetricsConfiguration?.MetricsId == getBucketMetricsConfigurationRequest.MetricsId ? res : null; }); var getMetricsConfiguration = getBucketMetricsConfigurationResponse.MetricsConfiguration; var putMetricsConfiguration = putBucketMetricsConfigurationRequest.MetricsConfiguration; Assert.AreEqual(getMetricsConfiguration.MetricsId, putMetricsConfiguration.MetricsId); Assert.AreEqual(((MetricsTagPredicate)getMetricsConfiguration.MetricsFilter.MetricsFilterPredicate).Tag.Key, "tagK"); Assert.AreEqual(((MetricsTagPredicate)getMetricsConfiguration.MetricsFilter.MetricsFilterPredicate).Tag.Value, "tagV"); ListBucketMetrics(); DeleteBucketMetricsAndValidate(); } public void BucketMetricsConfigurationsPrefixFilterTest() { PutBucketMetricsConfigurationRequest putBucketMetricsConfigurationRequest = new PutBucketMetricsConfigurationRequest() { BucketName = bucketName, MetricsId = "configId", MetricsConfiguration = new MetricsConfiguration() { MetricsId = "configId", MetricsFilter = new MetricsFilter() { MetricsFilterPredicate = new MetricsPrefixPredicate("string") } } }; var putBucketMetricsConfigurationResponse = Client.PutBucketMetricsConfiguration(putBucketMetricsConfigurationRequest); GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest = new GetBucketMetricsConfigurationRequest() { MetricsId = "configId", BucketName = bucketName }; var getBucketMetricsConfigurationResponse = S3TestUtils.WaitForConsistency(() => { var res = Client.GetBucketMetricsConfiguration(getBucketMetricsConfigurationRequest); return res.MetricsConfiguration?.MetricsId == getBucketMetricsConfigurationRequest.MetricsId ? res : null; }); var getMetricsConfiguration = getBucketMetricsConfigurationResponse.MetricsConfiguration; var putMetricsConfiguration = putBucketMetricsConfigurationRequest.MetricsConfiguration; Assert.AreEqual(getMetricsConfiguration.MetricsId, putMetricsConfiguration.MetricsId); Assert.AreEqual(((MetricsPrefixPredicate)getMetricsConfiguration.MetricsFilter.MetricsFilterPredicate).Prefix, "string"); ListBucketMetrics(); DeleteBucketMetricsAndValidate(); } public void BucketMetricsConfigurationAccessPointArnFilterTest() { PutBucketMetricsConfigurationRequest putBucketMetricsConfigurationRequest = new PutBucketMetricsConfigurationRequest() { BucketName = bucketName, MetricsId = "configId", MetricsConfiguration = new MetricsConfiguration() { MetricsId = "configId", MetricsFilter = new MetricsFilter() { MetricsFilterPredicate = new MetricsAccessPointArnPredicate(accessPointArn) } } }; var putBucketMetricsConfigurationResponse = Client.PutBucketMetricsConfiguration(putBucketMetricsConfigurationRequest); GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest = new GetBucketMetricsConfigurationRequest() { MetricsId = "configId", BucketName = bucketName }; var getBucketMetricsConfigurationResponse = S3TestUtils.WaitForConsistency(() => { var res = Client.GetBucketMetricsConfiguration(getBucketMetricsConfigurationRequest); return res.MetricsConfiguration?.MetricsId == getBucketMetricsConfigurationRequest.MetricsId ? res : null; }); var getMetricsConfiguration = getBucketMetricsConfigurationResponse.MetricsConfiguration; var putMetricsConfiguration = putBucketMetricsConfigurationRequest.MetricsConfiguration; Assert.AreEqual(getMetricsConfiguration.MetricsId, putMetricsConfiguration.MetricsId); Assert.AreEqual(((MetricsAccessPointArnPredicate)getMetricsConfiguration.MetricsFilter.MetricsFilterPredicate).AccessPointArn, accessPointArn); ListBucketMetrics(); DeleteBucketMetricsAndValidate(); } public void BucketMetricsConfigurationsAndFilterTest() { Tag tag = new Tag() { Key = "tagK", Value = "tagV" }; List list = new List(); list.Add(new MetricsPrefixPredicate("string")); list.Add(new MetricsTagPredicate(tag)); list.Add(new MetricsAccessPointArnPredicate(accessPointArn)); PutBucketMetricsConfigurationRequest putBucketMetricsConfigurationRequest = new PutBucketMetricsConfigurationRequest() { BucketName = bucketName, MetricsId = "configId", MetricsConfiguration = new MetricsConfiguration() { MetricsId = "configId", MetricsFilter = new MetricsFilter() { MetricsFilterPredicate = new MetricsAndOperator(list) } } }; var putBucketMetricsConfigurationResponse = Client.PutBucketMetricsConfiguration(putBucketMetricsConfigurationRequest); GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest = new GetBucketMetricsConfigurationRequest() { MetricsId = "configId", BucketName = bucketName }; var getBucketMetricsConfigurationResponse = S3TestUtils.WaitForConsistency(() => { var res = Client.GetBucketMetricsConfiguration(getBucketMetricsConfigurationRequest); return res.MetricsConfiguration?.MetricsId == getBucketMetricsConfigurationRequest.MetricsId ? res : null; }); var getMetricsConfiguration = getBucketMetricsConfigurationResponse.MetricsConfiguration; var putMetricsConfiguration = putBucketMetricsConfigurationRequest.MetricsConfiguration; Assert.AreEqual(getMetricsConfiguration.MetricsId, putMetricsConfiguration.MetricsId); foreach (var predicate in ((MetricsNAryOperator)getMetricsConfiguration.MetricsFilter.MetricsFilterPredicate).Operands) { if (predicate is MetricsPrefixPredicate) { Assert.AreEqual(((MetricsPrefixPredicate)predicate).Prefix, "string"); } else if (predicate is MetricsTagPredicate) { Assert.AreEqual(((MetricsTagPredicate)predicate).Tag.Key, "tagK"); Assert.AreEqual(((MetricsTagPredicate)predicate).Tag.Value, "tagV"); } else { Assert.AreEqual(((MetricsAccessPointArnPredicate)predicate).AccessPointArn, accessPointArn); } } ListBucketMetrics(); DeleteBucketMetricsAndValidate(); } private static void ListBucketMetrics() { ListBucketMetricsConfigurationsRequest listBucketMetricsConfigurationRequest = new ListBucketMetricsConfigurationsRequest() { BucketName = bucketName }; var listBucketMetricsConfigurationResponse = Client.ListBucketMetricsConfigurations(listBucketMetricsConfigurationRequest); Assert.IsTrue(listBucketMetricsConfigurationResponse.MetricsConfigurationList.Count > 0); } private static void DeleteBucketMetricsAndValidate() { DeleteBucketMetricsConfigurationRequest deleteBucketMetricsConfigurationRequest = new DeleteBucketMetricsConfigurationRequest() { BucketName = bucketName, MetricsId = "configId" }; var deleteBucketMetricsConfigurationResponse = Client.DeleteBucketMetricsConfiguration(deleteBucketMetricsConfigurationRequest); var response = Client.ListObjects(new ListObjectsRequest() { BucketName = bucketName }); var successFlag = true; if (response.S3Objects.Count > 0) { successFlag = false; } Assert.IsTrue(successFlag); } } }