summaryrefslogtreecommitdiffstats
path: root/mapper
diff options
context:
space:
mode:
authorPradeepKiruvale <PRADEEPKIRUVALE@gmail.com>2021-08-19 06:52:28 +0530
committerGitHub <noreply@github.com>2021-08-19 06:52:28 +0530
commit38b6f99cf0b389889f4b89f4dee8a72cc301fe9e (patch)
treec74a3f1467409fb2772ef7899e3b3e9deb4d84e6 /mapper
parent8f37d16f635a1ccc1315432db82ee76f1892f82a (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.rs28
-rw-r--r--mapper/tedge_mapper/src/sm_c8y_mapper/smartrest_serializer.rs17
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"
);