public PublicAccessPreventionTest(StorageFixture fixture) => _fixture = fixture;
示例#2
0
 public NotificationsTest(StorageFixture fixture) => _fixture = fixture;
        private static void PutWithCustomerSuppliedEncryptionKeysTest_Common(StorageFixture fixture, SigningVersion signingVersion, [CallerMemberName] string caller = null)
        {
            var    bucket  = fixture.SingleVersionBucket;
            var    name    = IdGenerator.FromGuid();
            var    content = fixture.SmallContent;
            string url     = null;

            EncryptionKey key = EncryptionKey.Generate();

            Func <HttpRequestMessage> createPutRequest = () =>
            {
                var request = new HttpRequestMessage
                {
                    Method  = HttpMethod.Put,
                    Content = new ByteArrayContent(content)
                };
                key.ModifyRequest(request);
                return(request);
            };

            fixture.RegisterDelayTest(
                s_duration,
                beforeDelay: async duration =>
            {
                // We don't need to specify the encryption key headers explicitly in the signer template.
                // The request message we are using in the template already has them set
                // (by key.ModifyRequest(request)) and the signer will extract them from there.
                var request         = createPutRequest();
                var requestTemplate = RequestTemplate
                                      .FromBucket(bucket)
                                      .WithObjectName(name)
                                      .WithHttpRequestMessage(request);
                url = fixture.UrlSigner.Sign(requestTemplate, Options.FromDuration(duration).WithSigningVersion(signingVersion));

                // Verify that the URL works initially.
                request.RequestUri = new Uri(url);
                var response       = await fixture.HttpClient.SendAsync(request);
                await VerifyResponseAsync(response);

                // Make sure the encryption succeeded.
                var downloadedContent = new MemoryStream();
                await Assert.ThrowsAsync <GoogleApiException>(
                    () => fixture.Client.DownloadObjectAsync(bucket, name, downloadedContent));

                await fixture.Client.DownloadObjectAsync(bucket, name, downloadedContent, new DownloadObjectOptions {
                    EncryptionKey = key
                });
                AssertContentEqual(content, downloadedContent.ToArray());
            },
                afterDelay: async() =>
            {
                // Verify that the URL no longer works.
                var request        = createPutRequest();
                request.RequestUri = new Uri(url);
                var response       = await fixture.HttpClient.SendAsync(request);
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

                // Cleanup
                await fixture.Client.DeleteObjectAsync(bucket, name);
            },
                caller);
        }
示例#4
0
 public StorageClassTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
        private static void PutWithCustomHeadersTest_Common(StorageFixture fixture, UrlSigner signer, [CallerMemberName] string caller = null)
        {
            var    bucket  = fixture.SingleVersionBucket;
            var    name    = IdGenerator.FromGuid();
            var    content = fixture.SmallContent;
            string url     = null;

            Func <HttpRequestMessage> createRequest = () =>
            {
                using (var md5 = MD5.Create())
                {
                    return(new HttpRequestMessage()
                    {
                        Content = new ByteArrayContent(content)
                        {
                            Headers =
                            {
                                { "Content-MD5",          Convert.ToBase64String(md5.ComputeHash(content)) },
                                { "Content-Type",         "text/plain"                                     },
                                { "x-goog-z-content-foo", "val1"                                           },
                                { "x-goog-a-content-bar", "val2"                                           },
                                { "x-goog-foo",           new [] { "val3", "val4"                          } }
                            }
                        },
                        Method = HttpMethod.Put,
                        Headers =
                        {
                            { "x-goog-foo2", "xy\r\n z"   },
                            { "x-goog-bar",  "  12345   " },
                            { "x-goog-foo2", new [] { "A B  C", "def"} }
                        }
                    });
                }
            };

            fixture.RegisterDelayTest(
                s_duration,
                beforeDelay: async duration =>
            {
                var request        = createRequest();
                url                = signer.Sign(bucket, name, duration, request);
                request.RequestUri = new Uri(url);

                // Verify that the URL works initially.
                var response = await fixture.HttpClient.SendAsync(request);
                await VerifyResponseAsync(response);
                var result = new MemoryStream();
                await fixture.Client.DownloadObjectAsync(bucket, name, result);
                AssertContentEqual(fixture.SmallContent, result.ToArray());

                // Reset the state.
                await fixture.Client.DeleteObjectAsync(bucket, name);
            },
                afterDelay: async() =>
            {
                // Verify that the URL no longer works.
                var request        = createRequest();
                request.RequestUri = new Uri(url);
                var response       = await fixture.HttpClient.SendAsync(request);
                Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                var obj = await fixture.Client.ListObjectsAsync(bucket, name).FirstOrDefault(o => o.Name == name);
                Assert.Null(obj);
            },
                caller);
        }
 public UrlSignerTest(StorageFixture fixture)
 {
     _fixture = fixture;
     _fixture.RegisterDelayTests(this);
 }
示例#7
0
 public UniformBucketLevelAccessTest(StorageFixture fixture) => _fixture = fixture;
示例#8
0
 public EncryptionTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
示例#9
0
 public ModifyBucketLabelsTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
示例#10
0
 public RequesterPaysTest(StorageFixture fixture)
 {
     _fixture = fixture;
     _skip    = _fixture.RequesterPaysBucket == null;
 }
 public HmacKeysTest(StorageFixture fixture) => _fixture = fixture;
示例#12
0
 public CopyObjectTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
示例#13
0
 public PatchObjectTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
 public ListObjectsTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
示例#15
0
 public KmsTest(StorageFixture fixture) => _fixture = fixture;
 public ListBucketsTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
 public DeleteObjectTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
        private static void PutTest_Common(StorageFixture fixture, UrlSigner signer, [CallerMemberName] string caller = null)
        {
            Func <Task> expireAction1 = null;
            Func <Task> expireAction2 = null;
            Func <Task> expireAction3 = null;
            Func <Task> expireAction4 = null;

            fixture.RegisterDelayTest(
                s_duration,
                beforeDelay: async duration =>
            {
                expireAction1 = await PutTestHelper(duration, useContentMD5: false, useContentType: false);
                expireAction2 = await PutTestHelper(duration, useContentMD5: true, useContentType: false);
                expireAction3 = await PutTestHelper(duration, useContentMD5: false, useContentType: true);
                expireAction4 = await PutTestHelper(duration, useContentMD5: true, useContentType: true);
            },
                afterDelay: async() =>
            {
                await expireAction1();
                await expireAction2();
                await expireAction3();
                await expireAction4();
            },
                caller);

            async Task <Func <Task> > PutTestHelper(TimeSpan duration, bool useContentMD5, bool useContentType)
            {
                var bucket = fixture.SingleVersionBucket;
                var name   = IdGenerator.FromGuid();
                var data   = fixture.SmallContent;

                Func <ByteArrayContent> createPutContent = () =>
                {
                    var putContent = new ByteArrayContent(data);
                    if (useContentMD5)
                    {
                        using (var md5 = MD5.Create())
                        {
                            putContent.Headers.ContentMD5 = md5.ComputeHash(data);
                        }
                    }
                    if (useContentType)
                    {
                        putContent.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                    }
                    return(putContent);
                };
                var content = createPutContent();
                var url     = signer.Sign(
                    bucket,
                    name,
                    duration,
                    HttpMethod.Put,
                    contentHeaders: content.Headers.ToDictionary(h => h.Key, h => h.Value));

                // Verify that the URL works initially.
                var response = await fixture.HttpClient.PutAsync(url, content);

                await VerifyResponseAsync(response);

                var result = new MemoryStream();
                await fixture.Client.DownloadObjectAsync(bucket, name, result);

                AssertContentEqual(data, result.ToArray());

                // Reset the state and wait until the URL expires.
                await fixture.Client.DeleteObjectAsync(bucket, name);

                return(async() =>
                {
                    // Verify that the URL no longer works.
                    content = createPutContent();
                    response = await fixture.HttpClient.PutAsync(url, content);

                    Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
                    var obj = await fixture.Client.ListObjectsAsync(bucket, name).FirstOrDefault(o => o.Name == name);

                    Assert.Null(obj);
                });
            }
        }
示例#19
0
 public UpdateObjectTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
        private static void ResumableUploadWithCustomerSuppliedEncryptionKeysTest_Common(StorageFixture fixture, UrlSigner signer, [CallerMemberName] string caller = null)
        {
            var    bucket  = fixture.SingleVersionBucket;
            var    name    = IdGenerator.FromGuid();
            var    content = fixture.SmallContent;
            string url     = null;

            EncryptionKey key = EncryptionKey.Generate();

            fixture.RegisterDelayTest(
                s_duration,
                beforeDelay: async duration =>
            {
                url = signer.Sign(
                    bucket,
                    name,
                    duration,
                    UrlSigner.ResumableHttpMethod,
                    requestHeaders: new Dictionary <string, IEnumerable <string> > {
                    { "x-goog-encryption-algorithm", new [] { "AES256" } }
                });

                // Verify that the URL works initially.
                var uploader = SignedUrlResumableUpload.Create(
                    url,
                    new MemoryStream(content),
                    new ResumableUploadOptions {
                    ModifySessionInitiationRequest = key.ModifyRequest
                });
                var progress = await uploader.UploadAsync();
                Assert.Null(progress.Exception);
                Assert.Equal(UploadStatus.Completed, progress.Status);

                // Make sure the encryption succeeded.
                var downloadedData = new MemoryStream();
                await Assert.ThrowsAsync <GoogleApiException>(
                    () => fixture.Client.DownloadObjectAsync(bucket, name, downloadedData));

                await fixture.Client.DownloadObjectAsync(bucket, name, downloadedData, new DownloadObjectOptions {
                    EncryptionKey = key
                });
                AssertContentEqual(content, downloadedData.ToArray());
            },
                afterDelay: async() =>
            {
                var uploader = SignedUrlResumableUpload.Create(
                    url,
                    new MemoryStream(content),
                    new ResumableUploadOptions {
                    ModifySessionInitiationRequest = key.ModifyRequest
                });

                // Verify that the URL no longer works.
                var progress = await uploader.UploadAsync();
                Assert.Equal(UploadStatus.Failed, progress.Status);
                Assert.IsType <GoogleApiException>(progress.Exception);
            },
                caller);
        }
示例#21
0
 public DeleteBucketTest(StorageFixture fixture) => _fixture = fixture;
 public DownloadObjectTest(StorageFixture fixture)
 {
     _fixture = fixture;
 }
 public UnauthenticatedAccessTest(StorageFixture fixture) => _fixture = fixture;