(path: &Path)
| 1025 | } |
| 1026 | |
| 1027 | fn parse_smoke_config(path: &Path) -> Result<BTreeMap<String, ExtensionSmokeEvidence>> { |
| 1028 | if !path.exists() { |
| 1029 | return Ok(BTreeMap::new()); |
| 1030 | } |
| 1031 | let text = fs::read_to_string(path).with_context(|| format!("read {}", path.display()))?; |
| 1032 | let config: SmokeConfig = |
| 1033 | toml::from_str(&text).with_context(|| format!("parse {}", path.display()))?; |
| 1034 | ensure!( |
| 1035 | config.format_version == 1, |
| 1036 | "{} format_version must be 1", |
| 1037 | path.display() |
| 1038 | ); |
| 1039 | let mut evidence = BTreeMap::new(); |
| 1040 | for mut extension in config.extensions { |
| 1041 | ensure!(!extension.id.is_empty(), "smoke evidence has empty id"); |
| 1042 | normalize_smoke_statuses(&mut extension); |
| 1043 | ensure_valid_smoke_status(&extension.direct, &extension.id, "direct")?; |
| 1044 | ensure_valid_smoke_status(&extension.server, &extension.id, "server")?; |
| 1045 | ensure_valid_smoke_status(&extension.restart, &extension.id, "restart")?; |
| 1046 | ensure_valid_smoke_status(&extension.dump_restore, &extension.id, "dump-restore")?; |
| 1047 | ensure!( |
| 1048 | evidence |
| 1049 | .insert( |
| 1050 | extension.id.clone(), |
| 1051 | ExtensionSmokeEvidence::from(extension) |
| 1052 | ) |
| 1053 | .is_none(), |
| 1054 | "duplicate smoke evidence" |
| 1055 | ); |
| 1056 | } |
| 1057 | Ok(evidence) |
| 1058 | } |
| 1059 | |
| 1060 | fn normalize_smoke_statuses(extension: &mut SmokeConfigExtension) { |
| 1061 | if extension.direct.is_empty() { |
no test coverage detected