コード例 #1
0
        /// 获取存储桶清单任务
        public void GetBucketInventory()
        {
            //.cssg-snippet-body-start:[get-bucket-inventory]
            try
            {
                string inventoryId = "aInventoryId";
                string bucket      = "examplebucket-1250000000"; //格式:BucketName-APPID
                GetBucketInventoryRequest getRequest = new GetBucketInventoryRequest(bucket);
                getRequest.SetInventoryId(inventoryId);

                GetBucketInventoryResult getResult = cosXml.getBucketInventory(getRequest);

                InventoryConfiguration configuration = getResult.inventoryConfiguration;
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                Console.WriteLine("CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
            }
            //.cssg-snippet-body-end
        }
コード例 #2
0
 private static void GetBucketInventoryAndValidate(InventoryConfiguration getInventoryConfiguration, InventoryConfiguration putInventoryConfiguration)
 {
     Assert.AreEqual(getInventoryConfiguration.InventoryId, putInventoryConfiguration.InventoryId);
     Assert.IsTrue(getInventoryConfiguration.IsEnabled);
     Assert.AreEqual(getInventoryConfiguration.Schedule.Frequency, putInventoryConfiguration.Schedule.Frequency);
     Assert.AreEqual(((InventoryPrefixPredicate)getInventoryConfiguration.InventoryFilter.InventoryFilterPredicate).Prefix, "string");
     Assert.AreEqual(getInventoryConfiguration.IncludedObjectVersions, putInventoryConfiguration.IncludedObjectVersions);
     CollectionAssert.AreEqual(getInventoryConfiguration.InventoryOptionalFields, putInventoryConfiguration.InventoryOptionalFields);
 }
コード例 #3
0
 public PutBucketInventoryRequest(string bucket, string id) : base(bucket)
 {
     this.method = CosRequestMethod.PUT;
     this.queryParameters.Add("inventory", null);
     this.queryParameters.Add("id", id);
     inventoryConfiguration             = new InventoryConfiguration();
     inventoryConfiguration.isEnabled   = true;
     inventoryConfiguration.id          = id;
     inventoryConfiguration.schedule    = new InventoryConfiguration.Schedule();
     inventoryConfiguration.destination = new InventoryConfiguration.Destination();
     inventoryConfiguration.destination.cosBucketDestination = new InventoryConfiguration.COSBucketDestination();
 }
コード例 #4
0
        public void ListBucketInventoryConfigurationTest()
        {
            //clear all inventory configurations first
            _ossClient.DeleteBucketInventoryConfiguration(new DeleteBucketInventoryConfigurationRequest(_bucketName, "report1"));

            int total = 104;

            for (int i = 0; i < total; i++)
            {
                var config = new InventoryConfiguration();
                config.Id          = "test" + i.ToString("D4");
                config.IsEnabled   = (i % 4 == 0) ? true:false;
                config.Filter      = (i % 4 != 0) ? new InventoryFilter("filterPrefix" + i.ToString("D4")) : null;
                config.Destination = new InventoryDestination();
                config.Destination.OSSBucketDestination           = new InventoryOSSBucketDestination();
                config.Destination.OSSBucketDestination.Format    = InventoryFormat.CSV;
                config.Destination.OSSBucketDestination.AccountId = Config.RamUID;
                config.Destination.OSSBucketDestination.RoleArn   = Config.RamRoleArn;
                config.Destination.OSSBucketDestination.Bucket    = _bucketName2;
                config.Destination.OSSBucketDestination.Prefix    = "prefix" + i.ToString("D4");
                config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
                config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
                _ossClient.SetBucketInventoryConfiguration(new SetBucketInventoryConfigurationRequest(_bucketName, config));
            }

            var result  = _ossClient.ListBucketInventoryConfiguration(new ListBucketInventoryConfigurationRequest(_bucketName, ""));
            var configs = OssTestUtils.ToArray(result.Configurations);

            Assert.AreEqual(configs.Count, 100);
            Assert.AreEqual(result.IsTruncated, true);
            Assert.AreEqual(result.NextContinuationToken, "test" + 99.ToString("D4"));
            Assert.AreEqual(configs[0].Id, "test" + 0.ToString("D4"));
            Assert.AreEqual(configs[99].Id, "test" + 99.ToString("D4"));

            result  = _ossClient.ListBucketInventoryConfiguration(new ListBucketInventoryConfigurationRequest(_bucketName, result.NextContinuationToken));
            configs = OssTestUtils.ToArray(result.Configurations);

            Assert.AreEqual(configs.Count, 4);
            Assert.AreEqual(result.IsTruncated, false);
            Assert.AreEqual(result.NextContinuationToken, null);
            Assert.AreEqual(configs[0].Id, "test" + 100.ToString("D4"));
            Assert.AreEqual(configs[3].Id, "test" + 103.ToString("D4"));

            result  = _ossClient.ListBucketInventoryConfiguration(new ListBucketInventoryConfigurationRequest(_bucketName, null));
            configs = OssTestUtils.ToArray(result.Configurations);

            Assert.AreEqual(configs.Count, 100);
            Assert.AreEqual(result.IsTruncated, true);
            Assert.AreEqual(result.NextContinuationToken, "test" + 99.ToString("D4"));
            Assert.AreEqual(configs[0].Id, "test" + 0.ToString("D4"));
            Assert.AreEqual(configs[99].Id, "test" + 99.ToString("D4"));
        }
コード例 #5
0
        /// <summary>
        /// Requests that the system create blank files for a new project.
        /// </summary>
        internal static void CreateTemplateFiles()
        {
            #region Write Configuration
            PronounGroup.PutRecords(Enumerable.Empty <PronounGroup>());
            BiomeConfiguration.PutRecord();
            CraftConfiguration.PutRecord();
            InventoryConfiguration.PutRecord();
            RoomConfiguration.PutRecord();
            #endregion

            #region Write Models
            ModelCollection <GameModel> .Default.PutRecordsForType <GameModel>();

            ModelCollection <ParquetModel> .Default.PutRecordsForType <FloorModel>();

            ModelCollection <ParquetModel> .Default.PutRecordsForType <BlockModel>();

            ModelCollection <ParquetModel> .Default.PutRecordsForType <FurnishingModel>();

            ModelCollection <ParquetModel> .Default.PutRecordsForType <CollectibleModel>();

            ModelCollection <BeingModel> .Default.PutRecordsForType <CritterModel>();

            ModelCollection <BeingModel> .Default.PutRecordsForType <CharacterModel>();

            ModelCollection <BiomeRecipe> .Default.PutRecordsForType <BiomeRecipe>();

            ModelCollection <CraftingRecipe> .Default.PutRecordsForType <CraftingRecipe>();

            ModelCollection <RoomRecipe> .Default.PutRecordsForType <RoomRecipe>();

            ModelCollection <RegionModel> .Default.PutRecordsForType <RegionModel>();

            ModelCollection <ScriptModel> .Default.PutRecordsForType <ScriptModel>();

            ModelCollection <InteractionModel> .Default.PutRecordsForType <InteractionModel>();

            ModelCollection <ItemModel> .Default.PutRecordsForType <ItemModel>();

            #endregion
        }
コード例 #6
0
        public void TestBucketInventory()
        {
            try
            {
                string inventoryId = "id1";

                PutBucketInventoryRequest putRequest = new PutBucketInventoryRequest(bucket, inventoryId);

                putRequest.IsEnable(true);
                putRequest.SetScheduleFrequency("Daily");
                putRequest.SetIncludedObjectVersions("All");
                putRequest.SetDestination("CSV", QCloudServer.Instance().uin, QCloudServer.Instance().bucketForObjectTest, region, "list1");
                putRequest.SetFilter("dir/");
                putRequest.SetOptionalFields("SIZE");
                putRequest.SetOptionalFields("ETag");
                putRequest.EnableSSE();
                PutBucketInventoryResult putResult = cosXml.PutBucketInventory(putRequest);

                Assert.IsTrue(putResult.httpCode == 200);

                GetBucketInventoryRequest getRequest = new GetBucketInventoryRequest(bucket);

                getRequest.SetInventoryId(inventoryId);
                GetBucketInventoryResult getResult  = cosXml.GetBucketInventory(getRequest);
                InventoryConfiguration   testConfig = getResult.inventoryConfiguration;

                // Console.WriteLine(getResult.GetResultInfo());
                Assert.IsNotEmpty((getResult.GetResultInfo()));

                ListBucketInventoryRequest listRequest = new ListBucketInventoryRequest(bucket);
                ListBucketInventoryResult  listResult  = cosXml.ListBucketInventory(listRequest);
                Assert.IsTrue(listResult.httpCode == 200);
                Assert.NotNull(listResult.GetResultInfo());
                Assert.IsEmpty(listResult.listInventoryConfiguration.continuationToken);
                Assert.False(listResult.listInventoryConfiguration.isTruncated);
                Assert.AreEqual(listResult.listInventoryConfiguration.inventoryConfigurations.Count, 1);
                InventoryConfiguration testConfig2 = listResult.listInventoryConfiguration.inventoryConfigurations[0];

                InventoryConfiguration[] configurations = new InventoryConfiguration[] { testConfig, testConfig2 };

                foreach (InventoryConfiguration configuration in configurations)
                {
                    Assert.NotNull(configuration);
                    Assert.NotNull(configuration.destination.cosBucketDestination.accountId);
                    Assert.NotNull(configuration.destination.cosBucketDestination.bucket);
                    Assert.NotNull(configuration.destination.cosBucketDestination.encryption.sSECOS);
                    Assert.NotNull(configuration.destination.cosBucketDestination.format);
                    Assert.NotNull(configuration.destination.cosBucketDestination.prefix);
                    Assert.True(configuration.isEnabled);
                    Assert.NotNull(configuration.schedule.frequency);
                    Assert.NotNull(configuration.includedObjectVersions);
                    Assert.NotNull(configuration.filter.prefix);
                    Assert.AreEqual(configuration.optionalFields.fields.Count, 2);
                }

                DeleteBucketInventoryRequest deleteRequest = new DeleteBucketInventoryRequest(bucket);

                deleteRequest.SetInventoryId(inventoryId);
                DeleteBucketInventoryResult deleteResult = cosXml.DeleteBucketInventory(deleteRequest);
                Assert.IsTrue(putResult.httpCode == 200);
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                Console.WriteLine("CosClientException: " + clientEx.Message);
                Assert.Fail();
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());

                if (serverEx.statusCode != 409 && serverEx.statusCode != 451)
                {
                    Assert.Fail();
                }
            }
        }
コード例 #7
0
        public static string BuildInventoryConfiguration(InventoryConfiguration inventoryConfiguration)
        {
            StringWriter      stringWriter     = new StringWriter();
            XmlWriterSettings xmlWriterSetting = new XmlWriterSettings();

            xmlWriterSetting.Indent = true;

            XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSetting);

            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("InventoryConfiguration");

            if (inventoryConfiguration.id != null)
            {
                xmlWriter.WriteElementString("Id", inventoryConfiguration.id);
            }
            xmlWriter.WriteElementString("IsEnabled", inventoryConfiguration.isEnabled ? "true" : "false");
            if (inventoryConfiguration.destination != null)
            {
                xmlWriter.WriteStartElement("Destination");
                if (inventoryConfiguration.destination.cosBucketDestination != null)
                {
                    xmlWriter.WriteStartElement("COSBucketDestination");
                    if (inventoryConfiguration.destination.cosBucketDestination.format != null)
                    {
                        xmlWriter.WriteElementString("Format", inventoryConfiguration.destination.cosBucketDestination.format);
                    }
                    if (inventoryConfiguration.destination.cosBucketDestination.accountId != null)
                    {
                        xmlWriter.WriteElementString("AccountId", inventoryConfiguration.destination.cosBucketDestination.accountId);
                    }
                    if (inventoryConfiguration.destination.cosBucketDestination.bucket != null)
                    {
                        xmlWriter.WriteElementString("Bucket", inventoryConfiguration.destination.cosBucketDestination.bucket);
                    }
                    if (inventoryConfiguration.destination.cosBucketDestination.prefix != null)
                    {
                        xmlWriter.WriteElementString("Prefix", inventoryConfiguration.destination.cosBucketDestination.prefix);
                    }
                    if (inventoryConfiguration.destination.cosBucketDestination.encryption != null)
                    {
                        xmlWriter.WriteStartElement("Encryption");
                        xmlWriter.WriteElementString("SSE-COS", inventoryConfiguration.destination.cosBucketDestination.encryption.sSECOS);
                        xmlWriter.WriteEndElement();
                    }
                    xmlWriter.WriteEndElement();
                }
                xmlWriter.WriteEndElement();
            }
            if (inventoryConfiguration.schedule != null && inventoryConfiguration.schedule.frequency != null)
            {
                xmlWriter.WriteStartElement("Schedule");
                xmlWriter.WriteElementString("Frequency", inventoryConfiguration.schedule.frequency);
                xmlWriter.WriteEndElement();
            }
            if (inventoryConfiguration.filter != null && inventoryConfiguration.filter.prefix != null)
            {
                xmlWriter.WriteStartElement("Filter");
                xmlWriter.WriteElementString("Prefix", inventoryConfiguration.filter.prefix);
                xmlWriter.WriteEndElement();
            }
            if (inventoryConfiguration.includedObjectVersions != null)
            {
                xmlWriter.WriteElementString("IncludedObjectVersions", inventoryConfiguration.includedObjectVersions);
            }
            if (inventoryConfiguration.optionalFields != null && inventoryConfiguration.optionalFields.fields != null)
            {
                xmlWriter.WriteStartElement("OptionalFields");
                foreach (string field in inventoryConfiguration.optionalFields.fields)
                {
                    xmlWriter.WriteElementString("Field", field);
                }
                xmlWriter.WriteEndElement();
            }

            // end to element
            xmlWriter.WriteEndElement();

            xmlWriter.WriteEndDocument();
            xmlWriter.Flush();
            return(RemoveXMLHeader(stringWriter.ToString()));
        }
コード例 #8
0
 internal override void ParseResponseBody(System.IO.Stream inputStream, string contentType, long contentLength)
 {
     inventoryConfiguration = new InventoryConfiguration();
     XmlParse.ParseInventoryConfiguration(inputStream, inventoryConfiguration);
 }
コード例 #9
0
 /// <summary>
 /// Creates a instance of <see cref="SetBucketInventoryConfigurationRequest" />.
 /// </summary>
 /// <param name="bucketName">bucket name</param>
 /// <param name="configuration">inventory configuration</param>
 public SetBucketInventoryConfigurationRequest(string bucketName, InventoryConfiguration configuration)
 {
     BucketName    = bucketName;
     Configuration = configuration;
 }
コード例 #10
0
        public IRequest Marshall(PutBucketInventoryConfigurationRequest putBucketInventoryConfigurationRequest)
        {
            //IL_0006: Unknown result type (might be due to invalid IL or missing references)
            //IL_000c: Expected O, but got Unknown
            //IL_0360: Unknown result type (might be due to invalid IL or missing references)
            IRequest val = new DefaultRequest(putBucketInventoryConfigurationRequest, "AmazonS3");

            val.set_HttpMethod("PUT");
            val.set_ResourcePath("/" + S3Transforms.ToStringValue(putBucketInventoryConfigurationRequest.BucketName));
            val.AddSubResource("inventory");
            if (putBucketInventoryConfigurationRequest.IsSetInventoryId())
            {
                val.AddSubResource("id", S3Transforms.ToStringValue(putBucketInventoryConfigurationRequest.InventoryId));
            }
            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings
            {
                Encoding = Encoding.UTF8,
                OmitXmlDeclaration = true
            }))
            {
                if (putBucketInventoryConfigurationRequest.IsSetInventoryConfiguration())
                {
                    InventoryConfiguration inventoryConfiguration = putBucketInventoryConfigurationRequest.InventoryConfiguration;
                    xmlWriter.WriteStartElement("InventoryConfiguration", "http://s3.amazonaws.com/doc/2006-03-01/");
                    if (inventoryConfiguration != null)
                    {
                        if (inventoryConfiguration.IsSetDestination())
                        {
                            InventoryDestination destination = inventoryConfiguration.Destination;
                            xmlWriter.WriteStartElement("Destination", "http://s3.amazonaws.com/doc/2006-03-01/");
                            if (destination.isSetS3BucketDestination())
                            {
                                InventoryS3BucketDestination s3BucketDestination = destination.S3BucketDestination;
                                xmlWriter.WriteStartElement("S3BucketDestination", "http://s3.amazonaws.com/doc/2006-03-01/");
                                if (s3BucketDestination.IsSetAccountId())
                                {
                                    xmlWriter.WriteElementString("AccountId", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(s3BucketDestination.AccountId));
                                }
                                if (s3BucketDestination.IsSetBucketName())
                                {
                                    xmlWriter.WriteElementString("Bucket", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(s3BucketDestination.BucketName));
                                }
                                if (s3BucketDestination.IsSetInventoryFormat())
                                {
                                    xmlWriter.WriteElementString("Format", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(ConstantClass.op_Implicit(s3BucketDestination.InventoryFormat)));
                                }
                                if (s3BucketDestination.IsSetPrefix())
                                {
                                    xmlWriter.WriteElementString("Prefix", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(s3BucketDestination.Prefix));
                                }
                                xmlWriter.WriteEndElement();
                            }
                            xmlWriter.WriteEndElement();
                        }
                        xmlWriter.WriteElementString("IsEnabled", "http://s3.amazonaws.com/doc/2006-03-01/", inventoryConfiguration.IsEnabled.ToString().ToLowerInvariant());
                        if (inventoryConfiguration.IsSetInventoryFilter())
                        {
                            xmlWriter.WriteStartElement("Filter", "http://s3.amazonaws.com/doc/2006-03-01/");
                            inventoryConfiguration.InventoryFilter.InventoryFilterPredicate.Accept(new InventoryPredicateVisitor(xmlWriter));
                            xmlWriter.WriteEndElement();
                        }
                        if (inventoryConfiguration.IsSetInventoryId())
                        {
                            xmlWriter.WriteElementString("Id", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(inventoryConfiguration.InventoryId));
                        }
                        if (inventoryConfiguration.IsSetIncludedObjectVersions())
                        {
                            xmlWriter.WriteElementString("IncludedObjectVersions", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(ConstantClass.op_Implicit(inventoryConfiguration.IncludedObjectVersions)));
                        }
                        if (inventoryConfiguration.IsSetInventoryOptionalFields())
                        {
                            xmlWriter.WriteStartElement("OptionalFields", "http://s3.amazonaws.com/doc/2006-03-01/");
                            foreach (InventoryOptionalField inventoryOptionalField in inventoryConfiguration.InventoryOptionalFields)
                            {
                                xmlWriter.WriteElementString("Field", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(ConstantClass.op_Implicit(inventoryOptionalField)));
                            }
                            xmlWriter.WriteEndElement();
                        }
                        if (inventoryConfiguration.IsSetSchedule())
                        {
                            xmlWriter.WriteStartElement("Schedule", "http://s3.amazonaws.com/doc/2006-03-01/");
                            InventorySchedule schedule = inventoryConfiguration.Schedule;
                            if (schedule.IsFrequency())
                            {
                                xmlWriter.WriteElementString("Frequency", "http://s3.amazonaws.com/doc/2006-03-01/", S3Transforms.ToXmlStringValue(ConstantClass.op_Implicit(schedule.Frequency)));
                            }
                            xmlWriter.WriteEndElement();
                        }
                    }
                    xmlWriter.WriteEndElement();
                }
            }
            try
            {
                string text = stringWriter.ToString();
                val.set_Content(Encoding.UTF8.GetBytes(text));
                val.get_Headers()["Content-Type"] = "application/xml";
                string value = AmazonS3Util.GenerateChecksumForContent(text, fBase64Encode: true);
                val.get_Headers()["Content-MD5"] = value;
                return(val);
            }
            catch (EncoderFallbackException ex)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", (Exception)ex);
            }
        }
コード例 #11
0
        public void BucketInventoryConfigurationBasicTest()
        {
            //test case 1
            var config = new InventoryConfiguration();

            config.Id          = "report1";
            config.IsEnabled   = true;
            config.Filter      = new InventoryFilter("filterPrefix");
            config.Destination = new InventoryDestination();
            config.Destination.OSSBucketDestination            = new InventoryOSSBucketDestination();
            config.Destination.OSSBucketDestination.Format     = InventoryFormat.CSV;
            config.Destination.OSSBucketDestination.AccountId  = Config.RamUID;
            config.Destination.OSSBucketDestination.RoleArn    = Config.RamRoleArn;
            config.Destination.OSSBucketDestination.Bucket     = _bucketName2;
            config.Destination.OSSBucketDestination.Prefix     = "prefix1";
            config.Destination.OSSBucketDestination.Encryption = new InventoryEncryption(new InventorySSEKMS("keyId"));
            config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
            config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
            config.OptionalFields.Add(InventoryOptionalField.Size);
            config.OptionalFields.Add(InventoryOptionalField.LastModifiedDate);
            config.OptionalFields.Add(InventoryOptionalField.StorageClass);
            config.OptionalFields.Add(InventoryOptionalField.IsMultipartUploaded);
            config.OptionalFields.Add(InventoryOptionalField.EncryptionStatus);
            config.OptionalFields.Add(InventoryOptionalField.ETag);

            _ossClient.SetBucketInventoryConfiguration(new SetBucketInventoryConfigurationRequest(_bucketName, config));

            var result = _ossClient.GetBucketInventoryConfiguration(new GetBucketInventoryConfigurationRequest(_bucketName, config.Id));

            Assert.AreEqual(result.Configuration.Id, "report1");
            Assert.AreEqual(result.Configuration.IsEnabled, true);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Format, InventoryFormat.CSV);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.AccountId, Config.RamUID);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.RoleArn, Config.RamRoleArn);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Bucket, _bucketName2);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Prefix, "prefix1");
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Encryption.SSEOSS, null);
            Assert.AreNotEqual(result.Configuration.Destination.OSSBucketDestination.Encryption.SSEKMS, null);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Encryption.SSEKMS.KeyId, "keyId");
            Assert.AreEqual(result.Configuration.Schedule.Frequency, InventoryFrequency.Daily);
            Assert.AreEqual(result.Configuration.Filter.Prefix, "filterPrefix");
            Assert.AreEqual(result.Configuration.IncludedObjectVersions, InventoryIncludedObjectVersions.All);
            Assert.AreEqual(result.Configuration.OptionalFields.Count, 6);
            Assert.AreEqual(result.Configuration.OptionalFields[0], InventoryOptionalField.Size);
            Assert.AreEqual(result.Configuration.OptionalFields[1], InventoryOptionalField.LastModifiedDate);
            Assert.AreEqual(result.Configuration.OptionalFields[2], InventoryOptionalField.StorageClass);
            Assert.AreEqual(result.Configuration.OptionalFields[3], InventoryOptionalField.IsMultipartUploaded);
            Assert.AreEqual(result.Configuration.OptionalFields[4], InventoryOptionalField.EncryptionStatus);
            Assert.AreEqual(result.Configuration.OptionalFields[5], InventoryOptionalField.ETag);

            _ossClient.DeleteBucketInventoryConfiguration(new DeleteBucketInventoryConfigurationRequest(_bucketName, config.Id));

            //test case 2
            config             = new InventoryConfiguration();
            config.Id          = "report1";
            config.IsEnabled   = false;
            config.Filter      = new InventoryFilter("filterPrefix");
            config.Destination = new InventoryDestination();
            config.Destination.OSSBucketDestination            = new InventoryOSSBucketDestination();
            config.Destination.OSSBucketDestination.Format     = InventoryFormat.CSV;
            config.Destination.OSSBucketDestination.AccountId  = Config.RamUID;
            config.Destination.OSSBucketDestination.RoleArn    = Config.RamRoleArn;
            config.Destination.OSSBucketDestination.Bucket     = _bucketName2;
            config.Destination.OSSBucketDestination.Prefix     = "prefix1";
            config.Destination.OSSBucketDestination.Encryption = new InventoryEncryption(new InventorySSEOSS());
            config.Schedule = new InventorySchedule(InventoryFrequency.Weekly);
            config.IncludedObjectVersions = InventoryIncludedObjectVersions.Current;
            config.OptionalFields.Add(InventoryOptionalField.StorageClass);

            _ossClient.SetBucketInventoryConfiguration(new SetBucketInventoryConfigurationRequest(_bucketName, config));

            result = _ossClient.GetBucketInventoryConfiguration(new GetBucketInventoryConfigurationRequest(_bucketName, config.Id));

            Assert.AreEqual(result.Configuration.Id, "report1");
            Assert.AreEqual(result.Configuration.IsEnabled, false);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Format, InventoryFormat.CSV);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.AccountId, Config.RamUID);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.RoleArn, Config.RamRoleArn);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Bucket, _bucketName2);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Prefix, "prefix1");
            Assert.AreNotEqual(result.Configuration.Destination.OSSBucketDestination.Encryption.SSEOSS, null);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Encryption.SSEKMS, null);
            Assert.AreEqual(result.Configuration.Schedule.Frequency, InventoryFrequency.Weekly);
            Assert.AreEqual(result.Configuration.Filter.Prefix, "filterPrefix");
            Assert.AreEqual(result.Configuration.IncludedObjectVersions, InventoryIncludedObjectVersions.Current);
            Assert.AreEqual(result.Configuration.OptionalFields.Count, 1);
            Assert.AreEqual(result.Configuration.OptionalFields[0], InventoryOptionalField.StorageClass);


            _ossClient.DeleteBucketInventoryConfiguration(new DeleteBucketInventoryConfigurationRequest(_bucketName, config.Id));


            //test case 3
            config             = new InventoryConfiguration();
            config.Id          = "report1";
            config.IsEnabled   = false;
            config.Destination = new InventoryDestination();
            config.Destination.OSSBucketDestination           = new InventoryOSSBucketDestination();
            config.Destination.OSSBucketDestination.Format    = InventoryFormat.CSV;
            config.Destination.OSSBucketDestination.AccountId = Config.RamUID;
            config.Destination.OSSBucketDestination.RoleArn   = Config.RamRoleArn;
            config.Destination.OSSBucketDestination.Bucket    = _bucketName2;
            config.Destination.OSSBucketDestination.Prefix    = "prefix1";
            config.Schedule = new InventorySchedule(InventoryFrequency.Weekly);
            config.IncludedObjectVersions = InventoryIncludedObjectVersions.Current;

            _ossClient.SetBucketInventoryConfiguration(new SetBucketInventoryConfigurationRequest(_bucketName, config));

            result = _ossClient.GetBucketInventoryConfiguration(new GetBucketInventoryConfigurationRequest(_bucketName, config.Id));

            Assert.AreEqual(result.Configuration.Id, "report1");
            Assert.AreEqual(result.Configuration.IsEnabled, false);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Format, InventoryFormat.CSV);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.AccountId, Config.RamUID);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.RoleArn, Config.RamRoleArn);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Bucket, _bucketName2);
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Prefix, "prefix1");
            Assert.AreEqual(result.Configuration.Destination.OSSBucketDestination.Encryption, null);
            Assert.AreEqual(result.Configuration.Schedule.Frequency, InventoryFrequency.Weekly);
            Assert.AreEqual(result.Configuration.Filter.Prefix, "");
            Assert.AreEqual(result.Configuration.IncludedObjectVersions, InventoryIncludedObjectVersions.Current);
            Assert.AreEqual(result.Configuration.OptionalFields.Count, 0);

            _ossClient.DeleteBucketInventoryConfiguration(new DeleteBucketInventoryConfigurationRequest(_bucketName, config.Id));

            try
            {
                _ossClient.GetBucketInventoryConfiguration(new GetBucketInventoryConfigurationRequest(_bucketName, config.Id));
                Assert.Fail("should not here");
            }
            catch (OssException e)
            {
                Assert.AreEqual(e.ErrorCode, "NoSuchInventory");
            }
        }
        internal static InventoryConfiguration ToInventoryConfiguration(InventoryConfigurationModel model)
        {
            var config = new InventoryConfiguration()
            {
                Id        = model.Id,
                IsEnabled = model.IsEnabled,
                IncludedObjectVersions = model.IncludedObjectVersions,
            };

            if (model.Schedule != null)
            {
                config.Schedule = new InventorySchedule(model.Schedule.Frequency);
            }

            if (model.Filter != null)
            {
                config.Filter = new InventoryFilter(model.Filter.Prefix);
            }

            if (model.Destination != null && model.Destination.OSSBucketDestination != null)
            {
                var ossDst = new InventoryOSSBucketDestination
                {
                    Format    = model.Destination.OSSBucketDestination.Format,
                    AccountId = model.Destination.OSSBucketDestination.AccountId,
                    RoleArn   = model.Destination.OSSBucketDestination.RoleArn,
                    Bucket    = ToInventoryBucketShortName(model.Destination.OSSBucketDestination.Bucket),
                    Prefix    = model.Destination.OSSBucketDestination.Prefix
                };

                if (model.Destination.OSSBucketDestination.Encryption != null)
                {
                    if (model.Destination.OSSBucketDestination.Encryption.SSEKMS != null)
                    {
                        ossDst.Encryption = new InventoryEncryption(
                            new InventorySSEKMS(model.Destination.OSSBucketDestination.Encryption.SSEKMS.KeyId));
                    }
                    else if (model.Destination.OSSBucketDestination.Encryption.SSEOSS != null)
                    {
                        ossDst.Encryption = new InventoryEncryption(new InventorySSEOSS());
                    }
                    else
                    {
                        ossDst.Encryption = new InventoryEncryption();
                    }
                }

                config.Destination = new InventoryDestination()
                {
                    OSSBucketDestination = ossDst
                };
            }

            var fields = new List <InventoryOptionalField>();

            if (model.OptionalFields != null && model.OptionalFields.Fields != null)
            {
                foreach (var e in model.OptionalFields.Fields)
                {
                    fields.Add(e);
                }
            }
            config.OptionalFields = fields;

            return(config);
        }