summaryrefslogtreecommitdiffstats
path: root/crates/core/c8y_smartrest/src
diff options
context:
space:
mode:
authorAlbin Suresh <albin.suresh@softwareag.com>2022-02-22 23:17:42 +0530
committerGitHub <noreply@github.com>2022-02-22 23:17:42 +0530
commit6b804e4a1633d0ba7f07aad1f7fee2bac6c9f1eb (patch)
treeeb12e73f690ba04bcb25c154e4de0b593ee81d5d /crates/core/c8y_smartrest/src
parent0cc041388678f5c5faaab6dbd567f5869e4e4b9e (diff)
Make message field optional in Thin Edge JSON events (#923)
Diffstat (limited to 'crates/core/c8y_smartrest/src')
-rw-r--r--crates/core/c8y_smartrest/src/event.rs42
1 files changed, 35 insertions, 7 deletions
diff --git a/crates/core/c8y_smartrest/src/event.rs b/crates/core/c8y_smartrest/src/event.rs
index ad0ee5e3..bf114dba 100644
--- a/crates/core/c8y_smartrest/src/event.rs
+++ b/crates/core/c8y_smartrest/src/event.rs
@@ -7,15 +7,19 @@ const CREATE_EVENT_SMARTREST_CODE: u16 = 400;
/// Converts from thin-edge event to C8Y event SmartREST message
pub fn serialize_event(event: ThinEdgeEvent) -> Result<String, SmartRestSerializerError> {
+ let current_timestamp = OffsetDateTime::now_utc();
match event.data {
- None => Ok(format!("{CREATE_EVENT_SMARTREST_CODE},{}", event.name)),
+ None => Ok(format!(
+ "{CREATE_EVENT_SMARTREST_CODE},{},{},{}",
+ event.name,
+ event.name,
+ current_timestamp.format(&Rfc3339)?
+ )),
Some(event_data) => {
- let current_timestamp = OffsetDateTime::now_utc();
-
let smartrest_message = format!(
"{CREATE_EVENT_SMARTREST_CODE},{},\"{}\",{}",
- event.name,
- event_data.message.unwrap_or_default(),
+ event.name.clone(),
+ event_data.message.unwrap_or(event.name),
event_data.time.map_or_else(
|| current_timestamp.format(&Rfc3339),
|timestamp| timestamp.format(&Rfc3339)
@@ -56,7 +60,7 @@ mod tests {
time: Some(datetime!(2021-04-23 19:00:00 +05:00)),
}),
},
- "400,click_event,\"\",2021-04-23T19:00:00+05:00"
+ "400,click_event,\"click_event\",2021-04-23T19:00:00+05:00"
;"event translation without message"
)]
#[test_case(
@@ -105,7 +109,31 @@ mod tests {
let smartrest_event: SmartRestEvent = result.expect("One entry expected")?;
assert_eq!(smartrest_event.code, 400);
assert_eq!(smartrest_event.name, "empty_event".to_string());
- assert_eq!(smartrest_event.message, None);
+ assert_eq!(smartrest_event.message, Some("empty_event".to_string()));
+ assert_matches!(smartrest_event.time, Some(_));
+
+ Ok(())
+ }
+
+ #[test]
+ fn event_translation_empty_payload() -> Result<()> {
+ let event = ThinEdgeEvent {
+ name: "empty_event".into(),
+ data: None,
+ };
+
+ let smartrest_message = serialize_event(event)?;
+ let mut reader = csv::ReaderBuilder::new()
+ .has_headers(false)
+ .from_reader(smartrest_message.as_bytes());
+ let mut iter = reader.deserialize();
+ let result = iter.next();
+
+ assert!(result.is_some());
+ let smartrest_event: SmartRestEvent = result.expect("One entry expected")?;
+ assert_eq!(smartrest_event.code, 400);
+ assert_eq!(smartrest_event.name, "empty_event".to_string());
+ assert_eq!(smartrest_event.message, Some("empty_event".to_string()));
assert_matches!(smartrest_event.time, Some(_));
Ok(())