use super::{Directory, fixture}; use dever::compiler::{build, project::Project}; #[path = "http/live.rs"] mod live; #[path = "http/streaming.rs"] mod streaming; #[path = "http/websocket.rs"] mod websocket; #[test] fn native_dever_http2_tls_and_shared_pool() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("https.dever")).unwrap(); let program = project.check().unwrap(); let binary = build::build( &program, &project.sources, "verify", &directory.0.join("https"), ) .unwrap(); let output = std::process::Command::new(binary) .current_dir( std::path::Path::new(env!("CARGO_MANIFEST_DIR")) .join("../test/dever-tests/fixtures/tls"), ) .output() .unwrap(); assert!( output.status.success(), "{}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n"); } #[test] fn native_http_send_serve_cancel_and_typed_failure() { let directory = Directory::new(); let project = Project::load(&fixture().with_file_name("http.dever")).unwrap(); let program = project.check().unwrap(); for entry in ["verify", "cancelled", "invalid", "invalidLimits"] { let binary = build::build(&program, &project.sources, entry, &directory.0.join(entry)).unwrap(); let output = std::process::Command::new(binary).output().unwrap(); if entry.starts_with("invalid") { assert!(!output.status.success()); assert!(output.stdout.is_empty()); let error = String::from_utf8_lossy(&output.stderr); assert!( error.contains(if entry == "invalid" { "ResponseResult.Failed" } else { "invalid HTTP limits" }) && error.contains("http/call.dever:"), "{error}" ); } else { assert!( output.status.success(), "{entry}: {}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n"); } } } #[test] fn native_http_handler_can_schedule_without_losing_request_ownership() { let directory = Directory::new(); let mut project = Project::load(&fixture().with_file_name("http.dever")).unwrap(); let source = project .sources .iter_mut() .find(|source| source.path.ends_with("http.dever")) .unwrap(); *source = dever::syntax::source::Source::new( source.id, &source.path, source.text.replace( "dever.http.serve(route, listener, dever.http.defaultLimits())", "dever.http.serve(scheduledRoute, listener, dever.http.defaultLimits())", ), ); let program = project.check().unwrap(); let binary = build::build( &program, &project.sources, "verify", &directory.0.join("scheduled"), ) .unwrap(); let output = std::process::Command::new(binary).output().unwrap(); assert!( output.status.success(), "{}", String::from_utf8_lossy(&output.stderr) ); assert_eq!(output.stdout, b"true\n"); }