Added tests and tentative support for GPU recognition on Windows

This commit is contained in:
River 2023-01-04 21:53:38 -05:00
parent eefb431ae7
commit ab33a365f9
4 changed files with 102 additions and 17 deletions

50
Cargo.lock generated
View File

@ -223,6 +223,12 @@ dependencies = [
"cxx-build", "cxx-build",
] ]
[[package]]
name = "itoa"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.60" version = "0.3.60"
@ -322,7 +328,8 @@ dependencies = [
"chrono", "chrono",
"colored", "colored",
"quoted-string", "quoted-string",
"sys-info", "serde",
"serde_json",
"sysinfo", "sysinfo",
"time 0.3.17", "time 0.3.17",
"whoami", "whoami",
@ -374,6 +381,12 @@ dependencies = [
"num_cpus", "num_cpus",
] ]
[[package]]
name = "ryu"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.1.0" version = "1.1.0"
@ -391,6 +404,31 @@ name = "serde"
version = "1.0.152" version = "1.0.152"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.152"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]] [[package]]
name = "syn" name = "syn"
@ -403,16 +441,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "sys-info"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
dependencies = [
"cc",
"libc",
]
[[package]] [[package]]
name = "sysinfo" name = "sysinfo"
version = "0.27.2" version = "0.27.2"

View File

@ -9,8 +9,11 @@ edition = "2021"
chrono = "0.4.23" chrono = "0.4.23"
colored = "2.0.0" colored = "2.0.0"
quoted-string = "0.6.1" quoted-string = "0.6.1"
sys-info = "0.9.1"
sysinfo = "0.27.2" sysinfo = "0.27.2"
time = "0.3.17" time = "0.3.17"
#users = "0.11.0"
whoami = "1.3.0" whoami = "1.3.0"
serde_json = "1.0.91"
[dependencies.serde]
version = "1.0.152"
features = ["std", "derive", "serde_derive"]

View File

@ -1,3 +1,4 @@
use chrono::*; use chrono::*;
use colored::*; use colored::*;
use sysinfo::*; use sysinfo::*;
@ -22,6 +23,7 @@ fn main() {
color_print("Uptime:\t", '', &format!("{}s", sys_info.uptime), "bright black"); color_print("Uptime:\t", '', &format!("{}s", sys_info.uptime), "bright black");
color_print("Shell:\t", '', &sys_info.shell, "bright magenta"); color_print("Shell:\t", '', &sys_info.shell, "bright magenta");
color_print("CPU:\t", '', &sys_info.cpu, "green"); color_print("CPU:\t", '', &sys_info.cpu, "green");
} }
fn color_print(field_title: &str, icon: char, field: &str, color: &str) { fn color_print(field_title: &str, icon: char, field: &str, color: &str) {
@ -32,6 +34,7 @@ fn color_print(field_title: &str, icon: char, field: &str, color: &str) {
); );
} }
#[derive(Debug)]
struct InformationStruct { struct InformationStruct {
username: String, username: String,
hostname: String, hostname: String,
@ -82,7 +85,12 @@ impl InformationStruct {
cpu: String::from(sys.cpus()[0].brand()), cpu: String::from(sys.cpus()[0].brand()),
_gpu: String::from("Unknown GPU"), // TODO: Add GPU detection. _gpu: {
if sys.name().unwrap_or(String::from("Unknown System")) == "Windows" {
println!("{:#?}", std::process::Command::new("wmic").arg("path").arg("win32_VideoController").arg("get").arg("name").output().expect("Unknown GPU"));
}
String::from("Unknown GPU")
}, // TODO: Add GPU detection.
_memory: String::from("Unknown memory"), // TODO: Add memory detection. _memory: String::from("Unknown memory"), // TODO: Add memory detection.
@ -113,7 +121,14 @@ impl InformationStruct {
"macOS" => '', "macOS" => '',
"Unknown System" => '?', "Unknown System" => '?',
_ => { _ => {
unreachable!() if sys
.name()
.unwrap_or(String::from("Unknown System"))
.contains("linux") {
''
} else {
'?'
}
} }
}, },
@ -126,13 +141,37 @@ impl InformationStruct {
"FreeBSD" => String::from("red"), "FreeBSD" => String::from("red"),
"Ubuntu Linux" => String::from("orange"), "Ubuntu Linux" => String::from("orange"),
"Arch Linux" | "Windows" | "PopOS" => String::from("bright cyan"), "Arch Linux" | "Windows" | "PopOS" => String::from("bright cyan"),
"Fedora Linux" | "Kali Linux" => String::from("bright blue"), "Fedora Linux" | "Kali Linux" | "Alpine Linux" => String::from("bright blue"),
"OpenSUSE" | "Linux Mint" | "Android" => String::from("bright green"), "OpenSUSE" | "Linux Mint" | "Android" => String::from("bright green"),
"EndeavourOS" | "Gentoo linux" => String::from("purple"), "EndeavourOS" | "Gentoo linux" | "CentOS" => String::from("purple"),
"iOS" | "macOS" | "ElementaryOS" => String::from("bright white"), "iOS" | "macOS" | "ElementaryOS" => String::from("bright white"),
"Alma Linux" => String::from("yellow"),
_ => String::from("bright white"), _ => String::from("bright white"),
}, },
} }
} }
} }
#[cfg(test)]
mod test {
use crate::InformationStruct;
use std::fs;
#[test]
pub fn log_gathered_data() {
let sys_info = InformationStruct::new();
let data_string = format!("{:#?}", sys_info);
let result = fs::write("./test_output.txt", data_string);
if result.is_ok() {
println!("\nHEY THERE! A logging file was generated by this test. \nIt's located in this folder, and called 'test_output.txt'. \nSEND THIS FILE to the maintainer of the project!\n");
} else {
println!("Woops. A file wasn't able to be generated. The program or user might not have permission to make files in this directory.");
};
assert!(result.is_ok());
}
}

15
test_output.txt Normal file
View File

@ -0,0 +1,15 @@
InformationStruct {
username: "river",
hostname: "desktop-s5lkjhl",
os_name: "Arch Linux",
os_ver: "Unknown System Version",
kernel_ver: "5.15.79.1-microsoft-standard-WSL2",
uptime: 39416,
shell: "zsh",
_terminal: "Unknown Terminal",
cpu: "Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz",
_gpu: "Unknown GPU",
_memory: "Unknown memory",
icon: '\u{f303}',
color: "bright cyan",
}