too slow
()
| 2205 | #[mz_ore::test] |
| 2206 | #[cfg_attr(miri, ignore)] // too slow |
| 2207 | fn test_http_options_param() { |
| 2208 | let server = test_util::TestHarness::default().start_blocking(); |
| 2209 | |
| 2210 | #[derive(Debug, Serialize)] |
| 2211 | struct Params { |
| 2212 | options: String, |
| 2213 | } |
| 2214 | |
| 2215 | let make_request = |params| { |
| 2216 | let http_url = Url::parse(&format!( |
| 2217 | "http://{}/api/sql?{}", |
| 2218 | server.http_local_addr(), |
| 2219 | params |
| 2220 | )) |
| 2221 | .unwrap(); |
| 2222 | |
| 2223 | let json = r#"{ "query": "SHOW application_name;" }"#; |
| 2224 | let json: serde_json::Value = serde_json::from_str(json).unwrap(); |
| 2225 | Client::new().post(http_url).json(&json).send().unwrap() |
| 2226 | }; |
| 2227 | |
| 2228 | // |
| 2229 | // Happy path, valid and correctly formatted options dictionary. |
| 2230 | // |
| 2231 | let options = BTreeMap::from([("application_name", "yet_another_client")]); |
| 2232 | let options = serde_json::to_string(&options).unwrap(); |
| 2233 | let params = serde_urlencoded::to_string(Params { options }).unwrap(); |
| 2234 | |
| 2235 | let resp = make_request(params); |
| 2236 | assert!(resp.status().is_success()); |
| 2237 | |
| 2238 | let mut result: HttpResponse<HttpRows> = resp.json().unwrap(); |
| 2239 | assert_eq!(result.results.len(), 1); |
| 2240 | |
| 2241 | let mut rows = result.results.pop().unwrap(); |
| 2242 | assert!(rows.notices.is_empty()); |
| 2243 | |
| 2244 | let row = rows.rows.pop().unwrap().pop().unwrap(); |
| 2245 | let col = rows.desc.columns.pop().unwrap().name; |
| 2246 | |
| 2247 | assert_eq!(col, "application_name"); |
| 2248 | assert_eq!(row, "yet_another_client"); |
| 2249 | |
| 2250 | // |
| 2251 | // Malformed options dictionary. |
| 2252 | // |
| 2253 | let params = "options=not_a_urlencoded_json_object".to_string(); |
| 2254 | let resp = make_request(params); |
| 2255 | assert_eq!(resp.status(), StatusCode::BAD_REQUEST); |
| 2256 | |
| 2257 | // |
| 2258 | // Correctly formed options dictionary, but invalid param. |
| 2259 | // |
| 2260 | let options = BTreeMap::from([("not_a_session_var", "hmmmm")]); |
| 2261 | let options = serde_json::to_string(&options).unwrap(); |
| 2262 | let params = serde_urlencoded::to_string(Params { options }).unwrap(); |
| 2263 | |
| 2264 | let resp = make_request(params); |