13
13
* See the License for the specific language governing permissions and
14
14
* limitations under the License.
15
15
*/
16
- @_spi ( Testing) import GRPCCore
17
- import XCTest
18
16
19
- final class ServerResponseTests : XCTestCase {
20
- func testSingleConvenienceInit( ) {
21
- var response = ServerResponse (
17
+ import GRPCCore
18
+ import Testing
19
+
20
+ @Suite ( " ServerResponse " )
21
+ struct ServerResponseTests {
22
+ @Test ( " ServerResponse(message:metadata:trailingMetadata:) " )
23
+ func responseInitSuccess( ) throws {
24
+ let response = ServerResponse (
22
25
message: " message " ,
23
26
metadata: [ " metadata " : " initial " ] ,
24
27
trailingMetadata: [ " metadata " : " trailing " ]
25
28
)
26
29
27
- switch response. accepted {
28
- case . success( let contents) :
29
- XCTAssertEqual ( contents. message, " message " )
30
- XCTAssertEqual ( contents. metadata, [ " metadata " : " initial " ] )
31
- XCTAssertEqual ( contents. trailingMetadata, [ " metadata " : " trailing " ] )
32
- case . failure:
33
- XCTFail ( " Unexpected error " )
34
- }
30
+ let contents = try #require( try response. accepted. get ( ) )
31
+ #expect( contents. message == " message " )
32
+ #expect( contents. metadata == [ " metadata " : " initial " ] )
33
+ #expect( contents. trailingMetadata == [ " metadata " : " trailing " ] )
34
+ }
35
35
36
+ @Test ( " ServerResponse(of:error:) " )
37
+ func responseInitError( ) throws {
36
38
let error = RPCError ( code: . aborted, message: " Aborted " )
37
- response = ServerResponse ( of: String . self, error: error)
39
+ let response = ServerResponse ( of: String . self, error: error)
38
40
switch response. accepted {
39
41
case . success:
40
- XCTFail ( " Unexpected success " )
41
- case . failure( let error ) :
42
- XCTAssertEqual ( error , error)
42
+ Issue . record ( " Expected error " )
43
+ case . failure( let rpcError ) :
44
+ #expect ( rpcError == error)
43
45
}
44
46
}
45
47
46
- func testStreamConvenienceInit( ) async throws {
47
- var response = StreamingServerResponse (
48
+ @Test ( " StreamingServerResponse(of:metadata:producer:) " )
49
+ func streamingResponseInitSuccess( ) async throws {
50
+ let response = StreamingServerResponse (
48
51
of: String . self,
49
52
metadata: [ " metadata " : " initial " ]
50
53
) { _ in
51
54
// Empty body.
52
55
return [ " metadata " : " trailing " ]
53
56
}
54
57
55
- switch response. accepted {
56
- case . success( let contents) :
57
- XCTAssertEqual ( contents. metadata, [ " metadata " : " initial " ] )
58
- let trailingMetadata = try await contents. producer ( . failTestOnWrite( ) )
59
- XCTAssertEqual ( trailingMetadata, [ " metadata " : " trailing " ] )
60
- case . failure:
61
- XCTFail ( " Unexpected error " )
62
- }
58
+ let contents = try #require( try response. accepted. get ( ) )
59
+ #expect( contents. metadata == [ " metadata " : " initial " ] )
60
+ let trailingMetadata = try await contents. producer ( . failTestOnWrite( ) )
61
+ #expect( trailingMetadata == [ " metadata " : " trailing " ] )
62
+ }
63
63
64
+ @Test ( " StreamingServerResponse(of:error:) " )
65
+ func streamingResponseInitError( ) async throws {
64
66
let error = RPCError ( code: . aborted, message: " Aborted " )
65
- response = StreamingServerResponse ( of: String . self, error: error)
67
+ let response = StreamingServerResponse ( of: String . self, error: error)
66
68
switch response. accepted {
67
69
case . success:
68
- XCTFail ( " Unexpected success " )
69
- case . failure( let error ) :
70
- XCTAssertEqual ( error , error)
70
+ Issue . record ( " Expected error " )
71
+ case . failure( let rpcError ) :
72
+ #expect ( rpcError == error)
71
73
}
72
74
}
73
75
74
- func testSingleToStreamConversionForSuccessfulResponse( ) async throws {
76
+ @Test ( " StreamingServerResponse(single:) (accepted) " )
77
+ func singleToStreamConversionForSuccessfulResponse( ) async throws {
75
78
let single = ServerResponse (
76
79
message: " foo " ,
77
80
metadata: [ " metadata " : " initial " ] ,
@@ -90,19 +93,49 @@ final class ServerResponseTests: XCTestCase {
90
93
throw error
91
94
}
92
95
93
- XCTAssertEqual ( stream. metadata, [ " metadata " : " initial " ] )
96
+ #expect ( stream. metadata == [ " metadata " : " initial " ] )
94
97
let collected = try await messages. collect ( )
95
- XCTAssertEqual ( collected, [ " foo " ] )
96
- XCTAssertEqual ( trailingMetadata, [ " metadata " : " trailing " ] )
98
+ #expect ( collected == [ " foo " ] )
99
+ #expect ( trailingMetadata == [ " metadata " : " trailing " ] )
97
100
}
98
101
99
- func testSingleToStreamConversionForFailedResponse( ) async throws {
102
+ @Test ( " StreamingServerResponse(single:) (rejected) " )
103
+ func singleToStreamConversionForFailedResponse( ) async throws {
100
104
let error = RPCError ( code: . aborted, message: " aborted " )
101
105
let single = ServerResponse ( of: String . self, error: error)
102
106
let stream = StreamingServerResponse ( single: single)
103
107
104
- XCTAssertThrowsRPCError ( try stream. accepted. get ( ) ) {
105
- XCTAssertEqual ( $0, error)
108
+ switch stream. accepted {
109
+ case . success:
110
+ Issue . record ( " Expected error " )
111
+ case . failure( let rpcError) :
112
+ #expect( rpcError == error)
113
+ }
114
+ }
115
+
116
+ @Test ( " Mutate metadata on response " , arguments: [ true , false ] )
117
+ func mutateMetadataOnResponse( accepted: Bool ) {
118
+ var response : ServerResponse < String >
119
+ if accepted {
120
+ response = ServerResponse ( message: " " )
121
+ } else {
122
+ response = ServerResponse ( error: RPCError ( code: . aborted, message: " " ) )
106
123
}
124
+
125
+ response. metadata. addString ( " value " , forKey: " key " )
126
+ #expect( response. metadata == [ " key " : " value " ] )
127
+ }
128
+
129
+ @Test ( " Mutate metadata on streaming response " , arguments: [ true , false ] )
130
+ func mutateMetadataOnStreamingResponse( accepted: Bool ) {
131
+ var response : StreamingServerResponse < String >
132
+ if accepted {
133
+ response = StreamingServerResponse { _ in [ : ] }
134
+ } else {
135
+ response = StreamingServerResponse ( error: RPCError ( code: . aborted, message: " " ) )
136
+ }
137
+
138
+ response. metadata. addString ( " value " , forKey: " key " )
139
+ #expect( response. metadata == [ " key " : " value " ] )
107
140
}
108
141
}
0 commit comments