ALPNConfigurationTests.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright 2021, 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. #if canImport(NIOSSL)
  17. @testable import GRPC
  18. import NIOSSL
  19. import XCTest
  20. class ALPNConfigurationTests: GRPCTestCase {
  21. private func assertExpectedClientALPNTokens(in tokens: [String]) {
  22. XCTAssertEqual(tokens, ["grpc-exp", "h2"])
  23. }
  24. private func assertExpectedServerALPNTokens(in tokens: [String]) {
  25. XCTAssertEqual(tokens, ["grpc-exp", "h2", "http/1.1"])
  26. }
  27. func testClientDefaultALPN() {
  28. let config = GRPCTLSConfiguration.makeClientConfigurationBackedByNIOSSL()
  29. self.assertExpectedClientALPNTokens(
  30. in: config.nioConfiguration!.configuration.applicationProtocols
  31. )
  32. }
  33. func testClientAddsTokensFromEmptyNIOSSLConfig() {
  34. let tlsConfig = TLSConfiguration.makeClientConfiguration()
  35. XCTAssertTrue(tlsConfig.applicationProtocols.isEmpty)
  36. let config = GRPCTLSConfiguration.makeClientConfigurationBackedByNIOSSL(
  37. configuration: tlsConfig
  38. )
  39. // Should now contain expected config.
  40. self.assertExpectedClientALPNTokens(
  41. in: config.nioConfiguration!.configuration.applicationProtocols
  42. )
  43. }
  44. func testClientDoesNotOverrideNonEmptyNIOSSLConfig() {
  45. var tlsConfig = TLSConfiguration.makeClientConfiguration()
  46. tlsConfig.applicationProtocols = ["foo"]
  47. let config = GRPCTLSConfiguration.makeClientConfigurationBackedByNIOSSL(
  48. configuration: tlsConfig
  49. )
  50. // Should not be overridden.
  51. XCTAssertEqual(config.nioConfiguration!.configuration.applicationProtocols, ["foo"])
  52. }
  53. func testServerDefaultALPN() {
  54. let config = GRPCTLSConfiguration.makeServerConfigurationBackedByNIOSSL(
  55. certificateChain: [],
  56. privateKey: .file("")
  57. )
  58. self.assertExpectedServerALPNTokens(
  59. in: config.nioConfiguration!.configuration.applicationProtocols
  60. )
  61. }
  62. func testServerAddsTokensFromEmptyNIOSSLConfig() {
  63. let tlsConfig = TLSConfiguration.makeServerConfiguration(
  64. certificateChain: [],
  65. privateKey: .file("")
  66. )
  67. XCTAssertTrue(tlsConfig.applicationProtocols.isEmpty)
  68. let config = GRPCTLSConfiguration.makeServerConfigurationBackedByNIOSSL(
  69. configuration: tlsConfig
  70. )
  71. // Should now contain expected config.
  72. self.assertExpectedServerALPNTokens(
  73. in: config.nioConfiguration!.configuration.applicationProtocols
  74. )
  75. }
  76. func testServerDoesNotOverrideNonEmptyNIOSSLConfig() {
  77. var tlsConfig = TLSConfiguration.makeServerConfiguration(
  78. certificateChain: [],
  79. privateKey: .file("")
  80. )
  81. tlsConfig.applicationProtocols = ["foo"]
  82. let config = GRPCTLSConfiguration.makeServerConfigurationBackedByNIOSSL(
  83. configuration: tlsConfig
  84. )
  85. // Should not be overridden.
  86. XCTAssertEqual(config.nioConfiguration!.configuration.applicationProtocols, ["foo"])
  87. }
  88. }
  89. #endif // canImport(NIOSSL)