@@ -79,17 +79,80 @@ class ClientSNITests: XCTestCase {
79
79
80
80
func testSNIIsRejectedForIPv4Addresses( ) throws {
81
81
let context = try configuredSSLContext ( )
82
-
83
- XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: " 192.168.0.1 " ) ) { error in
82
+
83
+ let testString = " 192.168.0.1 "
84
+ XCTAssertThrowsError ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) ) { error in
85
+ XCTAssertEqual ( . cannotUseIPAddressInSNI, error as? NIOSSLExtraError )
86
+ }
87
+ XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: testString) ) { error in
84
88
XCTAssertEqual ( . cannotUseIPAddressInSNI, error as? NIOSSLExtraError )
85
89
}
86
90
}
87
91
88
92
func testSNIIsRejectedForIPv6Addresses( ) throws {
89
93
let context = try configuredSSLContext ( )
90
94
91
- XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: " fe80::200:f8ff:fe21:67cf " ) ) { error in
95
+ let testString = " fe80::200:f8ff:fe21:67cf "
96
+ XCTAssertThrowsError ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) ) { error in
92
97
XCTAssertEqual ( . cannotUseIPAddressInSNI, error as? NIOSSLExtraError )
93
98
}
99
+ XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: testString) ) { error in
100
+ XCTAssertEqual ( . cannotUseIPAddressInSNI, error as? NIOSSLExtraError )
101
+ }
102
+
103
+ }
104
+
105
+ func testSNIIsRejectedForEmptyHostname( ) throws {
106
+ let context = try configuredSSLContext ( )
107
+
108
+ let testString = " "
109
+ XCTAssertThrowsError ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) ) { error in
110
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
111
+ }
112
+ XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: testString) ) { error in
113
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
114
+ }
115
+ }
116
+
117
+ func testSNIIsRejectedForTooLongHostname( ) throws {
118
+ let context = try configuredSSLContext ( )
119
+
120
+ let testString = String ( repeating: " x " , count: 256 )
121
+ XCTAssertThrowsError ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) ) { error in
122
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
123
+ }
124
+ XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: testString) ) { error in
125
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
126
+ }
127
+ }
128
+
129
+ func testSNIIsRejectedFor0Byte( ) throws {
130
+ let context = try configuredSSLContext ( )
131
+
132
+ let testString = String ( UnicodeScalar ( 0 ) !)
133
+ XCTAssertThrowsError ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) ) { error in
134
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
135
+ }
136
+ XCTAssertThrowsError ( try NIOSSLClientHandler ( context: context, serverHostname: testString) ) { error in
137
+ XCTAssertEqual ( . invalidSNIHostname, error as? NIOSSLExtraError )
138
+ }
139
+ }
140
+
141
+ func testSNIIsNotRejectedForAnyOfTheFirst1000CodeUnits( ) throws {
142
+ let context = try configuredSSLContext ( )
143
+
144
+ for testString in ( 1 ... Int ( 1000 ) ) . compactMap ( { UnicodeScalar ( $0) . map { String ( $0) } } ) {
145
+ XCTAssertNoThrow ( try NIOSSLClientHandler ( context: context, serverHostname: testString) )
146
+ XCTAssertNoThrow ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) )
147
+ }
148
+ }
149
+
150
+ func testSNIIsNotRejectedForVeryWeirdCharacters( ) throws {
151
+ let context = try configuredSSLContext ( )
152
+
153
+ let testString = " 😎🥶💥🏴👩💻 "
154
+ XCTAssertLessThanOrEqual ( testString. utf8. count, 255 ) // just to check we didn't make this too large.
155
+ XCTAssertNoThrow ( try NIOSSLClientHandler ( context: context, serverHostname: testString) )
156
+ XCTAssertNoThrow ( try NIOSSLClientTLSProvider < ClientBootstrap > ( context: context, serverHostname: testString) )
94
157
}
95
158
}
0 commit comments