Browse Source
MDEV-23766: Make Json_writer assert when one tries to author invalid JSON
MDEV-23766: Make Json_writer assert when one tries to author invalid JSON
- Add unit test.bb-10.4-MDEV-16462
committed by
Sergei Krivonos
4 changed files with 163 additions and 8 deletions
-
14sql/my_json_writer.cc
-
22sql/my_json_writer.h
-
5unittest/sql/CMakeLists.txt
-
130unittest/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 <my_global.h>
|
|||
#include <my_pthread.h>
|
|||
#include <my_sys.h>
|
|||
#include <stdio.h>
|
|||
#include <tap.h>
|
|||
|
|||
/*
|
|||
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(); |
|||
} |
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue