diff --git a/src/servers/src/grpc/flight.rs b/src/servers/src/grpc/flight.rs index 6a1c1a5d45e..08cbbe107d1 100644 --- a/src/servers/src/grpc/flight.rs +++ b/src/servers/src/grpc/flight.rs @@ -758,11 +758,14 @@ mod tests { .parse() .unwrap(), ); - assert!( - FlightCraft::do_get(&flight_handler(calls.clone()), request) - .await - .is_ok() - ); + let handler = flight_handler(calls.clone()); + let response = FlightCraft::do_get(&handler, request).await.unwrap(); + let first_item = response + .into_inner() + .next() + .await + .expect("Expected the query result stream to yield an item"); + assert_eq!(first_item.unwrap_err().code(), tonic::Code::Internal); assert_eq!(calls.load(Ordering::SeqCst), 1); } diff --git a/tests-integration/tests/http.rs b/tests-integration/tests/http.rs index 9cc3a94e379..1cfb1ddf759 100644 --- a/tests-integration/tests/http.rs +++ b/tests-integration/tests/http.rs @@ -620,14 +620,37 @@ pub async fn test_http_query_options(store_type: StorageType) { .send() .await; assert_eq!(invalid_read_preference.status(), StatusCode::BAD_REQUEST); - let error: ErrorResponse = invalid_read_preference.json().await; - assert_eq!(error.code(), ErrorCode::InvalidArguments as u32); + let error: Value = invalid_read_preference.json().await; + let message = error["error"].as_str().expect("error message"); + assert!( + message.contains("Invalid read preference header"), + "unexpected error message: {message}" + ); - for hints in ["query.parallelism=0", "query.unsupported_option=true"] { + for (hints, expected_message) in [ + ( + "query.parallelism=0", + "query.parallelism must be between 1 and 1024", + ), + ( + "query.unsupported_option=true", + "Unknown or unsupported query option", + ), + ] { let response = query(&client, "SHOW VARIABLES query.parallelism", Some(hints)).await; assert_eq!(response.status(), StatusCode::BAD_REQUEST); - let error: ErrorResponse = response.json().await; - assert_eq!(error.code(), ErrorCode::InvalidArguments as u32); + let error: Value = response.json().await; + let message = error["error"].as_str().expect("error message"); + assert!( + message.contains(expected_message), + "unexpected error message for {hints}: {message}" + ); + if hints == "query.unsupported_option=true" { + assert!( + message.contains("query.unsupported_option"), + "error message should name the unsupported option: {message}" + ); + } } guard.remove_all().await;