Add test support and impl dummy /read_markers
This commit is contained in:
		
							parent
							
								
									93b1d97166
								
							
						
					
					
						commit
						040296c711
					
				
					 5 changed files with 85 additions and 16 deletions
				
			
		
							
								
								
									
										12
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							|  | @ -1355,9 +1355,21 @@ dependencies = [ | |||
|  "pin-project-lite", | ||||
|  "signal-hook-registry", | ||||
|  "slab", | ||||
|  "tokio-macros", | ||||
|  "winapi 0.3.8", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio-macros" | ||||
| version = "0.2.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" | ||||
| dependencies = [ | ||||
|  "proc-macro2 1.0.10", | ||||
|  "quote 1.0.3", | ||||
|  "syn 1.0.17", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio-rustls" | ||||
| version = "0.12.2" | ||||
|  |  | |||
|  | @ -26,5 +26,5 @@ serde_json = "1.0.50" | |||
| ruma-signatures = { git = "https://github.com/ruma/ruma-signatures.git" } | ||||
| ruma-federation-api = "0.0.1" | ||||
| serde = "1.0.106" | ||||
| tokio = "0.2.16" | ||||
| tokio = { version = "0.2.16", features = ["macros"] } #rt-threaded | ||||
| rand = "0.7.3" | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| use crate::utils; | ||||
| use directories::ProjectDirs; | ||||
| use sled::IVec; | ||||
| use std::fs::remove_dir_all; | ||||
| 
 | ||||
| pub struct MultiValue(sled::Tree); | ||||
| 
 | ||||
|  | @ -65,6 +66,16 @@ pub struct Database { | |||
| } | ||||
| 
 | ||||
| impl Database { | ||||
|     /// Tries to remove the old database but ignores all errors.
 | ||||
|     pub fn try_remove(hostname: &str) { | ||||
|         let mut path = ProjectDirs::from("xyz", "koesters", "matrixserver") | ||||
|             .unwrap() | ||||
|             .data_dir() | ||||
|             .to_path_buf(); | ||||
|         path.push(hostname); | ||||
|         let _ = remove_dir_all(path); | ||||
|     } | ||||
| 
 | ||||
|     /// Load an existing database or create a new one.
 | ||||
|     pub fn load_or_create(hostname: &str) -> Self { | ||||
|         let mut path = ProjectDirs::from("xyz", "koesters", "matrixserver") | ||||
|  |  | |||
							
								
								
									
										44
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								src/main.rs
									
									
									
									
									
								
							|  | @ -6,6 +6,9 @@ mod pdu; | |||
| mod ruma_wrapper; | ||||
| mod utils; | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod test; | ||||
| 
 | ||||
| pub use data::Data; | ||||
| pub use database::Database; | ||||
| pub use pdu::PduEvent; | ||||
|  | @ -31,6 +34,7 @@ use ruma_client_api::{ | |||
|             get_avatar_url, get_display_name, get_profile, set_avatar_url, set_display_name, | ||||
|         }, | ||||
|         push::get_pushrules_all, | ||||
|         read_marker::set_read_marker, | ||||
|         room::create_room, | ||||
|         session::{get_login_types, login}, | ||||
|         state::{create_state_event_for_empty_key, create_state_event_for_key}, | ||||
|  | @ -159,9 +163,7 @@ fn login_route(data: State<Data>, body: Ruma<login::Request>) -> MatrixResult<lo | |||
|                 username = format!("@{}:{}", username, data.hostname()); | ||||
|             } | ||||
|             if let Ok(user_id) = (*username).try_into() { | ||||
|                 if !data.user_exists(&user_id) {} | ||||
| 
 | ||||
|                 // Check password
 | ||||
|                 // Check password (this also checks if the user exists
 | ||||
|                 if let Some(correct_password) = data.password_get(&user_id) { | ||||
|                     if password == correct_password { | ||||
|                         // Success!
 | ||||
|  | @ -464,6 +466,15 @@ fn upload_keys_route( | |||
|     })) | ||||
| } | ||||
| 
 | ||||
| #[post("/_matrix/client/r0/rooms/<_room_id>/read_markers", data = "<body>")] | ||||
| fn set_read_marker_route( | ||||
|     data: State<Data>, | ||||
|     body: Ruma<set_read_marker::Request>, | ||||
|     _room_id: String, | ||||
| ) -> MatrixResult<set_read_marker::Response> { | ||||
|     MatrixResult(Ok(set_read_marker::Response)) | ||||
| } | ||||
| 
 | ||||
| #[post("/_matrix/client/r0/createRoom", data = "<body>")] | ||||
| fn create_room_route( | ||||
|     data: State<Data>, | ||||
|  | @ -765,16 +776,7 @@ fn options_route(_segments: PathBuf) -> MatrixResult<create_message_event::Respo | |||
|     })) | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
|     // Log info by default
 | ||||
|     if let Err(_) = std::env::var("RUST_LOG") { | ||||
|         std::env::set_var("RUST_LOG", "matrixserver=debug,info"); | ||||
|     } | ||||
|     pretty_env_logger::init(); | ||||
| 
 | ||||
|     let data = Data::load_or_create("matrixtesting.koesters.xyz"); | ||||
|     data.debug(); | ||||
| 
 | ||||
| fn setup_rocket(data: Data) -> rocket::Rocket { | ||||
|     rocket::ignite() | ||||
|         .mount( | ||||
|             "/", | ||||
|  | @ -796,6 +798,7 @@ fn main() { | |||
|                 set_presence_route, | ||||
|                 get_keys_route, | ||||
|                 upload_keys_route, | ||||
|                 set_read_marker_route, | ||||
|                 create_room_route, | ||||
|                 get_alias_route, | ||||
|                 join_room_by_id_route, | ||||
|  | @ -810,6 +813,17 @@ fn main() { | |||
|             ], | ||||
|         ) | ||||
|         .manage(data) | ||||
|         .launch() | ||||
|         .unwrap(); | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
|     // Log info by default
 | ||||
|     if let Err(_) = std::env::var("RUST_LOG") { | ||||
|         std::env::set_var("RUST_LOG", "matrixserver=debug,info"); | ||||
|     } | ||||
|     pretty_env_logger::init(); | ||||
| 
 | ||||
|     let data = Data::load_or_create("matrixtesting.koesters.xyz"); | ||||
|     data.debug(); | ||||
| 
 | ||||
|     setup_rocket(data).launch().unwrap(); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										32
									
								
								src/test.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/test.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| use super::*; | ||||
| use rocket::{local::Client, http::Status}; | ||||
| 
 | ||||
| fn setup_client() -> Client { | ||||
|     Database::try_remove("temp"); | ||||
|     let data = Data::load_or_create("temp"); | ||||
| 
 | ||||
|     let rocket = setup_rocket(data); | ||||
|     Client::new(rocket).expect("valid rocket instance") | ||||
| } | ||||
| 
 | ||||
| #[tokio::test] | ||||
| async fn register_login() { | ||||
|     let client = setup_client(); | ||||
|     let mut response = client | ||||
|         .post("/_matrix/client/r0/register?kind=user") | ||||
|         .body( | ||||
|             r#"{
 | ||||
|     "username": "cheeky_monkey", | ||||
|     "password": "ilovebananas", | ||||
|     "device_id": "GHTYAJCE", | ||||
|     "initial_device_display_name": "Jungle Phone", | ||||
|     "inhibit_login": false | ||||
|             }"#,
 | ||||
|         ) | ||||
|         .dispatch().await; | ||||
|     let body = serde_json::to_value(&response.body_string().await.unwrap()).unwrap(); | ||||
| 
 | ||||
|     assert_eq!(response.status().code, 401); | ||||
|     assert!(dbg!(&body["flows"]).as_array().unwrap().len() > 0); | ||||
|     assert!(body["session"].as_str().unwrap().len() > 0); | ||||
| } | ||||
		Loading…
	
		Reference in a new issue