mirror of
https://github.com/neon-mmd/websurfx.git
synced 2024-12-22 12:28:21 -05:00
991f3f59de
* ♻️ refactor: initialize & store the config & cache structs as a constant (#486) - initializes & stores the config & cache structs as a static constant. - Pass the config & cache structs as a static reference to all the functions handling their respective route. * ⚡ perf: replace hashmaps with vectors for fetching & aggregating results (#486) - replace hashmaps with vectors for fetching, collecting & aggregating results as it tends to be contigous & cache efficient data structure. - refactor & redesign algorithms for fetching & aggregating results centered around vectors in aggregate function. * ➕ build: add the future crate (#486) * ⚡ perf: use `futureunordered` for collecting results fetched from the tokio spawn tasks (#486) - using the `futureunordered` instead of vector for collecting results reduces the time it takes to fetch the results as the results do not need to come in specific order so any result that gets fetched first gets collected in the `futureunordered` type. Co-authored-by: Spencerjibz <spencernajib2@gmail.com> * ⚡ perf: initialize new async connections parallely using tokio spawn tasks (#486) * ⚡ perf: initialize redis pipeline struct once with the default size of 3 (#486) * ⚡ perf: reduce branch predictions by reducing conditional code branches (#486) * ✅ test(unit): provide unit test for the `get_safesearch_level` function (#486) * ⚡ perf: reduce clones & use index based loop to improve search results filtering performance (#486) * 🚨 fix(clippy): make clippy/format checks happy (#486) * 🚨 fix(build): make the cargo build check happy (#486) * ⚡ perf: reduce the amount of clones, to_owneds & to_strings (#486) * ⚡ perf: use async crates & methods & make functions async (#486) * 🔖 chore(release): bump the app version (#486) --------- Co-authored-by: Spencerjibz <spencernajib2@gmail.com>
41 lines
1.4 KiB
Rust
41 lines
1.4 KiB
Rust
use std::{net::TcpListener, sync::OnceLock};
|
|
|
|
use websurfx::{config::parser::Config, run, templates::views};
|
|
|
|
/// A static constant for holding the parsed config.
|
|
static CONFIG: OnceLock<Config> = OnceLock::new();
|
|
|
|
// Starts a new instance of the HTTP server, bound to a random available port
|
|
async fn spawn_app() -> String {
|
|
// Binding to port 0 will trigger the OS to assign a port for us.
|
|
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind random port");
|
|
let port = listener.local_addr().unwrap().port();
|
|
let config = CONFIG.get_or_init(|| Config::parse(false).unwrap());
|
|
let cache = websurfx::cache::cacher::create_cache(config).await;
|
|
let server = run(listener, config, cache).expect("Failed to bind address");
|
|
|
|
tokio::spawn(server);
|
|
format!("http://127.0.0.1:{}/", port)
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_index() {
|
|
let address = spawn_app().await;
|
|
|
|
let client = reqwest::Client::new();
|
|
let res = client.get(address).send().await.unwrap();
|
|
assert_eq!(res.status(), 200);
|
|
|
|
let config = Config::parse(true).unwrap();
|
|
let template = views::index::index(
|
|
&config.style.colorscheme,
|
|
&config.style.theme,
|
|
&config.style.animation,
|
|
)
|
|
.0;
|
|
assert_eq!(res.text().await.unwrap(), template);
|
|
}
|
|
|
|
// TODO: Write tests for testing parameters for search function that if provided with something
|
|
// other than u32 like alphabets and special characters than it should panic
|