@@ -2716,6 +2716,80 @@ TEST_F(JsonFamilyTest, DebugFieldsLegacy) {
27162716 EXPECT_THAT (resp, IntArg (1 ));
27172717}
27182718
2719+ TEST_F (JsonFamilyTest, DebugMemory) {
2720+ auto resp = Run ({" JSON.SET" , " json1" , " $" ,
2721+ R"( [1, 2.3, "foo", true, null, {}, [], {"a":1, "b":2}, [1,2,3]])" });
2722+ EXPECT_EQ (resp, " OK" );
2723+
2724+ resp = Run ({" JSON.DEBUG" , " memory" , " json1" , " $[*]" });
2725+ EXPECT_EQ (resp.type , RespExpr::ARRAY);
2726+ EXPECT_EQ (resp.GetVec ().size (), 9 );
2727+ EXPECT_EQ (resp.GetVec ()[0 ].GetInt (), 0 );
2728+ EXPECT_EQ (resp.GetVec ()[1 ].GetInt (), 0 );
2729+ EXPECT_EQ (resp.GetVec ()[2 ].GetInt (), 0 );
2730+ EXPECT_EQ (resp.GetVec ()[3 ].GetInt (), 0 );
2731+ EXPECT_EQ (resp.GetVec ()[4 ].GetInt (), 0 );
2732+ EXPECT_GE (resp.GetVec ()[5 ].GetInt (), 0 );
2733+ EXPECT_GE (resp.GetVec ()[6 ].GetInt (), 0 );
2734+ EXPECT_GT (resp.GetVec ()[7 ].GetInt (), 0 );
2735+ EXPECT_GT (resp.GetVec ()[8 ].GetInt (), 0 );
2736+
2737+ resp = Run ({" JSON.DEBUG" , " memory" , " json1" , " $" });
2738+ EXPECT_GT (resp.GetInt (), 0 );
2739+
2740+ resp = Run ({" JSON.SET" , " bigstr" , " $" ,
2741+ R"( {"text":"This is a longer string that should definitely exceed SSO buffer"})" });
2742+ EXPECT_EQ (resp, " OK" );
2743+ resp = Run ({" JSON.DEBUG" , " memory" , " bigstr" , " $.text" });
2744+ EXPECT_GT (resp.GetInt (), 0 );
2745+
2746+ resp = Run ({" JSON.SET" , " obj_doc" , " $" , R"( {"num":42, "obj":{"k1":1,"k2":2}})" });
2747+ EXPECT_EQ (resp, " OK" );
2748+ resp = Run ({" JSON.DEBUG" , " MEMORY" , " obj_doc" , " $.num" });
2749+ EXPECT_EQ (resp.GetInt (), 0 );
2750+ resp = Run ({" JSON.DEBUG" , " memory" , " obj_doc" , " $.obj" });
2751+ EXPECT_GT (resp.GetInt (), 0 );
2752+ }
2753+
2754+ TEST_F (JsonFamilyTest, DebugMemoryLegacy) {
2755+ auto resp = Run ({" JSON.SET" , " json1" , " $" ,
2756+ R"( [1, 2.3, "foo", true, null, {}, [], {"a":1, "b":2}, [1,2,3]])" });
2757+ EXPECT_EQ (resp, " OK" );
2758+
2759+ resp = Run ({" JSON.DEBUG" , " memory" , " json1" , " ." });
2760+ EXPECT_EQ (resp.type , RespExpr::INT64);
2761+ EXPECT_GT (resp.GetInt (), 0 );
2762+
2763+ resp = Run ({" JSON.DEBUG" , " memory" , " json1" });
2764+ EXPECT_EQ (resp.type , RespExpr::INT64);
2765+ EXPECT_GT (resp.GetInt (), 0 );
2766+
2767+ resp = Run ({" JSON.SET" , " primitives" , " $" , R"( {"num":42, "bool":true, "null":null})" });
2768+ EXPECT_EQ (resp, " OK" );
2769+ resp = Run ({" JSON.DEBUG" , " memory" , " primitives" , " .num" });
2770+ EXPECT_EQ (resp.GetInt (), 0 );
2771+ resp = Run ({" JSON.DEBUG" , " memory" , " primitives" , " .bool" });
2772+ EXPECT_EQ (resp.GetInt (), 0 );
2773+ resp = Run ({" JSON.DEBUG" , " memory" , " primitives" , " .null" });
2774+ EXPECT_EQ (resp.GetInt (), 0 );
2775+
2776+ resp = Run ({" JSON.SET" , " obj_doc" , " $" ,
2777+ R"( {"longstring":"This is a very long string that definitely exceeds SSO buffer"})" });
2778+ EXPECT_EQ (resp, " OK" );
2779+ resp = Run ({" JSON.DEBUG" , " MEMORY" , " obj_doc" , " .longstring" });
2780+ EXPECT_GT (resp.GetInt (), 0 );
2781+
2782+ resp = Run ({" JSON.SET" , " arr" , " $" , R"( [1,2,3,4,5,6,7,8,9,10])" });
2783+ EXPECT_EQ (resp, " OK" );
2784+ resp = Run ({" JSON.DEBUG" , " memory" , " arr" , " ." });
2785+ EXPECT_GT (resp.GetInt (), 0 );
2786+
2787+ resp = Run ({" JSON.SET" , " obj" , " $" , R"( {"a":1, "b":2, "c":3})" });
2788+ EXPECT_EQ (resp, " OK" );
2789+ resp = Run ({" JSON.DEBUG" , " memory" , " obj" , " ." });
2790+ EXPECT_GT (resp.GetInt (), 0 );
2791+ }
2792+
27192793TEST_F (JsonFamilyTest, Resp) {
27202794 auto resp = Run ({" JSON.SET" , " json" , " ." , PhonebookJson});
27212795 ASSERT_THAT (resp, " OK" );
0 commit comments