From 7a3837e09b5994ae82b242d7e273636d419f0e42 Mon Sep 17 00:00:00 2001
From: Maaz Ahmed <maaz.a@subcom.tech>
Date: Tue, 2 Jan 2024 10:11:24 +0000
Subject: [PATCH] test: Improve tests

---
 Cargo.lock     | 67 ++++++++++++++++++++++----------------------------
 Cargo.toml     |  3 +--
 JustFile       |  7 ++++++
 README.md      |  8 +++---
 tests/api.rs   | 31 +++++------------------
 tests/fns.rs   | 10 +++++++-
 tests/utils.rs |  1 +
 7 files changed, 59 insertions(+), 68 deletions(-)
 create mode 100644 JustFile

diff --git a/Cargo.lock b/Cargo.lock
index a7f756d..bdb4279 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -28,9 +28,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.77"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
 
 [[package]]
 name = "autocfg"
@@ -182,20 +182,14 @@ dependencies = [
 
 [[package]]
 name = "deranged"
-version = "0.3.10"
+version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
 dependencies = [
  "powerfmt",
  "serde",
 ]
 
-[[package]]
-name = "dotenv"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
-
 [[package]]
 name = "either"
 version = "1.9.0"
@@ -220,7 +214,7 @@ dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
@@ -240,7 +234,7 @@ checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
@@ -651,7 +645,6 @@ dependencies = [
 name = "mquery"
 version = "0.6.0"
 dependencies = [
- "dotenv",
  "enum-as-inner",
  "mquery-macros",
  "prometheus-http-query",
@@ -746,7 +739,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
@@ -833,18 +826,18 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.71"
+version = "1.0.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
+checksum = "2de98502f212cfcea8d0bb305bd0f49d7ebdd75b64ba0a68f937d888f4e0d6db"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "prometheus-http-query"
-version = "0.8.1"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5064f9bd466079eb96e7e8a920506c26053a040ee0a388c8f8e9280a50f5599a"
+checksum = "e0de773a6ba25c9164ed9d86d653a92fac759a6f0e683fd141d56bb96e80fd8b"
 dependencies = [
  "enum-as-inner",
  "mime",
@@ -869,9 +862,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
@@ -1052,29 +1045,29 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
 
 [[package]]
 name = "serde"
-version = "1.0.193"
+version = "1.0.194"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+checksum = "0b114498256798c94a0689e1a15fec6005dee8ac1f41de56404b67afc2a4b773"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.193"
+version = "1.0.194"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+checksum = "a3385e45322e8f9931410f01b3031ec534c3947d0e94c18049af4d9f9907d4e0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.108"
+version = "1.0.110"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "6fbd975230bada99c8bb618e0c365c2eefa219158d5c6c29610fd09ff1833257"
 dependencies = [
  "itoa",
  "ryu",
@@ -1143,9 +1136,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.43"
+version = "2.0.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53"
+checksum = "89456b690ff72fddcecf231caedbe615c59480c93358a93dfae7fc29e3ebbf0e"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1188,22 +1181,22 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.52"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.52"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
@@ -1275,7 +1268,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
 ]
 
 [[package]]
@@ -1455,7 +1448,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
  "wasm-bindgen-shared",
 ]
 
@@ -1489,7 +1482,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.43",
+ "syn 2.0.46",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index f217bab..6dc49db 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,5 +24,4 @@ macros = ["dep:mquery-macros"]
 multi = ["dep:tokio"]
 
 [dev-dependencies]
-tokio = { version = "1.34.0", default-features = false, features = ["rt", "rt-multi-thread", "macros"]}
-dotenv = "*"
+tokio = { version = "1.34.0", default-features = false, features = ["macros", "rt-multi-thread"]}
diff --git a/JustFile b/JustFile
new file mode 100644
index 0000000..72d06ce
--- /dev/null
+++ b/JustFile
@@ -0,0 +1,7 @@
+# Run all tests (integration + unit)
+test:
+	victoriametrics 2> /dev/null &
+	cargo test --all-features
+	pkill victoriametrics
+	sleep 1
+	rm -rf ./victoria-metrics-data
diff --git a/README.md b/README.md
index f2e4e58..d85d188 100644
--- a/README.md
+++ b/README.md
@@ -15,12 +15,14 @@ The library internally uses `prometheus-http-query` crate. As the name suggests,
 ## Usage Example
 ```rust
 use mquery::{
-    macros::promql,
     query::{fns::aggregate::sum, Metric},
     result::Error,
     Auth, Method, QueryManager,
 };
 
+#[cfg(feature = "macros")]
+use mquery::macros::promql;
+
 const TOKEN: &str = "";
 
 #[tokio::main]
@@ -34,14 +36,14 @@ async fn main() -> Result<(), Error> {
         .method(Method::Post); // Default is `GET`
 
     // Compile time checked queries
+    #[cfg(feature = "macros")]
     let checked_qry = promql!(sum(metric_name{label="value",label2!="value2"}));
-    let _response = manager.query(checked_qry).await?;
 
     // Query builder API
     let typed_query = sum(Metric::new("metric_name")
         .label_eq("label", "value")
         .label_ne("label2", "value2"));
-    let _response = manager.query(typed_query).await?;
+    let _response = manager.query(typed_query).await;
 
     Ok(())
 }
diff --git a/tests/api.rs b/tests/api.rs
index a11d853..db6f2bc 100644
--- a/tests/api.rs
+++ b/tests/api.rs
@@ -1,26 +1,15 @@
 use mquery::{
     query::{self, Metric},
-    Auth, QueryManager,
+    QueryManager,
 };
-use tokio::runtime::Runtime;
 
 mod utils;
 
-// TODO: Create proper tests with local server
-#[test]
-fn deserialize_response() {
-    let (url, token) = get_url_token();
-    let rt = Runtime::new().unwrap();
-    let query = format!(
-        "sum(M40c82231{{uuid=\"{}\"}}[10d])",
-        "1bed9384-5d24-11e3-abe4-2d513ee73a00"
-    );
-    let _ = rt
-        .block_on(
-            QueryManager::new(url.parse().unwrap())
-                .auth(Auth::Bearer(token))
-                .query(query),
-        )
+#[tokio::test]
+async fn deserialize_response() {
+    let _resp = QueryManager::new(utils::URL.parse().unwrap())
+        .query("metric")
+        .await
         .unwrap();
 }
 
@@ -48,11 +37,3 @@ async fn raw_response() {
         .await
         .unwrap();
 }
-
-fn get_url_token() -> (String, String) {
-    dotenv::dotenv().expect("No .env file found in working dir");
-    (
-        std::env::var("VM_URL").expect("VM URL not found in env"),
-        std::env::var("VM_TOKEN").expect("VM URL not found in env"),
-    )
-}
diff --git a/tests/fns.rs b/tests/fns.rs
index da305a8..f63681a 100644
--- a/tests/fns.rs
+++ b/tests/fns.rs
@@ -1,9 +1,12 @@
 mod utils;
 use mquery::query::{
-    fns::{aggregate, label, rollup, transform},
+    fns::{self, aggregate, rollup, transform},
     Duration, Metric, Unit,
 };
 
+#[cfg(feature = "metricsql")]
+use fns::label;
+
 macro_rules! rollup_tests {
     ($($fn_name:ident),+) => {
         $(#[tokio::test]
@@ -24,6 +27,7 @@ macro_rules! aggr_tests {
     };
 }
 
+#[cfg(feature = "metricsql")]
 macro_rules! label_tests {
     ($($fn_name: tt),+) => {
         $(#[tokio::test]
@@ -91,6 +95,7 @@ async fn quantile_over_time() {
     utils::send_query(query).await.unwrap();
 }
 
+#[cfg(feature = "metricsql")]
 #[tokio::test]
 async fn mql_label_map() {
     let query = label::mql_label_map(
@@ -101,6 +106,7 @@ async fn mql_label_map() {
     utils::send_query(query).await.unwrap();
 }
 
+#[cfg(feature = "metricsql")]
 label_tests!(
     mql_sort_by_label,
     mql_sort_by_label_desc,
@@ -110,12 +116,14 @@ label_tests!(
 
 transform_tests!(abs, absent, ceil, changes, delta, exp, floor, sort, sort_desc, sqrt);
 
+#[cfg(feature = "metricsql")]
 #[tokio::test]
 async fn trans_limit_offset() {
     let query = transform::mql_limit_offset(1, 2, Metric::new("metric")).to_string();
     utils::send_query(query).await.unwrap();
 }
 
+#[cfg(feature = "metricsql")]
 #[tokio::test]
 async fn trans_union() {
     let query = transform::mql_union(&[Metric::new("metric"), Metric::new("metric2")]).to_string();
diff --git a/tests/utils.rs b/tests/utils.rs
index e686901..367cbd1 100644
--- a/tests/utils.rs
+++ b/tests/utils.rs
@@ -3,6 +3,7 @@ use mquery::{query::IntoQuery, result::QryResult, QueryManager};
 // local victoria metrics server
 pub static URL: &str = "http://localhost:8428";
 
+#[allow(unused)]
 pub async fn send_query(query: impl IntoQuery) -> QryResult {
     QueryManager::new(URL.parse().unwrap()).query(query).await
 }
-- 
GitLab