reflection: commit generated code (#1151)

This commit is contained in:
Artem Vorotnikov
2022-11-16 16:13:59 -05:00
committed by GitHub
parent 33e22bbc5e
commit 933f560735
7 changed files with 458 additions and 63 deletions
+31
View File
@@ -0,0 +1,31 @@
use std::{path::PathBuf, process::Command};
#[test]
fn bootstrap() {
let iface_files = &["proto/reflection.proto"];
let dirs = &["proto"];
let out_dir = PathBuf::from(std::env!("CARGO_MANIFEST_DIR"))
.join("src")
.join("generated");
tonic_build::configure()
.build_client(true)
.build_server(true)
.build_transport(false)
.out_dir(format!("{}", out_dir.display()))
.compile(iface_files, dirs)
.unwrap();
let status = Command::new("git")
.arg("diff")
.arg("--exit-code")
.arg("--")
.arg(format!("{}", out_dir.display()))
.status()
.unwrap();
if !status.success() {
panic!("You should commit the protobuf files");
}
}
+29 -37
View File
@@ -1,37 +1,27 @@
use futures::stream;
use futures_util::FutureExt;
use tokio::sync::oneshot;
use tonic::transport::Server;
use tonic::Request;
use tonic_reflection::server::Builder;
use pb::server_reflection_client::ServerReflectionClient;
use pb::server_reflection_request::MessageRequest;
use pb::server_reflection_response::MessageResponse;
use pb::ServerReflectionRequest;
use pb::ServiceResponse;
use prost::Message;
use std::net::SocketAddr;
use tokio_stream::wrappers::TcpListenerStream;
use tokio_stream::StreamExt;
use tokio::sync::oneshot;
use tokio_stream::{wrappers::TcpListenerStream, StreamExt};
use tonic::{transport::Server, Request};
use tonic_reflection::{
proto::{
server_reflection_client::ServerReflectionClient,
server_reflection_request::MessageRequest, server_reflection_response::MessageResponse,
ServerReflectionRequest, ServiceResponse, FILE_DESCRIPTOR_SET,
},
server::Builder,
};
mod pb {
#![allow(unreachable_pub)]
use prost::Message;
tonic::include_proto!("grpc.reflection.v1alpha");
pub(crate) const REFLECTION_SERVICE_DESCRIPTOR: &[u8] =
tonic::include_file_descriptor_set!("reflection_v1alpha1");
pub(crate) fn get_encoded_reflection_service_fd() -> Vec<u8> {
let mut expected = Vec::new();
prost_types::FileDescriptorSet::decode(REFLECTION_SERVICE_DESCRIPTOR)
.expect("decode reflection service file descriptor set")
.file[0]
.encode(&mut expected)
.expect("encode reflection service file descriptor");
expected
}
pub(crate) fn get_encoded_reflection_service_fd() -> Vec<u8> {
let mut expected = Vec::new();
prost_types::FileDescriptorSet::decode(FILE_DESCRIPTOR_SET)
.expect("decode reflection service file descriptor set")
.file[0]
.encode(&mut expected)
.expect("encode reflection service file descriptor");
expected
}
#[tokio::test]
@@ -71,7 +61,7 @@ async fn test_file_by_filename() {
.expect("descriptor");
assert_eq!(
file_descriptor_proto.as_ref(),
pb::get_encoded_reflection_service_fd()
get_encoded_reflection_service_fd()
);
} else {
panic!("Expected a FileDescriptorResponse variant");
@@ -95,7 +85,7 @@ async fn test_file_containing_symbol() {
.expect("descriptor");
assert_eq!(
file_descriptor_proto.as_ref(),
pb::get_encoded_reflection_service_fd()
get_encoded_reflection_service_fd()
);
} else {
panic!("Expected a FileDescriptorResponse variant");
@@ -108,11 +98,10 @@ async fn make_test_reflection_request(request: ServerReflectionRequest) -> Messa
let addr: SocketAddr = "127.0.0.1:0".parse().expect("SocketAddr parse");
let listener = tokio::net::TcpListener::bind(addr).await.expect("bind");
let local_addr = listener.local_addr().expect("local address");
let local_addr = format!("http://{}", local_addr.to_string());
let local_addr = format!("http://{}", listener.local_addr().expect("local address"));
let jh = tokio::spawn(async move {
let service = Builder::configure()
.register_encoded_file_descriptor_set(pb::REFLECTION_SERVICE_DESCRIPTOR)
.register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET)
.build()
.unwrap();
@@ -127,9 +116,12 @@ async fn make_test_reflection_request(request: ServerReflectionRequest) -> Messa
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
// Construct client and send request, extract response
let mut client = ServerReflectionClient::connect(local_addr)
let conn = tonic::transport::Endpoint::new(local_addr)
.unwrap()
.connect()
.await
.expect("connect");
.unwrap();
let mut client = ServerReflectionClient::new(conn);
let request = Request::new(stream::iter(vec![request]));
let mut inbound = client