use ddog::prelude::*; extern crate dotenv; use dotenv::dotenv; #[test] fn post_distribution_points() { // Read id and key from environment variables dotenv().ok(); let api_key = dotenv::var("DD_API_KEY").unwrap(); // Build and send the metrics post request let mut builder = builder::Builder::new(); let mut builder_ref = builder.v1(); if dotenv::var("TRACING_SUBSCRIBER") .map(|s| s == "true") .unwrap_or(false) { builder_ref = builder_ref.with_subscriber(); } tokio_test::block_on(async { let (status, res) = builder_ref .post_distribution() .headers(vec![ ("Accept", "application/json"), ("Content-Type", "application/json"), ("DD-API-KEY", &api_key), ]) .body( r#"{ "series": [{ "host": "cloudflare_worker_1.jpeg", "metric": "rpc_latency", "points": [ [ 1636629071, [ 1.0, 2.0 ] ] ], "tags": [ "gridfin:" ], "type": "distribution" }] }"#, ) .execute() .await; tracing::info!(target: "/v2/distribution_points", "Response: {:?}", res); assert_eq!(status, 202); assert_eq!( res.unwrap(), distribution::DistributionResponse { status: String::from("ok") } ); }); } #[test] fn post_distribution_invalid_json() { // Read id and key from environment variables dotenv().ok(); let api_key = dotenv::var("DD_API_KEY").unwrap(); // Build and send the metrics post request let mut builder = builder::Builder::new(); let mut builder_ref = builder.v1(); if dotenv::var("TRACING_SUBSCRIBER") .map(|s| s == "true") .unwrap_or(false) { builder_ref = builder_ref.with_subscriber(); } tokio_test::block_on(async { let (status, res) = builder_ref .post_distribution() .headers(vec![ ("Accept", "application/json"), ("Content-Type", "application/json"), ("DD-API-KEY", &api_key), ]) .body( // NOTE THE EXTRA COMMA AT THE END OF THE FIRST SERIES OBJECT r#"{ "series": [{ "host": "cloudflare_worker_1.jpeg", "metric": "rpc_latency", "points": [ [ 1636629071, [ 1.0, 2.0 ] ] ], "tags": [ "gridfin:" ], "type": "distribution", }] }"#, ) .execute() .await; tracing::info!(target: "/v2/distribution_points", "Request Error: {:?}", res); assert_eq!(status, reqwest::StatusCode::from_u16(400).unwrap()); }); } #[test] fn distribution_post_fails_invalid_api_key() { // Build and send the metrics post request let mut builder = builder::Builder::new(); let mut builder_ref = builder.v1(); if dotenv::var("TRACING_SUBSCRIBER") .map(|s| s == "true") .unwrap_or(false) { builder_ref = builder_ref.with_subscriber(); } tokio_test::block_on(async { let (status, res) = builder_ref .post_distribution() .headers(vec![ ("Accept", "application/json"), ("Content-Type", "application/json"), ("DD-API-KEY", "THIS_IS_NOT_A_VALID_API_KEY.JPEG"), ]) .body( r#"{ "series": [{ "host": "cloudflare_worker_1.jpeg", "metric": "rpc_latency", "points": [ [ 1636629071, [ 1.0, 2.0 ] ] ], "tags": [ "gridfin:" ], "type": "distribution", }] }"#, ) .execute() .await; tracing::info!(target: "/v2/distribution_points", "Unauthorized Error: {:?}", res); assert_eq!(status, reqwest::StatusCode::from_u16(403).unwrap()); }); }