test: Translate the filter_on_value test using field ref (#6734)

pull/24376/head
Carol (Nichols || Goulding) 2023-01-27 15:03:44 -05:00 committed by GitHub
parent 0d32662eea
commit 11233e3b3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 24 deletions

View File

@ -2,16 +2,17 @@ use super::{dump::dump_data_frames, read_group_data, run_data_test, InfluxRpcTes
use async_trait::async_trait;
use futures::{prelude::*, FutureExt};
use generated_types::{
node::{Comparison, Logical},
node::{Comparison, Logical, Type as NodeType, Value},
read_response::frame::Data,
storage_client::StorageClient,
Predicate, ReadFilterRequest,
Node, Predicate, ReadFilterRequest,
};
use influxdb_iox_client::connection::GrpcConnection;
use std::sync::Arc;
use test_helpers_end_to_end::{
comparison_expression_node, maybe_skip_integration, string_value_node, DataGenerator,
GrpcRequestBuilder, MiniCluster, Step, StepTest, StepTestState,
comparison_expression_node, field_ref_node, float_value_node, maybe_skip_integration,
string_value_node, tag_ref_node, DataGenerator, GrpcRequestBuilder, MiniCluster, Step,
StepTest, StepTestState,
};
#[tokio::test]
@ -860,25 +861,38 @@ async fn data_plan_order() {
.await;
}
// #[tokio::test]
// async fn filter_on_value() {
// // This is how the test existed in query tests:
//
// test_helpers::maybe_start_logging();
//
// let predicate = Predicate::default()
// .with_expr(col("_value").eq(lit(1.77)))
// .with_expr(col("_field").eq(lit("load4")));
// let predicate = InfluxRpcPredicate::new(None, predicate);
//
// let expected_results = vec![
// "Series tags={_field=load4, _measurement=system, host=host.local}\n FloatPoints timestamps: [1527018806000000000, 1527018826000000000], values: [1.77, 1.77]",
// ];
//
// run_read_filter_test_case(MeasurementsForDefect2845 {}, predicate, expected_results).await;
//
// // I can't figure out how to create a `_value=` expression.
// }
#[tokio::test]
async fn filter_on_value() {
let node1 = comparison_expression_node(
field_ref_node("_value"),
Comparison::Equal,
float_value_node(1.77),
);
let node2 = comparison_expression_node(
tag_ref_node([255].to_vec()),
Comparison::Equal,
string_value_node("load4"),
);
let predicate = Predicate {
root: Some(Node {
node_type: NodeType::LogicalExpression as i32,
children: vec![node1, node2],
value: Some(Value::Logical(Logical::And as i32)),
}),
};
Arc::new(ReadFilterTest {
setup_name: "MeasurementsForDefect2845",
request: GrpcRequestBuilder::new().predicate(predicate),
expected_results: vec![
"SeriesFrame, tags: _field=load4,_measurement=system,host=host.local, type: 0",
"FloatPointsFrame, timestamps: [1527018806000000000, 1527018826000000000], \
values: \"1.77,1.77\"",
],
})
.run()
.await;
}
#[tokio::test]
#[should_panic(expected = "Unsupported _field predicate")]

View File

@ -415,6 +415,14 @@ impl GrpcRequestBuilder {
}
}
pub fn field_ref_node(field_name: impl Into<String>) -> Node {
Node {
node_type: NodeType::FieldRef.into(),
children: vec![],
value: Some(Value::FieldRefValue(field_name.into())),
}
}
pub fn tag_ref_node(tag_name: impl Into<Vec<u8>>) -> Node {
Node {
node_type: NodeType::TagRef as i32,
@ -431,6 +439,14 @@ pub fn string_value_node(value: impl Into<String>) -> Node {
}
}
pub fn float_value_node(value: f64) -> Node {
Node {
node_type: NodeType::Literal as i32,
children: vec![],
value: Some(Value::FloatValue(value)),
}
}
pub fn comparison_expression_node(lhs: Node, comparison: Comparison, rhs: Node) -> Node {
Node {
node_type: NodeType::ComparisonExpression as i32,

View File

@ -22,7 +22,10 @@ pub use client::*;
pub use config::TestConfig;
pub use data_generator::DataGenerator;
pub use error::{check_flight_error, check_tonic_status};
pub use grpc::{comparison_expression_node, string_value_node, GrpcRequestBuilder};
pub use grpc::{
comparison_expression_node, field_ref_node, float_value_node, string_value_node, tag_ref_node,
GrpcRequestBuilder,
};
pub use mini_cluster::MiniCluster;
pub use server_fixture::{ServerFixture, TestServer};
pub use server_type::{AddAddrEnv, ServerType};