From e7074b862b4c664c510385410510329ece97040c Mon Sep 17 00:00:00 2001 From: Biedermann Steve Date: Wed, 8 May 2024 16:48:40 +0200 Subject: [PATCH] update --- Cargo.lock | 39 ++++++++++++++++ Cargo.toml | 1 + out.md | 4 +- out.pdf | Bin 90599 -> 90601 bytes src/bin/checker.rs | 112 +++++++++++++++++++++++++++++++++++++++++++++ src/bin/tui.rs | 2 - test_result.md | 36 +++++++++++++++ test_result.txt | 16 +++++++ 8 files changed, 206 insertions(+), 4 deletions(-) create mode 100644 src/bin/checker.rs create mode 100644 test_result.md create mode 100644 test_result.txt diff --git a/Cargo.lock b/Cargo.lock index 7907837..7a27dd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.2.18" @@ -417,6 +426,35 @@ dependencies = [ "bitflags 2.5.0", ] +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + [[package]] name = "req" version = "0.1.0" @@ -426,6 +464,7 @@ dependencies = [ "crossterm 0.27.0", "indexmap", "ratatui", + "regex", "rsn", "serde", "serde_yaml", diff --git a/Cargo.toml b/Cargo.toml index 2af9727..86fd101 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ clap = { version = "4.5.4", features = ["derive"] } crossterm = "0.27.0" indexmap = { version = "2.2.6", features = ["serde"] } ratatui = "0.26.2" +regex = "1.10.4" rsn = "0.1.0" serde = { version = "1.0.201", features = ["derive"] } serde_yaml = "0.9.34" diff --git a/out.md b/out.md index c5b4d4f..feee318 100644 --- a/out.md +++ b/out.md @@ -75,8 +75,8 @@ how long the tool waits before checking if new files are available. - **_SEC-6.2_ - GDPR compliance:** The tool **_MUST NOT_** upload data if the user has not agreed to share this information. ### _TOPIC-7_ - Testing -- **_TEST-7.1_ - Unit Tests:** Comprehensive unit tests **_SHOULD_** be written to cover major functionalities. -- **_TEST-7.2_ - Integration Tests:** Integration tests **_SHOULD_** be conducted to ensure all parts of the tool work together seamlessly. +- **_TST-7.1_ - Unit Tests:** Comprehensive unit tests **_SHOULD_** be written to cover major functionalities. +- **_TST-7.2_ - Integration Tests:** Integration tests **_SHOULD_** be conducted to ensure all parts of the tool work together seamlessly. ## Definitions diff --git a/out.pdf b/out.pdf index 9d4a2f21e45ba86e1811c3e99e3b40eb57e4ad3c..91ddd2e8884fb45239bd01aef544945a15fb8c05 100644 GIT binary patch delta 9493 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 a81#QI39y7%T9zfI5Hh%6cVqwn diff --git a/src/bin/checker.rs b/src/bin/checker.rs new file mode 100644 index 0000000..5d6f598 --- /dev/null +++ b/src/bin/checker.rs @@ -0,0 +1,112 @@ +use std::path::PathBuf; + +use clap::Parser; +use indexmap::{ + map::{Keys, Values}, + IndexMap, +}; +use regex::Regex; +use req::*; +use stringlit::s; + +#[derive(Parser)] +struct Args { + #[arg(short, long, default_value = "REQ-.*")] + allowed_requirements: String, + requirements: PathBuf, + test_results: PathBuf, +} + +fn nl() -> String { + s!("") +} + +fn check_requirements( + test_results: &str, + output: &mut Vec, + requirements: &IndexMap, + allowed_requirements: &Regex, +) { + for (id, requirement) in requirements { + if allowed_requirements.is_match(&id) { + let status = if test_results.contains(&format!("{id} succeeded")) { + ":white_check_mark:" + } else if test_results.contains(&format!("{id} failed")) { + ":x:" + } else { + ":warning:" + }; + output.push(format!("- _{id}_ - {}: {status}", requirement.name)); + } + } +} + +fn has_valid_requirements( + mut requirements: Keys, + allowed_requirements: &Regex, +) -> bool { + requirements.any(|id| allowed_requirements.is_match(&id)) +} + +fn has_valid_topics(mut topics: Values, allowed_requirements: &Regex) -> bool { + topics.any(|topic| { + has_valid_requirements(topic.requirements.keys(), allowed_requirements) + || has_valid_topics(topic.subtopics.values(), allowed_requirements) + }) +} + +fn check_topics( + test_results: &str, + output: &mut Vec, + topics: &IndexMap, + allowed_requirements: &Regex, + level: usize, +) { + if !has_valid_topics(topics.values(), allowed_requirements) { + return; + } + for (id, topic) in topics { + if !has_valid_topics(topic.subtopics.values(), allowed_requirements) + && !has_valid_requirements(topic.requirements.keys(), allowed_requirements) + { + continue; + } + output.push(format!("{} _{id}_ - {}", "#".repeat(level), topic.name)); + if !topic.requirements.is_empty() { + check_requirements( + test_results, + output, + &topic.requirements, + allowed_requirements, + ); + output.push(nl()); + } + if !topic.subtopics.is_empty() { + check_topics( + test_results, + output, + &topic.subtopics, + allowed_requirements, + level + 1, + ); + output.push(nl()); + } + } +} + +fn main() -> anyhow::Result<()> { + let Args { + allowed_requirements, + requirements, + test_results, + } = Args::parse(); + let re = Regex::new(&allowed_requirements).unwrap(); + let test_results = std::fs::read_to_string(test_results)?; + let project: Project = serde_yaml::from_str(&std::fs::read_to_string(requirements)?)?; + let mut output = vec![format!("# Test Results - {}", project.name)]; + check_topics(&test_results, &mut output, &project.topics, &re, 2); + + let output = output.join("\n"); + println!("{output}"); + Ok(()) +} diff --git a/src/bin/tui.rs b/src/bin/tui.rs index 0c1ef5b..cbffab6 100644 --- a/src/bin/tui.rs +++ b/src/bin/tui.rs @@ -4,7 +4,6 @@ use crossterm::{ style::Color, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; -use indexmap::indexmap; use ratatui::{ backend::CrosstermBackend, layout::{Constraint, Direction, Layout}, @@ -12,7 +11,6 @@ use ratatui::{ widgets::{Block, Borders, List, ListItem, ListState}, Terminal, }; -use stringlit::s; use std::io; use std::sync::mpsc; diff --git a/test_result.md b/test_result.md new file mode 100644 index 0000000..05eb278 --- /dev/null +++ b/test_result.md @@ -0,0 +1,36 @@ +# Test Results - journal-uploader +## _TOPIC-1_ - Journal Watcher +### _SUB-1.1_ - File Monitoring +- _REQ-1.1.1_ - Continuous Monitoring: :white_check_mark: + +### _SUB-1.2_ - File Detection +- _REQ-1.2.1_ - Detection of New Files: :white_check_mark: +- _REQ-1.2.2_ - Avoid Re-processing: :x: + + +## _TOPIC-2_ - Traced Logging +### _SUB-2.1_ - File Processing +- _REQ-2.1.1_ - Reading Log Messages: :white_check_mark: +- _REQ-2.1.2_ - Filtering Log Messages: :white_check_mark: +- _REQ-2.1.3_ - No Duplicate Log Messages: :x: + +### _SUB-2.2_ - Traced Log Rotation +- _REQ-2.2.1_ - Rotating Files: :white_check_mark: +- _REQ-2.2.2_ - Compression of Rotated Files: :white_check_mark: +- _REQ-2.2.3_ - Rotating Directory: :x: + + +## _TOPIC-3_ - Remote Journal Logging +### _SUB-3.1_ - Service Activation +- _REQ-3.1.1_ - Cloud Activation: :white_check_mark: +- _REQ-3.1.2_ - Duration: :white_check_mark: +- _REQ-3.1.3_ - Max Interval: :x: +- _REQ-3.1.4_ - Analytics Not Accepted: :white_check_mark: + +### _SUB-3.2_ - File Processing +- _REQ-3.2.1_ - File Upload: :white_check_mark: +- _REQ-3.2.2_ - No Duplicate Files: :x: +- _REQ-3.2.3_ - Revoking Analytics: :white_check_mark: +- _REQ-3.2.4_ - Duration Expired: :warning: + + diff --git a/test_result.txt b/test_result.txt new file mode 100644 index 0000000..3b64661 --- /dev/null +++ b/test_result.txt @@ -0,0 +1,16 @@ +REQ-1.1.1 succeeded +REQ-1.2.1 succeeded +REQ-1.2.2 failed +REQ-2.1.1 succeeded +REQ-2.1.2 succeeded +REQ-2.1.3 failed +REQ-2.2.1 succeeded +REQ-2.2.2 succeeded +REQ-2.2.3 failed +REQ-3.1.1 succeeded +REQ-3.1.2 succeeded +REQ-3.1.3 failed +REQ-3.1.4 succeeded +REQ-3.2.1 succeeded +REQ-3.2.2 failed +REQ-3.2.3 succeeded