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."); }
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."); }