예제 #1
0
        public void TestInitialize()
        {
            // Create S3 Bucket
            BucketName = "sdk-dotnet-integ-test-bucket-firehose" + DateTime.Now.Ticks;
            s3Client.PutBucket(BucketName);

            // Create IAM Role
            RoleName = "NetFirehoseTestRole" + DateTime.Now.Ticks;
            if (string.IsNullOrEmpty(TestAccountId))
            {
                Assert.Fail("TestAccountId must be specified to run these tests");
            }

            var iamCreateResponse = iamClient.CreateRole(new CreateRoleRequest
            {
                RoleName = RoleName,
                AssumeRolePolicyDocument = string.Format(FirehoseAssumeRolePolicyDocumentFormat, TestAccountId)
            });
            string roleArn = iamCreateResponse.Role.Arn;

            Assert.IsNotNull(roleArn);

            // Attach Policy to Role
            PolicyName = "NetFirehoseTestRolePolicy" + DateTime.Now.Ticks;
            iamClient.PutRolePolicy(new PutRolePolicyRequest()
            {
                PolicyDocument = string.Format(RolePolicyDocumentFormat, BucketName),
                PolicyName     = PolicyName,
                RoleName       = RoleName
            });

            // Wait for eventual consistency of role.
            Thread.Sleep(TimeSpan.FromSeconds(10));

            // Create Firehose Delivery Stream
            string bucketArn = "arn:aws:s3:::" + BucketName;

            DeliveryStreamName = "dotnet-test-delivery-stream" + DateTime.Now.Ticks;
            string deliveryStreamArn = Client.CreateDeliveryStream(new CreateDeliveryStreamRequest()
            {
                DeliveryStreamName         = DeliveryStreamName,
                S3DestinationConfiguration = new S3DestinationConfiguration()
                {
                    BucketARN = bucketArn,
                    RoleARN   = roleArn
                }
            }).DeliveryStreamARN;

            if (string.IsNullOrEmpty(deliveryStreamArn))
            {
                Assert.Fail("Expected a deliveryStreamArn value");
            }

            // Wait for Delivery Stream to be active
            DeliveryStreamStatus streamStatus = DeliveryStreamStatus.CREATING;
            var timeout = DateTime.Now.AddSeconds(120);

            while (streamStatus != DeliveryStreamStatus.ACTIVE && DateTime.Now.Ticks < timeout.Ticks)
            {
                streamStatus = Client.DescribeDeliveryStream(new DescribeDeliveryStreamRequest()
                {
                    DeliveryStreamName = DeliveryStreamName
                }).DeliveryStreamDescription.DeliveryStreamStatus;
                Assert.AreNotEqual(streamStatus, DeliveryStreamStatus.DELETING);
                Thread.Sleep(TimeSpan.FromSeconds(2));
            }
            Assert.AreNotEqual(streamStatus, DeliveryStreamStatus.CREATING, "Did not exit CREATING state within time limit.");
        }
예제 #2
0
        public void OneTimeSetUp()
        {
            // Create S3 Bucket
            BucketName = "unity-test-bucket-firehose" + DateTime.Now.Ticks;
            MissingAPILambdaFunctions.CreateBucket(BucketName, TestRunner.RegionEndpoint);

            Exception responseException = new Exception();
            AutoResetEvent ars = new AutoResetEvent(false);

            // Create IAM Role
            RoleName = "UnityFirehoseTestRole" + DateTime.Now.Ticks;
            Utils.AssertFalse(string.IsNullOrEmpty(TestRunner.TestAccountId), "Kinesis Firehose tests require Account ID (set in 'Resources/settings.txt') in order to create an AssumeRolePolicy.");
            string roleArn = UtilityMethods.CreateRoleIfNotExists(iamClient, RoleName, string.Format(UtilityMethods.FirehoseAssumeRolePolicyDocumentFormat, TestRunner.TestAccountId));
            Assert.IsNotNull(roleArn);

            // Attach Policy to Role
            PolicyName = "UnityFirehoseTestRolePolicy" + DateTime.Now.Ticks;
            iamClient.PutRolePolicyAsync(new Amazon.IdentityManagement.Model.PutRolePolicyRequest()
            {
                PolicyDocument = string.Format(RolePolicyDocumentFormat, BucketName),
                PolicyName = PolicyName,
                RoleName = RoleName
            }, (response) =>
            {
                responseException = response.Exception;
                ars.Set();
            }, new AsyncOptions { ExecuteCallbackOnMainThread = false });
            ars.WaitOne();
            Utils.AssertExceptionIsNull(responseException);

            // Create Firehose Delivery Stream
            string bucketArn = "arn:aws:s3:::" + BucketName;
            DeliveryStreamName = "unity-test-delivery-stream" + DateTime.Now.Ticks;
            string deliveryStreamArn = null;
            Client.CreateDeliveryStreamAsync(new CreateDeliveryStreamRequest()
            {
                DeliveryStreamName = DeliveryStreamName,
                S3DestinationConfiguration = new S3DestinationConfiguration()
                {
                    BucketARN = bucketArn,
                    RoleARN = roleArn
                }
            }, (response) =>
            {
                responseException = response.Exception;
                if (responseException == null)
                {
                    deliveryStreamArn = response.Response.DeliveryStreamARN;
                }
                ars.Set();
            }, new AsyncOptions { ExecuteCallbackOnMainThread = false });
            ars.WaitOne();
            Utils.AssertExceptionIsNull(responseException);
            Utils.AssertStringIsNotNullOrEmpty(deliveryStreamArn);

            // Wait for Delivery Stream to be active
            DeliveryStreamStatus streamStatus = DeliveryStreamStatus.CREATING;
            var timeout = DateTime.Now.AddSeconds(120);
            while (streamStatus != DeliveryStreamStatus.ACTIVE && DateTime.Now.Ticks < timeout.Ticks)
            {
                Client.DescribeDeliveryStreamAsync(new DescribeDeliveryStreamRequest()
                {
                    DeliveryStreamName = DeliveryStreamName
                }, (response) =>
                {
                    responseException = response.Exception;
                    if (responseException == null)
                    {
                        streamStatus = response.Response.DeliveryStreamDescription.DeliveryStreamStatus;
                    }
                    ars.Set();
                }, new AsyncOptions { ExecuteCallbackOnMainThread = false });
                ars.WaitOne();
                Utils.AssertExceptionIsNull(responseException);
                Utils.AssertFalse(streamStatus == DeliveryStreamStatus.DELETING, "Delivery stream entered DELETING state unexpectedly.");
                Thread.Sleep(TimeSpan.FromSeconds(2));
            }
            Utils.AssertFalse(streamStatus == DeliveryStreamStatus.CREATING, "Did not exit CREATING state within time limit.");
        }