Skip to content

Commit d83f54b

Browse files
author
Devdutt Shenoi
committed
test: override_inferred_data_type
1 parent e5c2493 commit d83f54b

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

src/event/format/json.rs

+111
Original file line numberDiff line numberDiff line change
@@ -472,4 +472,115 @@ mod tests {
472472

473473
assert!(parsed.is_err());
474474
}
475+
476+
#[test]
477+
fn updates_field_type_to_timestamp_for_time_related_fields() {
478+
let field = Field::new("created_time", DataType::Utf8, true);
479+
let fields = Fields::from(vec![field]);
480+
let mut schema = Schema::new(fields);
481+
482+
// Create a JSON log record with a time field in RFC3339 format
483+
let log_record = serde_json::json!({
484+
"created_time": "2023-01-01T12:00:00Z"
485+
});
486+
487+
// Call the function to override the inferred data type
488+
override_inferred_data_type(&mut schema, &log_record, SchemaVersion::V1);
489+
490+
// Check that the field type was updated to Timestamp
491+
let updated_field = schema.field(0);
492+
assert_eq!(
493+
updated_field.data_type(),
494+
&DataType::Timestamp(TimeUnit::Millisecond, None)
495+
);
496+
assert_eq!(updated_field.name(), "created_time");
497+
assert!(updated_field.is_nullable());
498+
}
499+
500+
#[test]
501+
fn update_field_type_to_timestamp_for_rfc2822_format() {
502+
let field = Field::new("event_time", DataType::Utf8, true);
503+
let fields = Fields::from(vec![field]);
504+
let mut schema = Schema::new(fields);
505+
506+
// Create a JSON log record with a time field in RFC2822 format
507+
let log_record = serde_json::json!({
508+
"event_time": "Wed, 02 Oct 2002 15:00:00 +0200"
509+
});
510+
511+
// Call the function to override the inferred data type
512+
override_inferred_data_type(&mut schema, &log_record, SchemaVersion::V1);
513+
514+
// Check that the field type was updated to Timestamp
515+
let updated_field = schema.field(0);
516+
assert_eq!(
517+
updated_field.data_type(),
518+
&DataType::Timestamp(TimeUnit::Millisecond, None)
519+
);
520+
assert_eq!(updated_field.name(), "event_time");
521+
assert!(updated_field.is_nullable());
522+
}
523+
524+
#[test]
525+
fn update_numeric_fields_to_float64() {
526+
let field = Field::new("numeric_field", DataType::Int32, true);
527+
let fields = Fields::from(vec![field]);
528+
let mut schema = Schema::new(fields);
529+
530+
// Create a JSON log record with a numeric field
531+
let log_record = serde_json::json!({
532+
"numeric_field": 42
533+
});
534+
535+
// Call the function to override the inferred data type
536+
override_inferred_data_type(&mut schema, &log_record, SchemaVersion::V1);
537+
538+
// Check that the field type was updated to Float64
539+
let updated_field = schema.field(0);
540+
assert_eq!(updated_field.data_type(), &DataType::Float64);
541+
assert_eq!(updated_field.name(), "numeric_field");
542+
assert!(updated_field.is_nullable());
543+
}
544+
545+
#[test]
546+
fn handles_numeric_fields_already_float64() {
547+
let field = Field::new("numeric_value", DataType::Float64, true);
548+
let fields = Fields::from(vec![field]);
549+
let mut schema = Schema::new(fields);
550+
551+
// Create a JSON log record with a numeric field
552+
let log_record = serde_json::json!({
553+
"numeric_value": 42.0
554+
});
555+
556+
// Call the function to override the inferred data type
557+
override_inferred_data_type(&mut schema, &log_record, SchemaVersion::V1);
558+
559+
// Check that the field type remains Float64
560+
let updated_field = schema.field(0);
561+
assert_eq!(updated_field.data_type(), &DataType::Float64);
562+
assert_eq!(updated_field.name(), "numeric_value");
563+
assert!(updated_field.is_nullable());
564+
}
565+
566+
#[test]
567+
fn does_not_update_field_type_for_v0_schema_version() {
568+
let field = Field::new("some_field", DataType::Utf8, true);
569+
let fields = Fields::from(vec![field]);
570+
let mut schema = Schema::new(fields);
571+
572+
// Create a JSON log record with a string field
573+
let log_record = serde_json::json!({
574+
"some_field": "some_value"
575+
});
576+
577+
// Call the function to override the inferred data type with a non-V1 schema version
578+
override_inferred_data_type(&mut schema, &log_record, SchemaVersion::V0);
579+
580+
// Check that the field type was not updated
581+
let updated_field = schema.field(0);
582+
assert_eq!(updated_field.data_type(), &DataType::Utf8);
583+
assert_eq!(updated_field.name(), "some_field");
584+
assert!(updated_field.is_nullable());
585+
}
475586
}

0 commit comments

Comments
 (0)