Skip to content
This repository has been archived by the owner on Jul 29, 2022. It is now read-only.

Commit

Permalink
solved bug on put command and added tests to cover the case
Browse files Browse the repository at this point in the history
  • Loading branch information
kanekotic committed Aug 22, 2016
1 parent 5d3e444 commit 20d093d
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 21 deletions.
9 changes: 5 additions & 4 deletions src/P2S_Lib/redisdatastore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ void RedisDataStore::Put(string key, std::vector<json> changes)
client.setnx(key, "{}");
json collection = json::parse(this->GetSync(key));
for(auto change : changes){
if(change["_delete"].get<bool>())
auto changeId = change["_id"].get<string>();
if(collection.count(changeId) != 0 && change["_delete"].get<bool>())
{
collection.erase(change["_id"].get<string>());
collection.erase(changeId);
continue;
}
else if(collection.count("_id") == 0 || collection["_id"]["_mtime"].get<time_t>() < change["_mtime"].get<time_t>())
else if(collection.count(changeId) == 0 || collection[changeId]["_mtime"].get<time_t>() < change["_mtime"].get<time_t>())
{
collection[change["_id"].get<string>()] = change;
collection[changeId] = change;
continue;
}
}
Expand Down
14 changes: 7 additions & 7 deletions test/P2S_Lib_Test/jsonrpcrequesttest.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
#include <gtest/gtest.h>
#include <jsonrpcresponse.h>
#include <jsonrpcrequest.h>

using namespace P2S::Lib;

TEST(RPCResponseTest, ValidJsonRpcResponseTest) {
ValidJsonRpcResponse response("it works", "10");
EXPECT_EQ("{\"id\":\"10\",\"jsonrpc\":\"2.0\",\"result\":\"it works\"}", response.Serialize());
TEST(RPCRequestTest, ParseCorrectJsonRPC) {
JsonRpcRequest request;
ASSERT_NO_THROW(request.Deserialize("{\"jsonrpc\": \"2.0\", \"method\":\"example\", \"params\": [42], \"id\": 2}"));
}

TEST(RPCResponseTest, ErrorJsonRpcResponseTest) {
ErrorJsonRpcResponse response(-32700,"Parse Error", "10");
EXPECT_EQ("{\"error\":{\"code\":-32700,\"data\":\"\",\"message\":\"Parse Error\"},\"id\":\"10\",\"jsonrpc\":\"2.0\"}", response.Serialize());
TEST(RPCRequestTest, ParseIncorrectJsonRPC) {
JsonRpcRequest request;
ASSERT_ANY_THROW(request.Deserialize("{\"jsonrpc\": \"2.0\".... \"method\":\"example\", \"id\": 2}"));
}

14 changes: 7 additions & 7 deletions test/P2S_Lib_Test/jsonrpcresponsetest.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#include <gtest/gtest.h>
#include <jsonrpcrequest.h>
#include <jsonrpcresponse.h>

using namespace P2S::Lib;

TEST(RPCRequestTest, ParseCorrectJsonRPC) {
JsonRpcRequest request;
ASSERT_NO_THROW(request.Deserialize("{\"jsonrpc\": \"2.0\", \"method\":\"example\", \"params\": [42], \"id\": 2}"));
TEST(RPCResponseTest, ValidJsonRpcResponseTest) {
ValidJsonRpcResponse response("it works", "10");
EXPECT_EQ("{\"id\":\"10\",\"jsonrpc\":\"2.0\",\"result\":\"it works\"}", response.Serialize());
}

TEST(RPCRequestTest, ParseIncorrectJsonRPC) {
JsonRpcRequest request;
ASSERT_ANY_THROW(request.Deserialize("{\"jsonrpc\": \"2.0\".... \"method\":\"example\", \"id\": 2}"));
TEST(RPCResponseTest, ErrorJsonRpcResponseTest) {
ErrorJsonRpcResponse response(-32700,"Parse Error", "10");
EXPECT_EQ("{\"error\":{\"code\":-32700,\"data\":\"\",\"message\":\"Parse Error\"},\"id\":\"10\",\"jsonrpc\":\"2.0\"}", response.Serialize());
}
64 changes: 61 additions & 3 deletions test/Test_P2S_Postman.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,65 @@
],
"body": {
"mode": "raw",
"raw": "{\"jsonrpc\": \"2.0\", \"method\":\"datastorePut\", \"params\": {\"collection\": \"testCollection\", \"changes\": [{ \"_id\": \"troloro12345\", \"_mtime\": 12345, \"_delete\": false}, { \"_id\": \"troloro123456\", \"_mtime\": 12345, \"_delete\": false}] }, \"id\": 2}"
"raw": "{\"jsonrpc\": \"2.0\", \"method\":\"datastorePut\", \"params\": {\"collection\": \"testCollection\", \"changes\": [{ \"_id\": \"troloro12345\", \"_mtime\": 12345, \"_delete\": false}, { \"_id\": \"troloro123456\", \"_mtime\": 12345, \"_delete\": false}, { \"_id\": \"troloro1234567\", \"_mtime\": 12345, \"_delete\": false}] }, \"id\": 2}"
},
"description": ""
},
"response": []
},
{
"name": "put remove",
"event": [
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"\"}'\ntests[\"Body is response\"] = responseBody === expected;"
}
}
],
"request": {
"url": "http://localhost:8080/rpc",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": ""
}
],
"body": {
"mode": "raw",
"raw": "{\"jsonrpc\": \"2.0\", \"method\":\"datastorePut\", \"params\": {\"collection\": \"testCollection\", \"changes\": [{ \"_id\": \"troloro1234567\", \"_mtime\": 1234578, \"_delete\": true}] }, \"id\": 2}"
},
"description": ""
},
"response": []
},
{
"name": "put edit",
"event": [
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"\"}'\ntests[\"Body is response\"] = responseBody === expected;"
}
}
],
"request": {
"url": "http://localhost:8080/rpc",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": ""
}
],
"body": {
"mode": "raw",
"raw": "{\"jsonrpc\": \"2.0\", \"method\":\"datastorePut\", \"params\": {\"collection\": \"testCollection\", \"changes\": [{ \"_id\": \"troloro123456\", \"_mtime\": 12345789, \"_delete\": false, \"data\": \"this is attached information\"}] }, \"id\": 2}"
},
"description": ""
},
Expand Down Expand Up @@ -169,7 +227,7 @@
"listen": "test",
"script": {
"type": "text/javascript",
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"[{\\\\\"_delete\\\\\":false,\\\\\"_id\\\\\":\\\\\"troloro12345\\\\\",\\\\\"_mtime\\\\\":12345},{\\\\\"_delete\\\\\":false,\\\\\"_id\\\\\":\\\\\"troloro123456\\\\\",\\\\\"_mtime\\\\\":12345}]\"}'\ntests[\"Body is response\"] = responseBody === expected;"
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"[{\\\\\"_delete\\\\\":false,\\\\\"_id\\\\\":\\\\\"troloro12345\\\\\",\\\\\"_mtime\\\\\":12345},{\\\\\"_delete\\\\\":false,\\\\\"_id\\\\\":\\\\\"troloro123456\\\\\",\\\\\"_mtime\\\\\":12345789,\\\\\"data\\\\\":\\\\\"this is attached information\\\\\"}]\"}'\ntests[\"Body is response\"] = responseBody === expected;"
}
}
],
Expand Down Expand Up @@ -262,7 +320,7 @@
"listen": "test",
"script": {
"type": "text/javascript",
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"[{\\\\\"id\\\\\":\\\\\"troloro12345\\\\\",\\\\\"mtime\\\\\":12345},{\\\\\"id\\\\\":\\\\\"troloro123456\\\\\",\\\\\"mtime\\\\\":12345}]\"}'\ntests[\"Body is response\"] = responseBody === expected;"
"exec": "var expected = '{\"id\":\"2\",\"jsonrpc\":\"2.0\",\"result\":\"[{\\\\\"id\\\\\":\\\\\"troloro12345\\\\\",\\\\\"mtime\\\\\":12345},{\\\\\"id\\\\\":\\\\\"troloro123456\\\\\",\\\\\"mtime\\\\\":12345789}]\"}'\ntests[\"Body is response\"] = responseBody === expected;"
}
}
],
Expand Down

0 comments on commit 20d093d

Please sign in to comment.