public PublicAccessPreventionTest(StorageFixture fixture) => _fixture = fixture;
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); }
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); }
public UniformBucketLevelAccessTest(StorageFixture fixture) => _fixture = fixture;
public EncryptionTest(StorageFixture fixture) { _fixture = fixture; }
public ModifyBucketLabelsTest(StorageFixture fixture) { _fixture = fixture; }
public RequesterPaysTest(StorageFixture fixture) { _fixture = fixture; _skip = _fixture.RequesterPaysBucket == null; }
public HmacKeysTest(StorageFixture fixture) => _fixture = fixture;
public CopyObjectTest(StorageFixture fixture) { _fixture = fixture; }
public PatchObjectTest(StorageFixture fixture) { _fixture = fixture; }
public ListObjectsTest(StorageFixture fixture) { _fixture = fixture; }
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); }); } }
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); }
public DeleteBucketTest(StorageFixture fixture) => _fixture = fixture;
public DownloadObjectTest(StorageFixture fixture) { _fixture = fixture; }
public UnauthenticatedAccessTest(StorageFixture fixture) => _fixture = fixture;