Пример #1
0
        public void InvalidConfigurationTests(string arnString, string region, S3ConfigFlags flags, string expectedErrorMessage)
        {
            Exception exception = null;
            IRequest  result    = null;

            try
            {
                var request = new GetObjectRequest
                {
                    BucketName = arnString,
                    Key        = "foo.txt"
                };

                var config = S3ArnTestUtils.BuildFromRegionSystemName(region, flags);

                result = S3ArnTestUtils.RunMockRequest(request, GetObjectRequestMarshaller.Instance, config);
            }
            catch (Exception e)
            {
                exception = e;
            }

            Assert.IsNotNull(exception, "Expected exception, but got result " + result?.Endpoint);
            if (region == string.Empty)
            {
                Assert.IsInstanceOfType(exception, typeof(ArgumentException), "ArgumentException expected");
            }
            else
            {
                Assert.IsInstanceOfType(exception, typeof(AmazonClientException), "AmazonClientException expected");
            }
            Assert.AreEqual(expectedErrorMessage, exception.Message);
        }
Пример #2
0
 public static AmazonS3Config BuildFromRegionSystemName(string region, S3ConfigFlags flags)
 {
     return(new AmazonS3Config
     {
         RegionEndpoint = RegionEndpoint.GetBySystemName(region),
         UseArnRegion = (flags & S3ConfigFlags.ArnRegion) != 0,
         UseDualstackEndpoint = (flags & S3ConfigFlags.Dualstack) != 0,
         UseAccelerateEndpoint = (flags & S3ConfigFlags.Accelerate) != 0,
         DisableMultiregionAccessPoints = (flags & S3ConfigFlags.DisableMRAP) != 0
     });
 }
Пример #3
0
        public void PreSignedUrlTest(string accessPointArn, S3ConfigFlags flags, string expectedHost, string expectedQueryStringPiece, string expectedErrorMessage)
        {
            var request = new GetPreSignedUrlRequest
            {
                BucketName = accessPointArn,
                Key        = "foo.txt",
                Expires    = DateTime.Now.AddDays(1),
                Verb       = HttpVerb.GET
            };

            var config   = S3ArnTestUtils.BuildFromRegionSystemName("us-east-1", flags);
            var s3Client = new AmazonS3Client("access", "secret", config);

            Exception exception = null;
            Uri       uri       = null;

            try
            {
                uri = new Uri(s3Client.GetPreSignedURL(request));
            }
            catch (AmazonClientException e)
            {
                exception = e;
            }

            if (!string.IsNullOrEmpty(expectedHost))
            {
                Assert.IsNull(exception, "Unexpected exception was thrown: " + exception?.Message);

                Assert.IsNotNull(uri);
                Assert.AreEqual(expectedHost, uri.Host);
                Assert.AreEqual("/foo.txt", uri.AbsolutePath);
                Assert.IsTrue(uri.Query.Contains(expectedQueryStringPiece), $"Expected to find {expectedQueryStringPiece} in {uri.Query}");
            }
            else if (!string.IsNullOrEmpty(expectedErrorMessage))
            {
                Assert.IsNotNull(exception);
                Assert.IsInstanceOfType(exception, typeof(AmazonClientException));
                Assert.AreEqual(expectedErrorMessage, exception.Message);
            }
            else
            {
                Assert.Fail($"Bad test setup, {nameof(expectedHost)} or {nameof(expectedErrorMessage)} must be provided");
            }
        }
Пример #4
0
        public void TestOutpostArnVariations(string arnString, string region, S3ConfigFlags flags, string host, string errorMessage)
        {
            var request = new GetObjectRequest
            {
                BucketName = arnString,
                Key        = "foo.txt"
            };

            var config = S3ArnTestUtils.BuildFromRegionSystemName(region, flags);

            Exception exception = null;
            IRequest  result    = null;

            try
            {
                result = S3ArnTestUtils.RunMockRequest(request, GetObjectRequestMarshaller.Instance, config);
            }
            catch (Exception e)
            {
                exception = e;
            }

            if (!string.IsNullOrEmpty(host))
            {
                Assert.IsNull(exception, "Exception was thrown");

                Assert.AreEqual(new Uri($"https://{host}"), result.Endpoint);
                Assert.AreEqual("/foo.txt", result.ResourcePath);
            }
            else if (!string.IsNullOrEmpty(errorMessage))
            {
                Assert.IsNotNull(exception);
                Assert.IsInstanceOfType(exception, typeof(AmazonClientException));
                Assert.AreEqual(errorMessage, exception.Message);
            }
            else
            {
                Assert.Fail($"Bad Test Data, you must provide either {nameof(host)} or {nameof(errorMessage)}");
            }
        }
Пример #5
0
        /// <summary>
        /// Test helper for S3 access point tests
        /// </summary>
        /// <param name="accessPointArn">Access point ARN (BucketName on the request)</param>
        /// <param name="region">Region, to be set on AmazonS3Config's RegionEndpoint</param>
        /// <param name="flags">Bit field of additional AmazonS3Config settings</param>
        /// <param name="host">Expected hostname, will be asserted for valid test cases</param>
        /// <param name="errorMessage">Expected error message, will be asserted for invalid test cases</param>
        /// <returns></returns>
        private IRequest TestAccessPointArnVariationHelper(string accessPointArn, string region, S3ConfigFlags flags, string host, string errorMessage)
        {
            var request = new PutObjectRequest
            {
                BucketName  = accessPointArn,
                Key         = "foo.txt",
                ContentBody = "data"
            };

            var config = S3ArnTestUtils.BuildFromRegionSystemName(region, flags);

            Exception exception         = null;
            IRequest  marshalledRequest = null;

            try
            {
                marshalledRequest = S3ArnTestUtils.RunMockRequest(request, PutObjectRequestMarshaller.Instance, config);
            }
            catch (Exception e)
            {
                exception = e;
            }

            if (!string.IsNullOrEmpty(host))
            {
                Assert.IsNull(exception, "Exception was thrown: " + exception?.Message);

                Assert.AreEqual(new Uri($"https://{host}"), marshalledRequest.Endpoint);
                Assert.AreEqual("/foo.txt", marshalledRequest.ResourcePath);
            }
            else if (!string.IsNullOrEmpty(errorMessage))
            {
                Assert.IsNotNull(exception, "Expected exception, but got result " + marshalledRequest?.Endpoint);
                Assert.IsInstanceOfType(exception, typeof(AmazonClientException));
                Assert.AreEqual(errorMessage, exception.Message);
            }
            else
            {
                Assert.Fail($"Bad Test Data, you must provide either {nameof(host)} or {nameof(errorMessage)}");
            }
            return(marshalledRequest);
        }
Пример #6
0
        public void TestAccessPointArnVariationsWithHeader(string accessPointArn, string region, S3ConfigFlags flags, string host, string expectedHeaderKey, string expectedHeaderValue)
        {
            var internalRequest = TestAccessPointArnVariationHelper(accessPointArn, region, flags, host, "");

            Assert.IsTrue(internalRequest.Headers.ContainsKey(expectedHeaderKey));
            Assert.AreEqual(expectedHeaderValue, internalRequest.Headers[expectedHeaderKey]);
        }
Пример #7
0
 public void TestAccessPointArnVariations(string accessPointArn, string region, S3ConfigFlags flags, string host, string errorMessage)
 {
     TestAccessPointArnVariationHelper(accessPointArn, region, flags, host, errorMessage);
 }