| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | using Google; |
| | using Google.Apis.Http; |
| | using Google.Apis.Logging; |
| | using Google.Apis.Requests; |
| | using Google.Apis.Services; |
| | using Google.Apis.Storage.v1; |
| | using Google.Apis.Storage.v1.Data; |
| | using Google.Apis.Tests.Mocks; |
| | using Google.Apis.Upload; |
| | using IntegrationTests.Utils; |
| | using System; |
| | using System.Collections.Generic; |
| | using System.IO; |
| | using System.Text; |
| | using Xunit; |
| |
|
| | namespace IntegrationTests |
| | { |
| | public class StorageApiTests |
| | { |
| | [Fact] |
| | public void PrettyPrinting() |
| | { |
| | StorageService client = new StorageService(new BaseClientService.Initializer |
| | { |
| | HttpClientInitializer = Helper.GetServiceCredential().CreateScoped(StorageService.Scope.DevstorageFullControl), |
| | ApplicationName = "IntegrationTest" |
| | }); |
| | var memLog = new MemoryLogger(LogLevel.All, clock: new MockClock(DateTime.UtcNow)); |
| | client.HttpClient.MessageHandler.InstanceLogger = memLog; |
| | client.HttpClient.MessageHandler.LogEvents = ConfigurableMessageHandler.LogEventType.ResponseBody; |
| | var req = client.Buckets.List(Helper.GetProjectId()).Configure(req => req.PrettyPrint = true); |
| | |
| | var resp = req.Execute(); |
| | var entry = Assert.Single(memLog.LogEntries); |
| | |
| | Assert.Contains(" ", entry.Split(new[] { "Body: " }, StringSplitOptions.None)[1]); |
| |
|
| | req.PrettyPrint = null; |
| | resp = req.Execute(); |
| | Assert.Equal(2, memLog.LogEntries.Count); |
| | entry = memLog.LogEntries[1]; |
| | |
| | Assert.Contains(" ", entry.Split(new[] { "Body: " }, StringSplitOptions.None)[1]); |
| |
|
| | req.PrettyPrint = false; |
| | resp = req.Execute(); |
| | Assert.Equal(3, memLog.LogEntries.Count); |
| | entry = memLog.LogEntries[2]; |
| | |
| | Assert.DoesNotContain(" ", entry.Split(new[] { "Body: " }, StringSplitOptions.None)[1]); |
| | } |
| |
|
| | private const string TestBucketPrefix = "testbucket"; |
| |
|
| | private Bucket CreateTestBucket(StorageService client) |
| | { |
| | var name = $"{TestBucketPrefix}-{Guid.NewGuid()}"; |
| | return client.Buckets.Insert(new Bucket { Name = name }, Helper.GetProjectId()).Execute(); |
| | } |
| |
|
| | private void DeleteTestBuckets(StorageService client) |
| | { |
| | foreach (var bucket in client.Buckets.List(Helper.GetProjectId()).Execute().Items) |
| | { |
| | if (bucket.Name.StartsWith(TestBucketPrefix, StringComparison.Ordinal)) |
| | { |
| | try |
| | { |
| | client.Buckets.Delete(bucket.Name).Execute(); |
| | } |
| | catch (Exception e) |
| | { |
| | Console.WriteLine($"DeleteTestBuckets exception: {e}"); |
| | } |
| | } |
| | } |
| | } |
| |
|
| | |
| | [Fact(Skip = "GCS etag If-Match/If-None-Match support is currently broken.")] |
| | public void ETags() |
| | { |
| | StorageService client = new StorageService(new BaseClientService.Initializer |
| | { |
| | HttpClientInitializer = Helper.GetServiceCredential().CreateScoped(StorageService.Scope.DevstorageFullControl), |
| | ApplicationName = "IntegrationTest", |
| | }); |
| | var bucket = CreateTestBucket(client); |
| | try |
| | { |
| | |
| | bucket.Labels = new Dictionary<string, string> { ["label"] = "1" }; |
| | var req1 = client.Buckets.Patch(bucket, bucket.Name) |
| | .Configure(req => req.ETagAction = Google.Apis.ETagAction.IfNoneMatch); |
| |
|
| | var ex1 = Assert.Throws<GoogleApiException>(() => req1.Execute()); |
| |
|
| | Assert.Contains("[Precondition Failed", ex1.Message); |
| | |
| | var bucket1 = client.Buckets.Get(bucket.Name).Execute(); |
| | Assert.Empty(bucket1.Labels.EmptyIfNull()); |
| | Assert.Equal(bucket.ETag, bucket1.ETag); |
| | |
| | var bucket2 = client.Buckets.Patch(bucket, bucket.Name) |
| | .Configure(req => req.ETagAction = Google.Apis.ETagAction.IfMatch) |
| | .Execute(); |
| |
|
| | |
| | Assert.NotEmpty(bucket2.Labels.EmptyIfNull()); |
| | Assert.NotEqual(bucket.ETag, bucket2.ETag); |
| | |
| | var req3 = client.Buckets.Patch(bucket, bucket.Name) |
| | .Configure(req => req.ETagAction = Google.Apis.ETagAction.IfMatch); |
| | |
| | var ex3 = Assert.Throws<GoogleApiException>(() => req3.Execute()); |
| | Assert.Contains("[Precondition Failed", ex3.Message); |
| | } |
| | finally |
| | { |
| | DeleteTestBuckets(client); |
| | } |
| | } |
| |
|
| | [Fact] |
| | public void UriEscaping() |
| | { |
| | StorageService client = new StorageService(new BaseClientService.Initializer |
| | { |
| | HttpClientInitializer = Helper.GetServiceCredential().CreateScoped(StorageService.Scope.DevstorageFullControl), |
| | ApplicationName = "IntegrationTest", |
| | }); |
| | var bucket = CreateTestBucket(client); |
| | try |
| | { |
| | const string name = "foo [baz] "; |
| | var obj = new Google.Apis.Storage.v1.Data.Object { Name = name }; |
| | var data = "Hello test!"; |
| | |
| | var stUpload = new MemoryStream(Encoding.ASCII.GetBytes(data)); |
| | var progress = client.Objects.Insert(obj, bucket.Name, stUpload, "text/plain").Upload(); |
| | Assert.Equal(UploadStatus.Completed, progress.Status); |
| | Assert.Equal(stUpload.Length, progress.BytesSent); |
| | |
| | var stDownload = new MemoryStream(); |
| | client.Objects.Get(bucket.Name, name).Download(stDownload); |
| | Assert.Equal(stUpload.ToArray(), stDownload.ToArray()); |
| | } |
| | finally |
| | { |
| | DeleteTestBuckets(client); |
| | } |
| | } |
| | } |
| | } |
| |
|