test(app): add live-tests flag for testing app as a whole

This commit is contained in:
Orhun Parmaksız 2021-12-21 23:33:27 +03:00
parent 5847b3370a
commit cd5e1851de
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
5 changed files with 41 additions and 6 deletions

View file

@ -98,7 +98,7 @@ jobs:
mv cargo-tarpaulin ~/.cargo/bin/
- name: Run tests
run: NO_COLOR=1 cargo tarpaulin --out Xml --verbose
run: NO_COLOR=1 sudo -E cargo tarpaulin --features live-tests --out Xml --verbose
- name: Upload reports to codecov
uses: codecov/codecov-action@v1

View file

@ -4,6 +4,10 @@ version = "0.1.0"
authors = ["Orhun Parmaksız <orhunparmaksiz@gmail.com>"]
edition = "2021"
[features]
# tests that affect the system state
live-tests = []
[dependencies]
getopts = "0.2.21"

View file

@ -9,13 +9,13 @@ pub mod args;
use crate::app::App;
use crate::args::Args;
use std::io;
use std::io::Write;
use systeroid_core::config::Config;
use systeroid_core::error::Result;
use systeroid_core::sysctl::controller::Sysctl;
/// Runs `systeroid`.
pub fn run(args: Args) -> Result<()> {
pub fn run<Output: Write>(args: Args, output: &mut Output) -> Result<()> {
let config = Config {
verbose: args.verbose,
ignore_errors: args.ignore_errors,
@ -24,9 +24,8 @@ pub fn run(args: Args) -> Result<()> {
display_type: args.display_type,
..Default::default()
};
let mut stdout = io::stdout();
let mut sysctl = Sysctl::init(config)?;
let mut app = App::new(&mut sysctl, &mut stdout, args.tree_output)?;
let mut app = App::new(&mut sysctl, output, args.tree_output)?;
if args.preload_system_files {
app.preload_from_system()?;

View file

@ -1,10 +1,12 @@
use std::env;
use std::io;
use std::process;
use systeroid::args::Args;
fn main() {
if let Some(args) = Args::parse(env::args().collect()) {
match systeroid::run(args) {
let mut stdout = io::stdout();
match systeroid::run(args, &mut stdout) {
Ok(_) => process::exit(0),
Err(e) => {
eprintln!("{}", e);

View file

@ -0,0 +1,30 @@
use {
systeroid::args::Args, systeroid_core::error::Result,
systeroid_core::sysctl::display::DisplayType,
};
#[cfg_attr(not(feature = "live-tests"), ignore)]
#[test]
fn test_systeroid() -> Result<()> {
let args = Args::default();
let mut output = Vec::new();
systeroid::run(args, &mut output)?;
assert!(String::from_utf8_lossy(&output).contains("kernel.watchdog ="));
let args = Args {
values: vec![String::from("vm.zone_reclaim_mode=0")],
display_type: DisplayType::Binary,
..Args::default()
};
let mut output = Vec::new();
systeroid::run(args, &mut output)?;
assert_eq!("0", String::from_utf8_lossy(&output));
let args = Args {
preload_system_files: true,
..Args::default()
};
systeroid::run(args, &mut Vec::new())?;
Ok(())
}