From d749af78b59489efb9b0737dc3e5b10fea76a136 Mon Sep 17 00:00:00 2001 From: Leonid Kaganov Date: Mon, 15 Sep 2025 21:49:41 +0300 Subject: [PATCH] Fixed workspace error in REST API Signed-off-by: Leonid Kaganov --- scripts/TEST00.sh | 151 ++++++++++++++++++++++++++++++++++++++++ src/config/default.toml | 2 +- src/db.rs | 7 ++ src/handlers_http.rs | 17 ++--- 4 files changed, 168 insertions(+), 9 deletions(-) create mode 100755 scripts/TEST00.sh diff --git a/scripts/TEST00.sh b/scripts/TEST00.sh new file mode 100755 index 0000000000..b050c29890 --- /dev/null +++ b/scripts/TEST00.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +clear +source ./pulse_lib.sh + +TOKEN=$(./token.sh claims.json) + +get "00000000-0000-0000-0000-000000000001/foo/bar1" +put "00000000-0000-0000-0000-000000000001/foo/bar1" "rediska" +get "00000000-0000-0000-0000-000000000001/foo/bar1" + +exit + +#echo ${TOKEN} +#exit +ZP="00000000-0000-0000-0000-000000000001/TESTS" + + + +put "00000000-0000-0000-0000-000000000001/TESTS/val1" "value" "HULY-TTL: 1" +put "00000000-0000-0000-0000-000000000001/TESTS/val2" "value" "HULY-TTL: 12" +put "00000000-0000-0000-0000-000000000001/TESTS/val3" "value" "HULY-TTL: 1" + +get "00000000-0000-0000-0000-000000000001/TESTS/" +sleep 2 +# get "00000000-0000-0000-0000-000000000001/TESTS/val2" +get "00000000-0000-0000-0000-000000000001/TESTS/" + + + +exit + + + + + + +put "00000000-0000-0000-0000-000000000001/TESTS" "Value" + +#exit + delete "00000000-0000-0000-0000-000000000001/TESTS" +put "00000000-0000-0000-0000-000000000001/TESTS" "Value" + delete "00000000-0000-0000-0000-000000000001/TESTS" "If-Match: *" +put "00000000-0000-0000-0000-000000000001/TESTS" "Value" + delete "00000000-0000-0000-0000-000000000001/TESTS" "If-Match: dd358c74cb9cb897424838fbcb69c933" + +#exit + + put "00000000-0000-0000-0000-000000000001/TESTS" "Value" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/1" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/2" "Value_2" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/2/$/secret" "Value_secret" "HULY-TTL: 2" + get "00000000-0000-0000-0000-000000000001/TESTS/" + +#exit + + delete "0000000/TESTS" + delete ${ZP} + put ${ZP} "Value_1" "HULY-TTL: 2" + delete ${ZP} + +echo "--------- authorization_test ----------" +TOKEN="" + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2" +TOKEN=$(./token.sh claims_system.json) + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2" +TOKEN=$(./token.sh claims_wrong_ws.json) + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2" +TOKEN=$(./token.sh claims.json) + put "00000000-0000-0000-0000-000000000002/TESTS" "Value_1" "HULY-TTL: 2" + + + +echo "--------- if-match ----------" + + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/1" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/2" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/3$" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/3/secret$/4" "Value_1" "HULY-TTL: 2" + get "00000000-0000-0000-0000-000000000001/TESTS" + get "00000000-0000-0000-0000-000000000001/TESTS/" + get "00000000-0000-0000-0000-000000000001/TESTS/3/secret$/" + + +echo "--------- Deprecated symbols ----------" + + put "00000000-0000-0000-0000-000000000001/'TESTS" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TES?TS" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS*" "Value_1" "HULY-TTL: 2" + put "00000000-0000-0000-0000-000000000001/TESTS/" "Value_1" "HULY-TTL: 2" + +echo "--------- if-match ----------" + + delete ${ZP} + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 1" "If-Match: *" + get ${ZP} + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_2" "HULY-TTL: 1" + get ${ZP} + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_3" "HULY-TTL: 1" "If-Match: dd358c74cb9cb897424838fbcb69c933" + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_4" "HULY-TTL: 1" "If-Match: *" + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_5" "HULY-TTL: 1" "If-Match: c7bcabf6b98a220f2f4888a18d01568d" + put "00000000-0000-0000-0000-000000000001/TESTS" "Value_6" "HULY-TTL: 1" "If-None-Match: *" + +echo "-- Expected OK: 201 Created (key was not exist)" + + put ${ZP} "enother text" "If-None-Match" "*" + + put ${ZP} "some text" + echo "-- Expected Error: 412 Precondition Failed (key was exist)" + put ${ZP} "enother text" "If-None-Match" "*" + +echo "================> UPDATE PUT If-Match" + + get ${ZP} + + echo "-- Expected OK: 204 No Content (right hash)" + put ${ZP} "some text" "If-Match" "552e21cd4cd9918678e3c1a0df491bc3" + get ${ZP} + + echo "-- Expected OK: 204 No Content (hash still right)" + put ${ZP} "enother version" "If-Match" "552e21cd4cd9918678e3c1a0df491bc3" + + + + + + +put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 3" +echo "sleep 1 sec" +sleep 1 +get "00000000-0000-0000-0000-000000000001/TESTS" +echo "sleep 3 sec" +sleep 2 +get "00000000-0000-0000-0000-000000000001/TESTS" + +echo "--------- delete ----------" +put "00000000-0000-0000-0000-000000000001/TESTS" "Value_2" "HULY-TTL: 3" +get "00000000-0000-0000-0000-000000000001/TESTS" +delete "00000000-0000-0000-0000-000000000001/TESTS" +get "00000000-0000-0000-0000-000000000001/TESTS" + +echo "--------- prefix ----------" +put "00000000-0000-0000-0000-000000000001/TESTS1" "Value_1" "HULY-TTL: 3" +put "00000000-0000-0000-0000-000000000001/TESTS2" "Value_1" "HULY-TTL: 3" +put "00000000-0000-0000-0000-000000000001/HREST2" "Value_1" "HULY-TTL: 3" +get "00000000-0000-0000-0000-000000000001?prefix=TES" +sleep 1 +get "00000000-0000-0000-0000-000000000001?prefix=" + +exit diff --git a/src/config/default.toml b/src/config/default.toml index bd5944e8b1..9050797929 100644 --- a/src/config/default.toml +++ b/src/config/default.toml @@ -12,7 +12,7 @@ max_ttl = 3600 backend = "redis" no_authorization = false -heartbeat_timeout = 30 +heartbeat_timeout = 90 # optional settings # max_size = 100 diff --git a/src/db.rs b/src/db.rs index aadac7c1ab..d18199d157 100644 --- a/src/db.rs +++ b/src/db.rs @@ -77,6 +77,13 @@ impl Db { ttl: Option, mode: Option, ) -> redis::RedisResult<()> { + println!( + "Db::save key=[{}] value=[{:?}] mode=[{:?}]", + key, + value.as_ref(), + mode + ); + match &self.inner { DbInner::Memory(m) => { memory_save(m, key, value.as_ref(), ttl, mode).await?; diff --git a/src/handlers_http.rs b/src/handlers_http.rs index 35268b093d..676fe423f9 100644 --- a/src/handlers_http.rs +++ b/src/handlers_http.rs @@ -48,6 +48,7 @@ pub fn map_handler_error(err: impl std::fmt::Display) -> Error { #[derive(Deserialize, Debug)] pub struct PathParams { key: String, + workspace: String, } /// list @@ -55,8 +56,8 @@ pub async fn list( path: web::Path, db: web::Data, ) -> Result { - let key = path.into_inner().key; - + let params = path.into_inner(); + let key = format!("{}/{}", ¶ms.workspace, ¶ms.key); trace!(key, "list request"); async move || -> anyhow::Result { @@ -72,8 +73,8 @@ pub async fn get( path: web::Path, db: web::Data, ) -> Result { - let key = path.into_inner().key; - + let params = path.into_inner(); + let key = format!("{}/{}", ¶ms.workspace, ¶ms.key); trace!(key, "get request"); async move || -> anyhow::Result { @@ -97,8 +98,8 @@ pub async fn put( body: web::Bytes, db: web::Data, ) -> Result { - let key: String = path.into_inner().key; - + let params = path.into_inner(); + let key = format!("{}/{}", ¶ms.workspace, ¶ms.key); trace!(key, "put request"); async move || -> anyhow::Result { @@ -157,8 +158,8 @@ pub async fn delete( path: web::Path, db: web::Data, ) -> Result { - let key: String = path.into_inner().key; - + let params = path.into_inner(); + let key = format!("{}/{}", ¶ms.workspace, ¶ms.key); trace!(key, "delete request"); async move || -> anyhow::Result {