update: add throttled endless random garbage
							parent
							
								
									09464c548a
								
							
						
					
					
						commit
						498d69eeb9
					
				|  | @ -303,22 +303,54 @@ async fn handle_server_list ( | |||
| 	Ok (ok_reply (s)?) | ||||
| } | ||||
| 
 | ||||
| async fn handle_endless_source (gib: usize) -> Result <Response <Body>, http::Error> { | ||||
| async fn handle_endless_source (gib: usize, throttle: Option <usize>) 
 | ||||
| -> Result <Response <Body>, http::Error> 
 | ||||
| { | ||||
| 	use futures::stream::StreamExt; | ||||
| 	use tokio::sync::mpsc; | ||||
| 	
 | ||||
| 	let random_block = { | ||||
| 		use rand::RngCore; | ||||
| 	let block_bytes = 64 * 1024; | ||||
| 	let num_blocks = (1024 * 1024 * 1024 / block_bytes) * gib; | ||||
| 	
 | ||||
| 	let (tx, rx) = mpsc::channel (1); | ||||
| 	
 | ||||
| 	tokio::spawn (async move { | ||||
| 		let mut tx = tx; | ||||
| 		
 | ||||
| 		let mut rng = rand::thread_rng (); | ||||
| 		let mut block = vec! [0u8; 64 * 1024]; | ||||
| 		rng.fill_bytes (&mut block); | ||||
| 		block | ||||
| 	}; | ||||
| 		let random_block = { | ||||
| 			use rand::RngCore; | ||||
| 			
 | ||||
| 			let mut rng = rand::thread_rng (); | ||||
| 			let mut block = vec! [0u8; 64 * 1024]; | ||||
| 			rng.fill_bytes (&mut block); | ||||
| 			block | ||||
| 		}; | ||||
| 		
 | ||||
| 		let mut interval = tokio::time::interval (Duration::from_millis (1000)); | ||||
| 		let mut blocks_sent = 0; | ||||
| 		
 | ||||
| 		while blocks_sent < num_blocks { | ||||
| 			if throttle.is_some () { | ||||
| 				interval.tick ().await; | ||||
| 			} | ||||
| 			
 | ||||
| 			for _ in 0..throttle.unwrap_or (1) { | ||||
| 				let item = Ok::<_, Infallible> (random_block.clone ()); | ||||
| 				if let Err (_) = tx.send (item).await { | ||||
| 					debug! ("Endless source dropped"); | ||||
| 					return; | ||||
| 				} | ||||
| 				blocks_sent += 1; | ||||
| 			} | ||||
| 		} | ||||
| 		
 | ||||
| 		debug! ("Endless source ended"); | ||||
| 	}); | ||||
| 	
 | ||||
| 	Response::builder () | ||||
| 	.status (StatusCode::OK) | ||||
| 	.header ("content-type", "application/octet-stream") | ||||
| 	.body (Body::wrap_stream (futures::stream::repeat (Ok::<_, Infallible> (random_block)).take (gib * 1024 * 1024 / 64))) | ||||
| 	.body (Body::wrap_stream (rx)) | ||||
| } | ||||
| 
 | ||||
| #[instrument (level = "trace", skip (req, state, handlebars))] | ||||
|  | @ -379,7 +411,10 @@ async fn handle_all ( | |||
| 			Ok (ok_reply (s)?) | ||||
| 		} | ||||
| 		else if rest == "endless_source" { | ||||
| 			Ok (handle_endless_source (1).await?) | ||||
| 			Ok (handle_endless_source (1, None).await?) | ||||
| 		} | ||||
| 		else if rest == "endless_source_throttled" { | ||||
| 			Ok (handle_endless_source (1, Some (1024 / 64)).await?) | ||||
| 		} | ||||
| 		else { | ||||
| 			Ok (error_reply (StatusCode::OK, "Can't route URL")?) | ||||
|  |  | |||
|  | @ -41,12 +41,13 @@ AIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAA" rel="icon" type="image/x-icon" /> | |||
| <h1>Debugging tools (relay)</h1> | ||||
| 
 | ||||
| <p> | ||||
| 
 | ||||
| Lorem ipsum dolor set amet | ||||
| 
 | ||||
| <p> | ||||
| 
 | ||||
| <a href="endless_source">1 GiB random garbage data source</a> | ||||
| 
 | ||||
| <p> | ||||
| <a href="endless_source_throttled">1 GiB random garbage data source (Throttled to 1 MiB/s)</a> | ||||
| 
 | ||||
| </body> | ||||
| </html> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 _
						_