TestHelpers.swift 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright 2019, gRPC Authors All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import Foundation
  17. import XCTest
  18. import SwiftGRPCNIO
  19. import NIO
  20. import NIOHTTP1
  21. // Assert the given expression does not throw, and validate the return value from that expression.
  22. public func XCTAssertNoThrow<T>(
  23. _ expression: @autoclosure () throws -> T,
  24. _ message: String = "",
  25. file: StaticString = #file,
  26. line: UInt = #line,
  27. validate: (T) -> Void
  28. ) {
  29. var value: T? = nil
  30. XCTAssertNoThrow(try value = expression(), message, file: file, line: line)
  31. value.map { validate($0) }
  32. }
  33. struct CaseExtractError: Error {
  34. let message: String
  35. }
  36. @discardableResult
  37. func extractHeaders(_ response: RawGRPCServerResponsePart) throws -> HTTPHeaders {
  38. guard case .headers(let headers) = response else {
  39. throw CaseExtractError(message: "\(response) did not match .headers")
  40. }
  41. return headers
  42. }
  43. @discardableResult
  44. func extractMessage(_ response: RawGRPCServerResponsePart) throws -> Data {
  45. guard case .message(let message) = response else {
  46. throw CaseExtractError(message: "\(response) did not match .message")
  47. }
  48. return message
  49. }
  50. @discardableResult
  51. func extractStatus(_ response: RawGRPCServerResponsePart) throws -> GRPCStatus {
  52. guard case .status(let status) = response else {
  53. throw CaseExtractError(message: "\(response) did not match .status")
  54. }
  55. return status
  56. }