test(router): Custom partition template API create using `time` tag value is rejected

This removes the double negative from the error message and adds
coverage at the router's gRPC API level for the rejection of the bad
TagValue value.
pull/24376/head
Fraser Savage 2023-07-24 13:07:04 +01:00
parent aac4166bf0
commit c834ec171f
No known key found for this signature in database
GPG Key ID: DE47C33CE8C5C446
2 changed files with 33 additions and 1 deletions

View File

@ -451,7 +451,7 @@ mod serialization {
if value.contains(TAG_VALUE_KEY_TIME) { if value.contains(TAG_VALUE_KEY_TIME) {
return Err(ValidationError::InvalidTagValue(format!( return Err(ValidationError::InvalidTagValue(format!(
"{TAG_VALUE_KEY_TIME} cannot not be used" "{TAG_VALUE_KEY_TIME} cannot be used"
))); )));
} }
} }

View File

@ -981,6 +981,38 @@ async fn test_invalid_strftime_partition_template() {
); );
} }
#[tokio::test]
async fn test_invalid_tag_value_partition_template() {
// Initialise a TestContext without a namespace autocreation policy.
let ctx = TestContextBuilder::default().build().await;
// Explicitly create a namespace with a custom partition template.
let req = CreateNamespaceRequest {
name: "bananas_test".to_string(),
retention_period_ns: None,
partition_template: Some(PartitionTemplate {
parts: vec![TemplatePart {
part: Some(template_part::Part::TagValue("time".into())),
}],
}),
service_protection_limits: None,
};
// Check namespace creation returned an error
let got = ctx
.grpc_delegate()
.namespace_service()
.create_namespace(Request::new(req))
.await;
assert_error!(
got,
ref status
if status.code() == Code::InvalidArgument
&& status.message() == "invalid tag value in partition template: time cannot be used"
);
}
#[tokio::test] #[tokio::test]
async fn test_namespace_partition_template_implicit_table_creation() { async fn test_namespace_partition_template_implicit_table_creation() {
// Initialise a TestContext without a namespace autocreation policy. // Initialise a TestContext without a namespace autocreation policy.