main.rs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #[macro_use]
  2. extern crate log;
  3. mod broadsign;
  4. use actix_web::{middleware, web, App, HttpResponse, HttpServer};
  5. use broadsign::real_time_pop_request::RealTimePopRequest;
  6. pub async fn status_get() -> HttpResponse {
  7. HttpResponse::Ok().finish()
  8. }
  9. pub async fn pop_post(pop_data: web::Json<RealTimePopRequest>) -> HttpResponse {
  10. let pop_data: RealTimePopRequest = pop_data.into_inner();
  11. debug!("{:?}", pop_data);
  12. HttpResponse::Ok().finish()
  13. }
  14. #[actix_rt::main]
  15. async fn main() -> std::io::Result<()> {
  16. if !std::env::vars().any(|(k, _)| k == "RUST_LOG") {
  17. std::env::set_var("RUST_LOG", "info");
  18. }
  19. env_logger::init();
  20. info!("=== Starting Real-Time Pop Service ===");
  21. HttpServer::new(move || {
  22. App::new().wrap(middleware::Logger::default()).service(
  23. web::scope("")
  24. .route("/status", web::get().to(status_get))
  25. .route("/pop", web::post().to(pop_post)),
  26. )
  27. })
  28. .bind("0.0.0.0:8080")?
  29. .run()
  30. .await
  31. }
  32. #[cfg(test)]
  33. mod tests_endpoint_status {
  34. use super::*;
  35. use actix_web::{http, web};
  36. #[actix_rt::test]
  37. async fn given_everything_is_running_status_returns_200_ok() {
  38. let resp = status_get().await;
  39. assert_eq!(resp.status(), http::StatusCode::OK);
  40. }
  41. }
  42. #[cfg(test)]
  43. mod tests_endpoint_pop {
  44. use super::*;
  45. use actix_web::{http, web};
  46. use broadsign::real_time_pop_request::{RealTimePopEntry, RealTimePopRequest};
  47. use serde_json::json;
  48. #[actix_rt::test]
  49. async fn given_a_valid_pop_and_healthy_server_respond_ok() {
  50. let resp = pop_post(web::Json(RealTimePopRequest {
  51. api_key: "some_secure_api_key".to_owned(),
  52. player_id: 123456,
  53. pops: vec![RealTimePopEntry {
  54. display_unit_id: 123,
  55. frame_id: 124,
  56. active_screens_count: 2,
  57. ad_copy_id: 56467,
  58. campaign_id: 61000,
  59. schedule_id: 61001,
  60. impressions: 675,
  61. interactions: 0,
  62. end_time: chrono::NaiveDate::from_ymd(2017, 11, 23).and_hms_milli(13, 27, 12, 500),
  63. duration_ms: 12996,
  64. service_name: "bmb".to_owned(),
  65. service_value: "701".to_owned(),
  66. extra_data: json!(""),
  67. }],
  68. }))
  69. .await;
  70. assert_eq!(resp.status(), http::StatusCode::OK);
  71. }
  72. }