From 473fb9bae80bf27d6ba94b6bb6ad9ae32c4ba8de Mon Sep 17 00:00:00 2001 From: An Long Date: Tue, 8 Sep 2026 22:35:20 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Return=20an=20error=20for=20NOT?= =?UTF-8?q?=5FSTORED=20in=20the=20ascii=20protocol?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/protocol/ascii.rs | 5 ++++- tests/test_ascii.rs | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/protocol/ascii.rs b/src/protocol/ascii.rs index 747cd04..3516b3c 100644 --- a/src/protocol/ascii.rs +++ b/src/protocol/ascii.rs @@ -398,7 +398,10 @@ impl AsciiProtocol { let response = MemcacheError::try_from(response)?; match response { "STORED\r\n" => Ok(true), - "NOT_STORED\r\n" => Ok(false), + "NOT_STORED\r\n" => match command { + StoreCommand::Add => Err(CommandError::KeyExists)?, + _ => Err(CommandError::KeyNotFound)?, + }, "EXISTS\r\n" => Err(CommandError::KeyExists)?, "NOT_FOUND\r\n" => Err(CommandError::KeyNotFound)?, response => Err(ServerError::BadResponse(Cow::Owned(response.into())))?, diff --git a/tests/test_ascii.rs b/tests/test_ascii.rs index 9249a32..38ad7a6 100644 --- a/tests/test_ascii.rs +++ b/tests/test_ascii.rs @@ -40,6 +40,15 @@ fn test_ascii() { let value: Option = client.get("ascii_pend").unwrap(); assert_eq!(value, None); + assert!(client.add("ascii_foo", "dup", 0).is_err()); + assert!(client.replace("ascii_pend", "x", 0).is_err()); + assert!(client.append("ascii_pend", "x").is_err()); + assert!(client.prepend("ascii_pend", "x").is_err()); + let value: Option = client.get("ascii_foo").unwrap(); + assert_eq!(value, Some("bar".into())); + let value: Option = client.get("ascii_pend").unwrap(); + assert_eq!(value, None); + assert!(client.increment("ascii_counter", 1).is_err()); client.set("ascii_counter", 3, 0).unwrap(); assert_eq!(client.increment("ascii_counter", 100).unwrap(), 103);