GRPCChannelHandlerTests.swift 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Foundation
  2. import XCTest
  3. import NIO
  4. import NIOHTTP1
  5. @testable import GRPC
  6. class GRPCChannelHandlerTests: GRPCChannelHandlerResponseCapturingTestCase {
  7. func testUnimplementedMethodReturnsUnimplementedStatus() throws {
  8. let responses = try waitForGRPCChannelHandlerResponses(count: 1) { channel in
  9. let requestHead = HTTPRequestHead(version: .init(major: 2, minor: 0), method: .POST, uri: "unimplementedMethodName")
  10. try channel.writeInbound(RawGRPCServerRequestPart.head(requestHead))
  11. }
  12. let expectedError = GRPCServerError.unimplementedMethod("unimplementedMethodName")
  13. XCTAssertEqual([expectedError], errorCollector.asGRPCServerErrors)
  14. responses[0].assertStatus { status in
  15. assertEqualStatusIgnoringTrailers(status, expectedError.asGRPCStatus())
  16. }
  17. }
  18. func testImplementedMethodReturnsHeadersMessageAndStatus() throws {
  19. let responses = try waitForGRPCChannelHandlerResponses(count: 3) { channel in
  20. let requestHead = HTTPRequestHead(version: .init(major: 2, minor: 0), method: .POST, uri: "/echo.Echo/Get")
  21. try channel.writeInbound(RawGRPCServerRequestPart.head(requestHead))
  22. let request = Echo_EchoRequest.with { $0.text = "echo!" }
  23. let requestData = try request.serializedData()
  24. var buffer = channel.allocator.buffer(capacity: requestData.count)
  25. buffer.writeBytes(requestData)
  26. try channel.writeInbound(RawGRPCServerRequestPart.message(buffer))
  27. }
  28. responses[0].assertHeaders()
  29. responses[1].assertMessage()
  30. responses[2].assertStatus { status in
  31. XCTAssertEqual(status.code, .ok)
  32. }
  33. }
  34. func testImplementedMethodReturnsStatusForBadlyFormedProto() throws {
  35. let responses = try waitForGRPCChannelHandlerResponses(count: 2) { channel in
  36. let requestHead = HTTPRequestHead(version: .init(major: 2, minor: 0), method: .POST, uri: "/echo.Echo/Get")
  37. try channel.writeInbound(RawGRPCServerRequestPart.head(requestHead))
  38. var buffer = channel.allocator.buffer(capacity: 3)
  39. buffer.writeBytes([1, 2, 3])
  40. try channel.writeInbound(RawGRPCServerRequestPart.message(buffer))
  41. }
  42. let expectedError = GRPCServerError.requestProtoDeserializationFailure
  43. XCTAssertEqual([expectedError], errorCollector.asGRPCServerErrors)
  44. responses[0].assertHeaders()
  45. responses[1].assertStatus { status in
  46. assertEqualStatusIgnoringTrailers(status, expectedError.asGRPCStatus())
  47. }
  48. }
  49. }