diff options
author | PradeepKiruvale <PRADEEPKIRUVALE@gmail.com> | 2021-08-19 06:52:28 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-19 06:52:28 +0530 |
commit | 38b6f99cf0b389889f4b89f4dee8a72cc301fe9e (patch) | |
tree | c74a3f1467409fb2772ef7899e3b3e9deb4d84e6 /mapper | |
parent | 8f37d16f635a1ccc1315432db82ee76f1892f82a (diff) |
[CIT-520] version name corner cases (#391)
* [CIT-520] version name corner cases
* address review comments
Co-authored-by: Pradeep Kumar K J <pradeepkumar.kj@sofwareag.com>
Diffstat (limited to 'mapper')
-rw-r--r-- | mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_deserializer.rs | 28 | ||||
-rw-r--r-- | mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs | 17 |
2 files changed, 41 insertions, 4 deletions
diff --git a/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_deserializer.rs b/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_deserializer.rs index 64ffc129..82765b24 100644 --- a/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_deserializer.rs +++ b/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_deserializer.rs @@ -120,17 +120,26 @@ impl SmartRestUpdateSoftware { } impl SmartRestUpdateSoftwareModule { - // this doesn't cover the corner case '1.0.0::dd::debian::' for now (escape) fn get_module_version_and_type(&self) -> (Option<String>, Option<String>) { + let split; match &self.version { Some(version) => { - let split = version.split_once("::"); + if version.matches("::").count() > 1 { + split = version.rsplit_once("::"); + } else { + split = version.split_once("::"); + } + match split { Some((v, t)) => { if v.is_empty() { (None, Some(t.into())) // ::debian } else { - (Some(v.into()), Some(t.into())) // 1.0::debian + if !t.is_empty() { + (Some(v.into()), Some(t.into())) // 1.0::debian + } else { + (Some(v.into()), None) + } } } None => { @@ -142,6 +151,7 @@ impl SmartRestUpdateSoftwareModule { } } } + None => (None, None), // (empty) } } @@ -190,6 +200,18 @@ mod tests { (Some("1.0.0".to_string()), Some("debian".to_string())) ); + module.version = Some("1.0.0::1::debian".into()); + assert_eq!( + module.get_module_version_and_type(), + (Some("1.0.0::1".to_string()), Some("debian".to_string())) + ); + + module.version = Some("1.0.0::1::".into()); + assert_eq!( + module.get_module_version_and_type(), + (Some("1.0.0::1".to_string()), None) + ); + module.version = Some("1.0.0".into()); assert_eq!( module.get_module_version_and_type(), diff --git a/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs b/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs index e38ff61b..002dd5fc 100644 --- a/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs +++ b/mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs @@ -227,7 +227,13 @@ fn combine_version_and_type( } } None => match version { - Some(v) => v.to_string(), + Some(v) => { + if v.contains("::") { + format!("{}::", v) + } else { + v.to_string() + } + } None => "".to_string(), }, } @@ -241,6 +247,7 @@ mod tests { #[test] fn verify_combine_version_and_type() { let some_version: Option<SoftwareVersion> = Some("1.0".to_string()); + let some_version_with_colon: Option<SoftwareVersion> = Some("1.0.0::1".to_string()); let none_version: Option<SoftwareVersion> = None; let some_module_type: Option<SoftwareType> = Some("debian".to_string()); let none_module_type: Option<SoftwareType> = None; @@ -254,6 +261,14 @@ mod tests { "1.0" ); assert_eq!( + combine_version_and_type(&some_version_with_colon, &some_module_type), + "1.0.0::1::debian" + ); + assert_eq!( + combine_version_and_type(&some_version_with_colon, &none_module_type), + "1.0.0::1::" + ); + assert_eq!( combine_version_and_type(&none_version, &some_module_type), "::debian" ); |