| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /*
- * Copyright 2022, gRPC Authors All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import NIOEmbedded
- import XCTest
- @testable import GRPC
- final class ServerInterceptorStateMachineTests: GRPCTestCase {
- func testInterceptRequestMetadataWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptRequestMetadata().assertCancel() // Can't receive metadata twice.
- }
- func testInterceptRequestMessageWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMessage().assertCancel()
- }
- func testInterceptRequestEndWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestEnd().assertIntercept()
- stateMachine.interceptRequestEnd().assertCancel() // Can't receive end twice.
- }
- func testInterceptedRequestMetadataWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptedRequestMetadata().assertCancel() // Can't intercept metadata twice.
- }
- func testInterceptedRequestMessageWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- for _ in 0 ..< 100 {
- stateMachine.interceptRequestMessage().assertIntercept()
- stateMachine.interceptedRequestMessage().assertForward()
- }
- }
- func testInterceptedRequestEndWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptRequestEnd().assertIntercept()
- stateMachine.interceptedRequestEnd().assertForward()
- stateMachine.interceptedRequestEnd().assertCancel() // Can't intercept end twice.
- }
- func testInterceptResponseMetadataWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptResponseMetadata().assertCancel()
- }
- func testInterceptedResponseMetadataWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptedResponseMetadata().assertForward()
- stateMachine.interceptedResponseMetadata().assertCancel()
- }
- func testInterceptResponseMessageWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptResponseMessage().assertIntercept()
- }
- func testInterceptedResponseMessageWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptedResponseMetadata().assertForward()
- stateMachine.interceptResponseMessage().assertIntercept()
- stateMachine.interceptedResponseMessage().assertForward()
- // Still fine: interceptor could insert extra message.
- stateMachine.interceptedResponseMessage().assertForward()
- }
- func testInterceptResponseStatusWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptResponseMessage().assertIntercept()
- stateMachine.interceptResponseStatus().assertIntercept()
- stateMachine.interceptResponseMessage().assertCancel()
- stateMachine.interceptResponseStatus().assertCancel()
- }
- func testInterceptedResponseStatusWhenIntercepting() {
- var stateMachine = ServerInterceptorStateMachine()
- stateMachine.interceptRequestMetadata().assertIntercept()
- stateMachine.interceptedRequestMetadata().assertForward()
- stateMachine.interceptResponseMetadata().assertIntercept()
- stateMachine.interceptedResponseMetadata().assertForward()
- stateMachine.interceptResponseStatus().assertIntercept()
- stateMachine.interceptedResponseStatus().assertForward()
- }
- func testAllOperationsDropWhenFinished() {
- var stateMachine = ServerInterceptorStateMachine()
- // Get to the finished state.
- stateMachine.cancel().assertSendStatusThenNilOutInterceptorPipeline()
- stateMachine.interceptRequestMetadata().assertDrop()
- stateMachine.interceptedRequestMetadata().assertDrop()
- stateMachine.interceptRequestMessage().assertDrop()
- stateMachine.interceptedRequestMessage().assertDrop()
- stateMachine.interceptRequestEnd().assertDrop()
- stateMachine.interceptedRequestEnd().assertDrop()
- stateMachine.interceptResponseMetadata().assertDrop()
- stateMachine.interceptedResponseMetadata().assertDrop()
- stateMachine.interceptResponseMessage().assertDrop()
- stateMachine.interceptedResponseMessage().assertDrop()
- stateMachine.interceptResponseStatus().assertDrop()
- stateMachine.interceptedResponseStatus().assertDrop()
- }
- }
- extension ServerInterceptorStateMachine.InterceptAction {
- func assertIntercept() {
- XCTAssertEqual(self, .intercept)
- }
- func assertCancel() {
- XCTAssertEqual(self, .cancel)
- }
- func assertDrop() {
- XCTAssertEqual(self, .drop)
- }
- }
- extension ServerInterceptorStateMachine.InterceptedAction {
- func assertForward() {
- XCTAssertEqual(self, .forward)
- }
- func assertCancel() {
- XCTAssertEqual(self, .cancel)
- }
- func assertDrop() {
- XCTAssertEqual(self, .drop)
- }
- }
- extension ServerInterceptorStateMachine.CancelAction {
- func assertSendStatusThenNilOutInterceptorPipeline() {
- XCTAssertEqual(self, .sendStatusThenNilOutInterceptorPipeline)
- }
- func assertNilOutInterceptorPipeline() {
- XCTAssertEqual(self, .nilOutInterceptorPipeline)
- }
- }
|