public void BucketIntelligentTieringConfigurationsPrefixFilterTest()
        {
            var intelligentTieringFilter = new IntelligentTieringFilter()
            {
                IntelligentTieringFilterPredicate = new IntelligentTieringPrefixPredicate("string")
            };

            var putBucketIntelligentTieringConfigurationRequest  = GeneratePutRequest(intelligentTieringId, intelligentTieringFilter);
            var putBucketIntelligentTieringConfigurationResponse = Client.PutBucketIntelligentTieringConfiguration(putBucketIntelligentTieringConfigurationRequest);

            GetBucketIntelligentTieringConfigurationRequest getBucketIntelligentTieringConfigurationRequest = new GetBucketIntelligentTieringConfigurationRequest()
            {
                IntelligentTieringId = intelligentTieringId,
                BucketName           = bucketName
            };

            var getBucketIntelligentTieringConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
            {
                var res = Client.GetBucketIntelligentTieringConfiguration(getBucketIntelligentTieringConfigurationRequest);
                return(res.IntelligentTieringConfiguration?.IntelligentTieringId == getBucketIntelligentTieringConfigurationRequest.IntelligentTieringId ? res : null);
            });

            var getConfiguration = getBucketIntelligentTieringConfigurationResponse.IntelligentTieringConfiguration;
            var putConfiguration = putBucketIntelligentTieringConfigurationRequest.IntelligentTieringConfiguration;

            Assert.AreEqual(getConfiguration.IntelligentTieringId, putConfiguration.IntelligentTieringId);
            Assert.AreEqual(((IntelligentTieringPrefixPredicate)getConfiguration.IntelligentTieringFilter.IntelligentTieringFilterPredicate).Prefix, "string");
        }
        public void BucketIntelligentTieringConfigurationsTagFilterTest()
        {
            Tag tag = new Tag()
            {
                Key   = "tagK",
                Value = "tagV"
            };
            var intelligentTieringFilter = new IntelligentTieringFilter()
            {
                IntelligentTieringFilterPredicate = new IntelligentTieringTagPredicate(tag)
            };

            var putBucketIntelligentTieringConfigurationRequest  = GeneratePutRequest(intelligentTieringId, intelligentTieringFilter);
            var putBucketIntelligentTieringConfigurationResponse = Client.PutBucketIntelligentTieringConfiguration(putBucketIntelligentTieringConfigurationRequest);

            GetBucketIntelligentTieringConfigurationRequest getBucketIntelligentTieringConfigurationRequest = new GetBucketIntelligentTieringConfigurationRequest()
            {
                IntelligentTieringId = intelligentTieringId,
                BucketName           = bucketName
            };

            var getBucketIntelligentTieringConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
            {
                var res = Client.GetBucketIntelligentTieringConfiguration(getBucketIntelligentTieringConfigurationRequest);
                return(res.IntelligentTieringConfiguration?.IntelligentTieringId == getBucketIntelligentTieringConfigurationRequest.IntelligentTieringId ? res : null);
            });

            var getConfiguration = getBucketIntelligentTieringConfigurationResponse.IntelligentTieringConfiguration;
            var putConfiguration = putBucketIntelligentTieringConfigurationRequest.IntelligentTieringConfiguration;

            Assert.AreEqual(getConfiguration.IntelligentTieringId, putConfiguration.IntelligentTieringId);
            Assert.AreEqual(((IntelligentTieringTagPredicate)getConfiguration.IntelligentTieringFilter.IntelligentTieringFilterPredicate).Tag.Key, "tagK");
            Assert.AreEqual(((IntelligentTieringTagPredicate)getConfiguration.IntelligentTieringFilter.IntelligentTieringFilterPredicate).Tag.Value, "tagV");
        }
        public void BucketIntelligentTieringConfigurationsAndFilterTest()
        {
            Tag tag = new Tag()
            {
                Key   = "tagK",
                Value = "tagV"
            };
            List <IntelligentTieringFilterPredicate> list = new List <IntelligentTieringFilterPredicate>();

            list.Add(new IntelligentTieringPrefixPredicate("string"));
            list.Add(new IntelligentTieringTagPredicate(tag));

            var intelligentTieringFilter = new IntelligentTieringFilter()
            {
                IntelligentTieringFilterPredicate = new IntelligentTieringAndOperator(list)
            };
            var putBucketIntelligentTieringConfigurationRequest  = GeneratePutRequest(intelligentTieringId, intelligentTieringFilter);
            var putBucketIntelligentTieringConfigurationResponse = Client.PutBucketIntelligentTieringConfiguration(putBucketIntelligentTieringConfigurationRequest);

            GetBucketIntelligentTieringConfigurationRequest getBucketIntelligentTieringConfigurationRequest = new GetBucketIntelligentTieringConfigurationRequest()
            {
                IntelligentTieringId = intelligentTieringId,
                BucketName           = bucketName
            };

            var getBucketIntelligentTieringConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
            {
                var res = Client.GetBucketIntelligentTieringConfiguration(getBucketIntelligentTieringConfigurationRequest);
                return(res.IntelligentTieringConfiguration?.IntelligentTieringId == getBucketIntelligentTieringConfigurationRequest.IntelligentTieringId ? res : null);
            });

            var getConfiguration = getBucketIntelligentTieringConfigurationResponse.IntelligentTieringConfiguration;
            var putConfiguration = putBucketIntelligentTieringConfigurationRequest.IntelligentTieringConfiguration;

            Assert.AreEqual(getConfiguration.IntelligentTieringId, putConfiguration.IntelligentTieringId);

            foreach (var predicate in ((IntelligentTieringNAryOperator)getConfiguration.IntelligentTieringFilter.IntelligentTieringFilterPredicate).Operands)
            {
                if (predicate is IntelligentTieringPrefixPredicate)
                {
                    Assert.AreEqual(((IntelligentTieringPrefixPredicate)predicate).Prefix, "string");
                }
                else if (predicate is IntelligentTieringTagPredicate)
                {
                    Assert.AreEqual(((IntelligentTieringTagPredicate)predicate).Tag.Key, "tagK");
                    Assert.AreEqual(((IntelligentTieringTagPredicate)predicate).Tag.Value, "tagV");
                }
            }
        }
        public void BucketIntelligentTieringConfigurationsTieringListTest()
        {
            var intelligentTieringFilter = new IntelligentTieringFilter()
            {
                IntelligentTieringFilterPredicate = new IntelligentTieringPrefixPredicate("string")
            };

            var tiering = new Tiering()
            {
                Days       = 180,
                AccessTier = IntelligentTieringAccessTier.DEEP_ARCHIVE_ACCESS
            };

            var putBucketIntelligentTieringConfigurationRequest = GeneratePutRequest(intelligentTieringId, intelligentTieringFilter);

            putBucketIntelligentTieringConfigurationRequest.IntelligentTieringConfiguration.Tierings.Add(tiering);
            var putBucketIntelligentTieringConfigurationResponse = Client.PutBucketIntelligentTieringConfiguration(putBucketIntelligentTieringConfigurationRequest);

            GetBucketIntelligentTieringConfigurationRequest getBucketIntelligentTieringConfigurationRequest = new GetBucketIntelligentTieringConfigurationRequest()
            {
                IntelligentTieringId = intelligentTieringId,
                BucketName           = bucketName
            };

            var getBucketIntelligentTieringConfigurationResponse = S3TestUtils.WaitForConsistency(() =>
            {
                var res = Client.GetBucketIntelligentTieringConfiguration(getBucketIntelligentTieringConfigurationRequest);
                return(res.IntelligentTieringConfiguration?.IntelligentTieringId == getBucketIntelligentTieringConfigurationRequest.IntelligentTieringId ? res : null);
            });

            var getConfiguration = getBucketIntelligentTieringConfigurationResponse.IntelligentTieringConfiguration;
            var putConfiguration = putBucketIntelligentTieringConfigurationRequest.IntelligentTieringConfiguration;

            Assert.AreEqual(getConfiguration.IntelligentTieringId, putConfiguration.IntelligentTieringId);
            Assert.AreEqual(getConfiguration.Status, putConfiguration.Status);

            Assert.AreEqual(getConfiguration.Tierings.Count, putConfiguration.Tierings.Count);
            for (int i = 0; i < getConfiguration.Tierings.Count; i++)
            {
                var tiering_get = getConfiguration.Tierings[i];
                var tiering_put = putConfiguration.Tierings[i];
                Assert.AreEqual(tiering_get.Days, tiering_put.Days);
                Assert.AreEqual(tiering_get.AccessTier, tiering_put.AccessTier);
            }
        }