#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/rand_util.h"
#include "base/test/fuzztest_support.h"
#include "third_party/fuzztest/src/fuzztest/fuzztest.h"
#include "third_party/inspector_protocol/crdtp/json.h"
namespace content {
void ConvertsJSONToCBORCorrectly(std::string_view input) {
std::vector<uint8_t> cbor;
crdtp::json::ConvertJSONToCBOR(base::as_byte_span(input), &cbor);
}
auto JsonDomain() {
return fuzztest::ReversibleMap(
[](base::Value value) {
return base::WriteJson(std::move(value)).value_or("");
},
[](const std::string& value) -> std::optional<std::tuple<base::Value>> {
auto res =
base::JSONReader::Read(value, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
if (!res) {
return std::nullopt;
}
return std::tuple{std::move(*res)};
},
fuzztest::Arbitrary<base::Value>());
}
FUZZ_TEST(DevToolsProtocolFuzzer, ConvertsJSONToCBORCorrectly)
.WithDomains(fuzztest::OneOf(JsonDomain(),
fuzztest::Arbitrary<std::string>().WithSeeds(
[]() -> std::vector<std::string> {
auto domain = JsonDomain();
return {domain.GetRandomValue(
base::RandomBitGenerator())};
})));
}