|
90 | 90 | # The Server MUST reply with the same value in the Response object if included. This member is used to correlate the |
91 | 91 | # context between the two objects. |
92 | 92 |
|
93 | | - it "returns a response with the same request id when the id is a string" do |
| 93 | + it "returns a response with the same request id when the id is a valid string" do |
94 | 94 | register("add") { |params| params[:a] + params[:b] } |
95 | | - id = "rpc-call-42" |
| 95 | + id = "request-123_abc" |
96 | 96 |
|
97 | 97 | handle jsonrpc: "2.0", id:, method: "add", params: { a: 1, b: 2 } |
98 | 98 |
|
|
116 | 116 | assert_rpc_error expected_error: { |
117 | 117 | code: -32600, |
118 | 118 | message: "Invalid Request", |
119 | | - data: "Request ID must be a string or an integer or null", |
| 119 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
| 120 | + } |
| 121 | + end |
| 122 | + |
| 123 | + it "accepts string id with alphanumerics, dashes, and underscores" do |
| 124 | + register("add") { |params| params[:a] + params[:b] } |
| 125 | + id = "request-123_ABC" |
| 126 | + |
| 127 | + handle jsonrpc: "2.0", id:, method: "add", params: { a: 1, b: 2 } |
| 128 | + |
| 129 | + assert_rpc_success expected_result: 3 |
| 130 | + assert_equal id, @response[:id] |
| 131 | + end |
| 132 | + |
| 133 | + it "accepts UUID format strings" do |
| 134 | + register("add") { |params| params[:a] + params[:b] } |
| 135 | + id = "550e8400-e29b-41d4-a716-446655440000" |
| 136 | + |
| 137 | + handle jsonrpc: "2.0", id:, method: "add", params: { a: 1, b: 2 } |
| 138 | + |
| 139 | + assert_rpc_success expected_result: 3 |
| 140 | + assert_equal id, @response[:id] |
| 141 | + end |
| 142 | + |
| 143 | + it "returns an error when request id contains HTML content (XSS prevention)" do |
| 144 | + handle jsonrpc: "2.0", id: "<script>alert('xss')</script>", method: "add", params: { a: 1, b: 2 } |
| 145 | + |
| 146 | + assert_rpc_error expected_error: { |
| 147 | + code: -32600, |
| 148 | + message: "Invalid Request", |
| 149 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
| 150 | + } |
| 151 | + end |
| 152 | + |
| 153 | + it "returns an error when request id contains spaces" do |
| 154 | + handle jsonrpc: "2.0", id: "request 123", method: "add", params: { a: 1, b: 2 } |
| 155 | + |
| 156 | + assert_rpc_error expected_error: { |
| 157 | + code: -32600, |
| 158 | + message: "Invalid Request", |
| 159 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
| 160 | + } |
| 161 | + end |
| 162 | + |
| 163 | + it "returns an error when request id contains special characters" do |
| 164 | + handle jsonrpc: "2.0", id: "request@123", method: "add", params: { a: 1, b: 2 } |
| 165 | + |
| 166 | + assert_rpc_error expected_error: { |
| 167 | + code: -32600, |
| 168 | + message: "Invalid Request", |
| 169 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
| 170 | + } |
| 171 | + end |
| 172 | + |
| 173 | + it "returns an error when request id is an empty string" do |
| 174 | + handle jsonrpc: "2.0", id: "", method: "add", params: { a: 1, b: 2 } |
| 175 | + |
| 176 | + assert_rpc_error expected_error: { |
| 177 | + code: -32600, |
| 178 | + message: "Invalid Request", |
| 179 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
120 | 180 | } |
121 | 181 | end |
122 | 182 |
|
|
126 | 186 | assert_rpc_error expected_error: { |
127 | 187 | code: -32600, |
128 | 188 | message: "Invalid Request", |
129 | | - data: "Request ID must be a string or an integer or null", |
| 189 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
130 | 190 | } |
131 | 191 | end |
132 | 192 |
|
|
250 | 310 | assert_rpc_error expected_error: { |
251 | 311 | code: -32600, |
252 | 312 | message: "Invalid Request", |
253 | | - data: "Request ID must be a string or an integer or null", |
| 313 | + data: "Request ID must contain only alphanumerics, dashes, or underscores, or be an integer or null", |
254 | 314 | } |
255 | 315 | assert_nil @response[:id] |
256 | 316 | end |
|
0 commit comments