diff options
author | Benjamin Morrison <ben@gbmor.org> | 2023-06-21 22:32:46 -0400 |
---|---|---|
committer | Benjamin Morrison <ben@gbmor.org> | 2023-06-21 22:32:46 -0400 |
commit | af0ce6fb874bd486f837a5636a7f0d05841fde57 (patch) | |
tree | bb32a94d12d38b5aaac9436511722c3b0d8e6f6e /src/response.rs | |
parent | b1c03b7e4c7b02d45ca022eb1992db0c4784f5b6 (diff) | |
download | laika-trunk.tar.gz |
Diffstat (limited to 'src/response.rs')
-rw-r--r-- | src/response.rs | 91 |
1 files changed, 88 insertions, 3 deletions
diff --git a/src/response.rs b/src/response.rs index f11723b..3356998 100644 --- a/src/response.rs +++ b/src/response.rs @@ -22,7 +22,7 @@ pub const GEMINI_MIME: &str = "text/gemini"; #[allow(dead_code)] #[derive(Clone, Copy, Debug, PartialEq)] pub enum Code { - Unknown = 00, + Unknown = 99, Input = 10, SensitiveInput = 11, Success = 20, @@ -44,9 +44,9 @@ pub enum Code { } impl Code { - pub fn get_header(&self, mime: &str) -> Vec<u8> { + pub fn get_header(&self, meta: &str) -> Vec<u8> { let msg = if *self == Code::Success { - format!("{} {}\r\n", self, mime) + format!("{} {}\r\n", self, meta) } else { format!("{}\r\n", self) }; @@ -88,3 +88,88 @@ impl fmt::Display for Code { pub fn footer_bytes<'a>() -> &'a [u8] { "\n\n~~~~ served by laika ~~~~~~~~~\nhttps://sr.ht/~gbmor/laika\n\n".as_bytes() } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn header_check() { + // we don't care about the metadata, just the code and the line ending + let unknown = Code::Unknown.get_header(""); + assert!(unknown.ends_with("\r\n".as_bytes())); + assert_eq!(&unknown[0..2], "99".as_bytes()); + + let input = Code::Input.get_header(""); + assert!(input.ends_with("\r\n".as_bytes())); + assert_eq!(&input[0..2], "10".as_bytes()); + + let sensitive_input = Code::SensitiveInput.get_header(""); + assert!(sensitive_input.ends_with("\r\n".as_bytes())); + assert_eq!(&sensitive_input[0..2], "11".as_bytes()); + + let success = Code::Success.get_header(""); + assert!(success.ends_with("\r\n".as_bytes())); + assert_eq!(&success[0..2], "20".as_bytes()); + + let rdr_temp = Code::RedirectTemporary.get_header(""); + assert!(rdr_temp.ends_with("\r\n".as_bytes())); + assert_eq!(&rdr_temp[0..2], "30".as_bytes()); + + let rdr_perm = Code::RedirectPermanent.get_header(""); + assert!(rdr_perm.ends_with("\r\n".as_bytes())); + assert_eq!(&rdr_perm[0..2], "31".as_bytes()); + + let temp_fail = Code::TemporaryFailure.get_header(""); + assert!(temp_fail.ends_with("\r\n".as_bytes())); + assert_eq!(&temp_fail[0..2], "40".as_bytes()); + + let server_unavailable = Code::ServerUnavailable.get_header(""); + assert!(server_unavailable.ends_with("\r\n".as_bytes())); + assert_eq!(&server_unavailable[0..2], "41".as_bytes()); + + let cgi_err = Code::CgiError.get_header(""); + assert!(cgi_err.ends_with("\r\n".as_bytes())); + assert_eq!(&cgi_err[0..2], "42".as_bytes()); + + let proxy_err = Code::ProxyError.get_header(""); + assert!(proxy_err.ends_with("\r\n".as_bytes())); + assert_eq!(&proxy_err[0..2], "43".as_bytes()); + + let slow_down = Code::SlowDown.get_header(""); + assert!(slow_down.ends_with("\r\n".as_bytes())); + assert_eq!(&slow_down[0..2], "44".as_bytes()); + + let perm_fail = Code::PermanentFailure.get_header(""); + assert!(perm_fail.ends_with("\r\n".as_bytes())); + assert_eq!(&perm_fail[0..2], "50".as_bytes()); + + let not_found = Code::NotFound.get_header(""); + assert!(not_found.ends_with("\r\n".as_bytes())); + assert_eq!(¬_found[0..2], "51".as_bytes()); + + let gone = Code::Gone.get_header(""); + assert!(gone.ends_with("\r\n".as_bytes())); + assert_eq!(&gone[0..2], "52".as_bytes()); + + let proxy_req_refused = Code::ProxyRequestRefused.get_header(""); + assert!(proxy_req_refused.ends_with("\r\n".as_bytes())); + assert_eq!(&proxy_req_refused[0..2], "53".as_bytes()); + + let bad_req = Code::BadRequest.get_header(""); + assert!(bad_req.ends_with("\r\n".as_bytes())); + assert_eq!(&bad_req[0..2], "59".as_bytes()); + + let client_cert_required = Code::ClientCertificateRequired.get_header(""); + assert!(client_cert_required.ends_with("\r\n".as_bytes())); + assert_eq!(&client_cert_required[0..2], "60".as_bytes()); + + let cert_not_auth = Code::CertificateNotAuthorised.get_header(""); + assert!(cert_not_auth.ends_with("\r\n".as_bytes())); + assert_eq!(&cert_not_auth[0..2], "61".as_bytes()); + + let cert_not_valid = Code::CertificateNotValid.get_header(""); + assert!(cert_not_valid.ends_with("\r\n".as_bytes())); + assert_eq!(&cert_not_valid[0..2], "62".as_bytes()); + } +} |