blob: 6fa5344ac1ac919a3060dcd50c9e222062f2e7b5 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <sstream>
#include <boost/test/included/unit_test.hpp>
#include <boost/test/unit_test.hpp>
#include "Compiler.hh"
#include "ValidSchema.hh"
// Assert that empty defaults don't make json schema compilation violate bounds
// checks, as they did in AVRO-1853. Please note that on Linux bounds are only
// checked in Debug builds (CMAKE_BUILD_TYPE=Debug).
void testEmptyBytesDefault() {
std::string input = "{\n\
\"type\": \"record\",\n\
\"name\": \"testrecord\",\n\
\"fields\": [\n\
{\n\
\"name\": \"testbytes\",\n\
\"type\": \"bytes\",\n\
\"default\": \"\"\n\
}\n\
]\n\
}\n\
";
std::string expected = "{\n\
\"type\": \"record\",\n\
\"name\": \"testrecord\",\n\
\"fields\": [\n\
{\n\
\"name\": \"testbytes\",\n\
\"type\": \"bytes\",\n\
\"default\": \"\"\n\
}\n\
]\n\
}\n\
";
avro::ValidSchema schema = avro::compileJsonSchemaFromString(input);
std::ostringstream actual;
schema.toJson(actual);
BOOST_CHECK_EQUAL(expected, actual.str());
}
void test2dArray() {
std::string input = "{\n\
\"type\": \"array\",\n\
\"items\": {\n\
\"type\": \"array\",\n\
\"items\": \"double\"\n\
}\n\
}\n";
std::string expected = "{\n\
\"type\": \"array\",\n\
\"items\": {\n\
\"type\": \"array\",\n\
\"items\": \"double\"\n\
}\n\
}\n\
";
avro::ValidSchema schema = avro::compileJsonSchemaFromString(input);
std::ostringstream actual;
schema.toJson(actual);
BOOST_CHECK_EQUAL(expected, actual.str());
}
boost::unit_test::test_suite *
init_unit_test_suite(int /*argc*/, char * /*argv*/[]) {
using namespace boost::unit_test;
auto *ts = BOOST_TEST_SUITE("Avro C++ unit tests for Compiler.cc");
ts->add(BOOST_TEST_CASE(&testEmptyBytesDefault));
ts->add(BOOST_TEST_CASE(&test2dArray));
return ts;
}