From 7a7b29f6ef345b528d4062feadcd6f8326f90fc2 Mon Sep 17 00:00:00 2001 From: Furior Date: Tue, 28 Jan 2025 01:07:32 +0700 Subject: [PATCH 1/5] tests for http --- dmsrc/http.dm | 3 +++ tests/dm-tests.rs | 6 ++++++ tests/dm/http.dme | 29 +++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 tests/dm/http.dme diff --git a/dmsrc/http.dm b/dmsrc/http.dm index f956782..3be7288 100644 --- a/dmsrc/http.dm +++ b/dmsrc/http.dm @@ -6,6 +6,9 @@ #define RUSTUTILS_HTTP_METHOD_PATCH "patch" #define RUSTUTILS_HTTP_METHOD_HEAD "head" #define RUSTUTILS_HTTP_METHOD_POST "post" +#define RUSTUTILS_JOB_NO_RESULTS_YET "NO RESULTS YET" +#define RUSTUTILS_JOB_NO_SUCH_JOB "NO SUCH JOB" +#define RUSTUTILS_JOB_ERROR "JOB PANICKED" #define rustutils_http_request_blocking(method, url, body, headers, options) CALL_LIB(RUST_UTILS, "http_request_blocking")(method, url, body, headers, options) #define rustutils_http_request_async(method, url, body, headers, options) CALL_LIB(RUST_UTILS, "http_request_async")(method, url, body, headers, options) #define rustutils_http_check_request(req_id) CALL_LIB(RUST_UTILS, "http_check_request")(req_id) diff --git a/tests/dm-tests.rs b/tests/dm-tests.rs index a383d88..4500592 100644 --- a/tests/dm-tests.rs +++ b/tests/dm-tests.rs @@ -12,6 +12,12 @@ fn regexp() { run_dm_tests("regexp"); } +#[cfg(feature = "http")] +#[test] +fn http() { + run_dm_tests("http"); +} + fn run_dm_tests(name: &str) { std::env::remove_var("RUST_BACKTRACE"); diff --git a/tests/dm/http.dme b/tests/dm/http.dme new file mode 100644 index 0000000..eacbd44 --- /dev/null +++ b/tests/dm/http.dme @@ -0,0 +1,29 @@ +#include "common.dm" + +#define STATUS200URL "https://httpstat.us/200" +#define STATUS400URL "https://httpstat.us/400" + +/proc/execute_request(url) + rustutils_create_async_http_client() + + var/id = rustutils_http_request_async(RUSTUTILS_HTTP_METHOD_GET, url, "", list(), null) + + var/r + do { + r = rustutils_http_check_request(id) + sleep(1) + } while(r == RUSTUTILS_JOB_NO_RESULTS_YET) + + rustutils_close_async_http_client() + + var/list/L = json_decode(r) + return L + + +/test/proc/test_200() + var/list/L = execute_request(STATUS200URL) + ASSERT(L["status_code"] == 200) + +/test/proc/test_400() + var/list/L = execute_request(STATUS400URL) + ASSERT(L["status_code"] == 200) From f68baec13b029726e842dcce56f9545d781a7527 Mon Sep 17 00:00:00 2001 From: Furior Date: Tue, 28 Jan 2025 02:22:26 +0700 Subject: [PATCH 2/5] tests meme --- tests/dm/common.dm | 2 +- tests/dm/http.dme | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/dm/common.dm b/tests/dm/common.dm index 693d11e..60201c7 100644 --- a/tests/dm/common.dm +++ b/tests/dm/common.dm @@ -2,7 +2,7 @@ #include "../../target/rust_utils.dm" /world/New() - world.log << "Rust is at [RUST_UTILS]" + log << "Rust is at [RUST_UTILS]" for(var/func in typesof(/test/proc)) log << "[func] [copytext("------------------------------------------------------------------------", length("[func]"))]" call(new /test, func)() diff --git a/tests/dm/http.dme b/tests/dm/http.dme index eacbd44..6b03aad 100644 --- a/tests/dm/http.dme +++ b/tests/dm/http.dme @@ -5,25 +5,24 @@ /proc/execute_request(url) rustutils_create_async_http_client() - var/id = rustutils_http_request_async(RUSTUTILS_HTTP_METHOD_GET, url, "", list(), null) var/r - do { + do r = rustutils_http_check_request(id) - sleep(1) - } while(r == RUSTUTILS_JOB_NO_RESULTS_YET) + // sleep(1) + while(r == RUSTUTILS_JOB_NO_RESULTS_YET) + ASSERT(r != RUSTUTILS_JOB_ERROR) rustutils_close_async_http_client() var/list/L = json_decode(r) return L - /test/proc/test_200() var/list/L = execute_request(STATUS200URL) ASSERT(L["status_code"] == 200) /test/proc/test_400() var/list/L = execute_request(STATUS400URL) - ASSERT(L["status_code"] == 200) + ASSERT(L["status_code"] == 400) From d238d48ca3351ecd58195aa58f4beb62a2385d0b Mon Sep 17 00:00:00 2001 From: Furior Date: Tue, 28 Jan 2025 03:54:05 +0700 Subject: [PATCH 3/5] fix stuff or idk --- src/error.rs | 2 +- src/http.rs | 7 +++++-- tests/dm/http.dme | 7 +++++++ tests/dm/regexp.dme | 1 - 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/error.rs b/src/error.rs index f818095..5bc89f7 100644 --- a/src/error.rs +++ b/src/error.rs @@ -20,7 +20,7 @@ pub enum Error { JsonSerialization(#[from] serde_json::Error), #[cfg(feature = "http")] #[error(transparent)] - Request(#[from] Box), + Response(#[from] ureq::Transport), } impl From for Error { diff --git a/src/http.rs b/src/http.rs index bfbd3b7..91802e6 100644 --- a/src/http.rs +++ b/src/http.rs @@ -1,8 +1,10 @@ use crate::{error::Result, jobs}; use serde::{Deserialize, Serialize}; +use ureq::OrAnyStatus; use std::cell::RefCell; use std::collections::{BTreeMap, HashMap}; use std::io::Write; +use std::time::Duration; // ---------------------------------------------------------------------------- // Interface @@ -95,7 +97,8 @@ fn construct_request( "head" => client.head(url), _ => client.get(url), } - .set("User-Agent", &format!("{PKG_NAME}/{VERSION}")); + .set("User-Agent", &format!("{PKG_NAME}/{VERSION}")) + .timeout(Duration::from_secs(30)); let mut final_body = body.as_bytes().to_vec(); @@ -138,7 +141,7 @@ fn construct_request( } fn submit_request(prep: RequestPrep) -> Result { - let response = prep.req.send_bytes(&prep.body).map_err(Box::new)?; + let response = prep.req.send_bytes(&prep.body).or_any_status()?; let body; let mut resp = Response { diff --git a/tests/dm/http.dme b/tests/dm/http.dme index 6b03aad..bec0ef7 100644 --- a/tests/dm/http.dme +++ b/tests/dm/http.dme @@ -26,3 +26,10 @@ /test/proc/test_400() var/list/L = execute_request(STATUS400URL) ASSERT(L["status_code"] == 400) + +/test/proc/nonexistent() + try + var/list/L = execute_request("http://nonexistent.nonexistent") + CRASH("Should have failed") + catch + return diff --git a/tests/dm/regexp.dme b/tests/dm/regexp.dme index 3acd128..ec00c13 100644 --- a/tests/dm/regexp.dme +++ b/tests/dm/regexp.dme @@ -15,5 +15,4 @@ var/expected_error = "Words replace." /test/proc/crash() var/output = rustutils_regex_replace(input, pattern, incorrect_pattern_flags, replacement) - world.log << output ASSERT(output == expected_error) From 3f9522b450acc087aa0bfb2b14d8514758591d89 Mon Sep 17 00:00:00 2001 From: Furior Date: Tue, 28 Jan 2025 03:57:17 +0700 Subject: [PATCH 4/5] fmt --- src/http.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/http.rs b/src/http.rs index 91802e6..9d6e181 100644 --- a/src/http.rs +++ b/src/http.rs @@ -1,10 +1,10 @@ use crate::{error::Result, jobs}; use serde::{Deserialize, Serialize}; -use ureq::OrAnyStatus; use std::cell::RefCell; use std::collections::{BTreeMap, HashMap}; use std::io::Write; use std::time::Duration; +use ureq::OrAnyStatus; // ---------------------------------------------------------------------------- // Interface From f3c36ae4ac77aadd38d24cd5193e8d25cd8e9f85 Mon Sep 17 00:00:00 2001 From: Furior Date: Tue, 28 Jan 2025 04:03:34 +0700 Subject: [PATCH 5/5] dm sort --- dmsrc/file.dm | 2 ++ dmsrc/http.dm | 3 --- dmsrc/jobs.dm | 5 +++++ dmsrc/regexp.dm | 2 ++ dmsrc/transliteration.dm | 2 ++ 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 dmsrc/jobs.dm diff --git a/dmsrc/file.dm b/dmsrc/file.dm index 3f9083e..fe0300d 100644 --- a/dmsrc/file.dm +++ b/dmsrc/file.dm @@ -1 +1,3 @@ +// FILE Operations // + #define rustutils_file_write_b64decode(text, fname) CALL_LIB(RUST_UTILS, "file_write")(text, fname, "true") diff --git a/dmsrc/http.dm b/dmsrc/http.dm index 3be7288..f956782 100644 --- a/dmsrc/http.dm +++ b/dmsrc/http.dm @@ -6,9 +6,6 @@ #define RUSTUTILS_HTTP_METHOD_PATCH "patch" #define RUSTUTILS_HTTP_METHOD_HEAD "head" #define RUSTUTILS_HTTP_METHOD_POST "post" -#define RUSTUTILS_JOB_NO_RESULTS_YET "NO RESULTS YET" -#define RUSTUTILS_JOB_NO_SUCH_JOB "NO SUCH JOB" -#define RUSTUTILS_JOB_ERROR "JOB PANICKED" #define rustutils_http_request_blocking(method, url, body, headers, options) CALL_LIB(RUST_UTILS, "http_request_blocking")(method, url, body, headers, options) #define rustutils_http_request_async(method, url, body, headers, options) CALL_LIB(RUST_UTILS, "http_request_async")(method, url, body, headers, options) #define rustutils_http_check_request(req_id) CALL_LIB(RUST_UTILS, "http_check_request")(req_id) diff --git a/dmsrc/jobs.dm b/dmsrc/jobs.dm new file mode 100644 index 0000000..290841f --- /dev/null +++ b/dmsrc/jobs.dm @@ -0,0 +1,5 @@ +// JOBS // + +#define RUSTUTILS_JOB_NO_RESULTS_YET "NO RESULTS YET" +#define RUSTUTILS_JOB_NO_SUCH_JOB "NO SUCH JOB" +#define RUSTUTILS_JOB_ERROR "JOB PANICKED" diff --git a/dmsrc/regexp.dm b/dmsrc/regexp.dm index 18e69f3..a07d0d1 100644 --- a/dmsrc/regexp.dm +++ b/dmsrc/regexp.dm @@ -1 +1,3 @@ +// Regex // + #define rustutils_regex_replace(text, re, re_params, replacement) CALL_LIB(RUST_UTILS, "regex_replace")(text, re, re_params, replacement) diff --git a/dmsrc/transliteration.dm b/dmsrc/transliteration.dm index 34701a8..786b982 100644 --- a/dmsrc/transliteration.dm +++ b/dmsrc/transliteration.dm @@ -1,2 +1,4 @@ +// Transliteration + #define rustutils_cyrillic_to_latin(text) CALL_LIB(RUST_UTILS, "cyrillic_to_latin")("[text]") #define rustutils_latin_to_cyrillic(text) CALL_LIB(RUST_UTILS, "latin_to_cyrillic")("[text]")