Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ extension StorageClient {
} catch {
throw RequestError.io(error)
}
if response.status == .serviceUnavailable {
if response.isError() {
throw await response.decodeError()
}
let object = try await handleObjectResponse(response: response)
Expand Down Expand Up @@ -225,7 +225,7 @@ extension StorageClient {
guard statusCode == 200,
let location = startResponse.headers.first(name: "Location")
else {
if statusCode == 503 {
if startResponse.isError() {
throw await startResponse.decodeError()
}
let startData = try await startResponse.data()
Expand Down Expand Up @@ -257,7 +257,7 @@ extension StorageClient {
} else if statusCode == 308 {
let queryStatus = try parseResumableUploadQueryStatus(from: queryResponse.headers)
return (.inprogress(UInt64(queryStatus.nextOffset)), queryStatus.crc32cSeed)
} else if statusCode == 503 {
} else if queryResponse.isError() {
throw await queryResponse.decodeError()
} else {
let queryData = try await queryResponse.data()
Expand Down Expand Up @@ -341,7 +341,7 @@ extension StorageClient {
)
)
return (.inprogress(UInt64(nextOffset)), crc32cSeed)
} else if statusCode == 503 {
} else if uploadResponse.isError() {
throw await uploadResponse.decodeError()
} else {
let uploadData = try await uploadResponse.data()
Expand Down Expand Up @@ -827,13 +827,10 @@ extension StorageClient {
async throws
-> Object
{
let statusCode = Int(response.status.code)
let data = try await response.data()
guard (200..<300).contains(statusCode) else {
let message = String(data: data, encoding: .utf8) ?? ""
throw UploadError.unexpectedServerResponse(
statusCode: statusCode, message: message)
if response.isError() {
throw await response.decodeError()
}
let data = try await response.data()
let decoder = GoogleCloudWkt._ProtoJSONDecoder()
let v1Object = try decoder.decode(ObjectV1Response.self, from: data)
return v1Object.toObject()
Expand Down
28 changes: 16 additions & 12 deletions packages/storage/Tests/ChecksumTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,14 @@ import Testing
let uploadOptions = UploadOptions().with { $0.validation = .crc32c }
let task = client.upload(source, to: bucket, as: objectName, options: uploadOptions)

do {
_ = try await task.value
Issue.record("Expected upload to fail with unexpected server response")
} catch UploadError.unexpectedServerResponse(let statusCode, let message) {
#expect(statusCode == 400)
#expect(message == errorMessage)
let error = await expectError(RequestError.self) {
try await task.value
}
if case .http(let details) = error {
#expect(details.http_status_code == 400)
#expect(String(data: details.payload, encoding: .utf8) == errorMessage)
} else {
Issue.record("Expected .http RequestError, got \(String(describing: error))")
}
}

Expand Down Expand Up @@ -144,12 +146,14 @@ import Testing
let uploadOptions = UploadOptions().with { $0.validation = .md5 }
let task = client.upload(source, to: bucket, as: objectName, options: uploadOptions)

do {
_ = try await task.value
Issue.record("Expected upload to fail with unexpected server response")
} catch UploadError.unexpectedServerResponse(let statusCode, let message) {
#expect(statusCode == 400)
#expect(message == errorMessage)
let error = await expectError(RequestError.self) {
try await task.value
}
if case .http(let details) = error {
#expect(details.http_status_code == 400)
#expect(String(data: details.payload, encoding: .utf8) == errorMessage)
} else {
Issue.record("Expected .http RequestError, got \(String(describing: error))")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
// limitations under the License.

import Foundation
import GoogleCloudGax
@testable import GoogleCloudStorage
import Testing

Expand Down Expand Up @@ -482,11 +483,16 @@ import Testing
do {
_ = try await task.value
Issue.record("Expected GCS to reject upload with bad checksum, but it succeeded")
} catch UploadError.unexpectedServerResponse(let statusCode, let message) {
#expect(statusCode == 400)
print("GCS correctly rejected bad checksum: \(message)")
} catch RequestError.service(let serviceError) {
#expect(serviceError.message.contains("doesn't match"))
print("GCS correctly rejected bad checksum: \(serviceError.message)")
} catch RequestError.http(let details) {
#expect(details.http_status_code == 400)
print(
"GCS correctly rejected bad checksum: \(String(data: details.payload, encoding: .utf8) ?? "")"
)
} catch {
Issue.record("Expected UploadError.unexpectedServerResponse, but got \(error)")
Issue.record("Expected RequestError, but got \(error)")
}
}

Expand Down
Loading
Loading