reflection: commit generated code (#1151)
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user