138 lines
5 KiB
Rust
138 lines
5 KiB
Rust
|
use crate::utils;
|
||
|
use reqwest::blocking::Client;
|
||
|
use std::collections::HashMap;
|
||
|
use std::env;
|
||
|
|
||
|
// ██████╗ █████╗ ███████╗███████╗██╗███╗ ██╗ ██████╗
|
||
|
// ██╔══██╗██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝
|
||
|
// ██████╔╝███████║███████╗███████╗██║██╔██╗ ██║██║ ███╗
|
||
|
// ██╔═══╝ ██╔══██║╚════██║╚════██║██║██║╚██╗██║██║ ██║
|
||
|
// ██║ ██║ ██║███████║███████║██║██║ ╚████║╚██████╔╝
|
||
|
// ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
||
|
|
||
|
#[test]
|
||
|
fn passing_read_data_url() {
|
||
|
let cache = &mut HashMap::new();
|
||
|
let client = Client::new();
|
||
|
|
||
|
// If both source and target are data URLs,
|
||
|
// ensure the result contains target data URL
|
||
|
let (retrieved_data, final_url) = utils::retrieve_asset(
|
||
|
cache,
|
||
|
&client,
|
||
|
"data:text/html;base64,SoUrCe",
|
||
|
"data:text/html;base64,TaRgEt",
|
||
|
true,
|
||
|
"",
|
||
|
false,
|
||
|
)
|
||
|
.unwrap();
|
||
|
assert_eq!(&retrieved_data, "data:text/html;base64,TaRgEt");
|
||
|
assert_eq!(&final_url, "data:text/html;base64,TaRgEt");
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn passing_read_data_url_ignore_suggested_media_type() {
|
||
|
let cache = &mut HashMap::new();
|
||
|
let client = Client::new();
|
||
|
|
||
|
// Media type parameter should not influence data URLs
|
||
|
let (data, final_url) = utils::retrieve_asset(
|
||
|
cache,
|
||
|
&client,
|
||
|
"data:text/html;base64,SoUrCe",
|
||
|
"data:text/html;base64,TaRgEt",
|
||
|
true,
|
||
|
"image/png",
|
||
|
false,
|
||
|
)
|
||
|
.unwrap();
|
||
|
assert_eq!(&data, "data:text/html;base64,TaRgEt");
|
||
|
assert_eq!(&final_url, "data:text/html;base64,TaRgEt");
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn passing_read_local_file_with_file_url_parent() {
|
||
|
let cache = &mut HashMap::new();
|
||
|
let client = Client::new();
|
||
|
|
||
|
let file_url_protocol: &str = if cfg!(windows) { "file:///" } else { "file://" };
|
||
|
|
||
|
// Inclusion of local assets from local sources should be allowed
|
||
|
let cwd = env::current_dir().unwrap();
|
||
|
let (data, final_url) = utils::retrieve_asset(
|
||
|
cache,
|
||
|
&client,
|
||
|
&format!(
|
||
|
"{file}{cwd}/src/tests/data/local-file.html",
|
||
|
file = file_url_protocol,
|
||
|
cwd = cwd.to_str().unwrap()
|
||
|
),
|
||
|
&format!(
|
||
|
"{file}{cwd}/src/tests/data/local-script.js",
|
||
|
file = file_url_protocol,
|
||
|
cwd = cwd.to_str().unwrap()
|
||
|
),
|
||
|
true,
|
||
|
"application/javascript",
|
||
|
false,
|
||
|
)
|
||
|
.unwrap();
|
||
|
assert_eq!(&data, "data:application/javascript;base64,ZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOwpkb2N1bWVudC5ib2R5LnN0eWxlLmNvbG9yID0gInJlZCI7Cg==");
|
||
|
assert_eq!(
|
||
|
&final_url,
|
||
|
&format!(
|
||
|
"{file}{cwd}/src/tests/data/local-script.js",
|
||
|
file = file_url_protocol,
|
||
|
cwd = cwd.to_str().unwrap()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// ███████╗ █████╗ ██╗██╗ ██╗███╗ ██╗ ██████╗
|
||
|
// ██╔════╝██╔══██╗██║██║ ██║████╗ ██║██╔════╝
|
||
|
// █████╗ ███████║██║██║ ██║██╔██╗ ██║██║ ███╗
|
||
|
// ██╔══╝ ██╔══██║██║██║ ██║██║╚██╗██║██║ ██║
|
||
|
// ██║ ██║ ██║██║███████╗██║██║ ╚████║╚██████╔╝
|
||
|
// ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
||
|
|
||
|
#[test]
|
||
|
fn failing_read_local_file_with_data_url_parent() {
|
||
|
let cache = &mut HashMap::new();
|
||
|
let client = Client::new();
|
||
|
|
||
|
// Inclusion of local assets from data URL sources should not be allowed
|
||
|
let (data, final_url) = utils::retrieve_asset(
|
||
|
cache,
|
||
|
&client,
|
||
|
"data:text/html;base64,SoUrCe",
|
||
|
"file:///etc/passwd",
|
||
|
true,
|
||
|
"",
|
||
|
false,
|
||
|
)
|
||
|
.unwrap();
|
||
|
assert_eq!(&data, "");
|
||
|
assert_eq!(&final_url, "");
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn failing_read_local_file_with_https_parent() {
|
||
|
let cache = &mut HashMap::new();
|
||
|
let client = Client::new();
|
||
|
|
||
|
// Inclusion of local assets from remote sources should not be allowed
|
||
|
let (data, final_url) = utils::retrieve_asset(
|
||
|
cache,
|
||
|
&client,
|
||
|
"https://kernel.org/",
|
||
|
"file:///etc/passwd",
|
||
|
true,
|
||
|
"",
|
||
|
false,
|
||
|
)
|
||
|
.unwrap();
|
||
|
assert_eq!(&data, "");
|
||
|
assert_eq!(&final_url, "");
|
||
|
}
|