From 5e988ff80f51e80f4d74477c4a22a065472317d4 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 5 Nov 2021 20:01:43 +0300 Subject: MDEV-23766: Make Json_writer assert when one tries to author invalid JSON - Add unit test. --- unittest/sql/my_json_writer-t.cc | 130 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 unittest/sql/my_json_writer-t.cc (limited to 'unittest/sql/my_json_writer-t.cc') diff --git a/unittest/sql/my_json_writer-t.cc b/unittest/sql/my_json_writer-t.cc new file mode 100644 index 00000000000..46c3f4dc967 --- /dev/null +++ b/unittest/sql/my_json_writer-t.cc @@ -0,0 +1,130 @@ +/* + Copyright (c) 2021, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ + +#include +#include +#include +#include +#include + +/* + Unit tests for class Json_writer. At the moment there are only tests for the + "Fail an assertion if one attempts to produce invalid JSON" feature. +*/ + +struct TABLE; +struct JOIN_TAB; +class Json_writer; + + +/* Several fake objects */ +class Opt_trace +{ +public: + void enable_tracing_if_required() {} + void disable_tracing_if_required() {} + Json_writer *get_current_json() { return nullptr; } +}; + +class THD +{ +public: + Opt_trace opt_trace; +}; + +#define JSON_WRITER_UNIT_TEST +#include "../sql/my_json_writer.h" +#include "../sql/my_json_writer.cc" + +int main(int args, char **argv) +{ + plan(NO_PLAN); + diag("Testing Json_writer checks"); + + { + Json_writer w; + w.start_object(); + w.add_member("foo"); + w.end_object(); + ok(w.invalid_json, "Started a name but didn't add a value"); + } + + { + Json_writer w; + w.start_object(); + w.add_ull(123); + ok(w.invalid_json, "Unnamed value in an object"); + } + + { + Json_writer w; + w.start_array(); + w.add_member("bebebe").add_ull(345); + ok(w.invalid_json, "Named member in array"); + } + + { + Json_writer w; + w.start_object(); + w.start_array(); + ok(w.invalid_json, "Unnamed array in an object"); + } + + { + Json_writer w; + w.start_object(); + w.start_object(); + ok(w.invalid_json, "Unnamed object in an object"); + } + + { + Json_writer w; + w.start_array(); + w.add_member("zzz"); + w.start_object(); + ok(w.invalid_json, "Named object in an array"); + } + { + Json_writer w; + w.start_array(); + w.add_member("zzz"); + w.start_array(); + ok(w.invalid_json, "Named array in an array"); + } + + // BAD: + { + Json_writer w; + w.start_array(); + w.end_object(); + ok(!w.invalid_json, "BAD: not checked!"); + } + + // BAD: + { + Json_writer w; + w.start_object(); + w.end_array(); + ok(!w.invalid_json, "BAD: not checked!"); + } + + + + diag("Done"); + + return exit_status(); +} + -- cgit v1.2.1 From e9b76b896a5cec9804e653f7df117c49284cabba Mon Sep 17 00:00:00 2001 From: Sergei Krivonos Date: Mon, 8 Nov 2021 21:11:05 +0200 Subject: MDEV-23766: fix by my_json_writer test --- unittest/sql/my_json_writer-t.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'unittest/sql/my_json_writer-t.cc') diff --git a/unittest/sql/my_json_writer-t.cc b/unittest/sql/my_json_writer-t.cc index 46c3f4dc967..3d23c2f021e 100644 --- a/unittest/sql/my_json_writer-t.cc +++ b/unittest/sql/my_json_writer-t.cc @@ -110,7 +110,7 @@ int main(int args, char **argv) Json_writer w; w.start_array(); w.end_object(); - ok(!w.invalid_json, "BAD: not checked!"); + ok(w.invalid_json, "JSON object end of array"); } // BAD: @@ -118,7 +118,7 @@ int main(int args, char **argv) Json_writer w; w.start_object(); w.end_array(); - ok(!w.invalid_json, "BAD: not checked!"); + ok(w.invalid_json, "JSON array end of object"); } -- cgit v1.2.1 From 04ad98b5001eafea537d3c655d0021ffb2f5ef06 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 5 Nov 2021 19:01:43 +0200 Subject: MDEV-23766: Re-add Json_writer unit test. --- unittest/sql/my_json_writer-t.cc | 2 -- 1 file changed, 2 deletions(-) (limited to 'unittest/sql/my_json_writer-t.cc') diff --git a/unittest/sql/my_json_writer-t.cc b/unittest/sql/my_json_writer-t.cc index 3d23c2f021e..6398a589c33 100644 --- a/unittest/sql/my_json_writer-t.cc +++ b/unittest/sql/my_json_writer-t.cc @@ -105,7 +105,6 @@ int main(int args, char **argv) ok(w.invalid_json, "Named array in an array"); } - // BAD: { Json_writer w; w.start_array(); @@ -113,7 +112,6 @@ int main(int args, char **argv) ok(w.invalid_json, "JSON object end of array"); } - // BAD: { Json_writer w; w.start_object(); -- cgit v1.2.1