Skip to content

Commit 83b3bd0

Browse files
committed
Add a version of isValidMetadata() that accepts already parsed metadata
1 parent 4a02e9a commit 83b3bd0

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

test/Metadata.cpp

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include <iostream>
2525
#include <libsolutil/Assertions.h>
2626
#include <libsolutil/CommonData.h>
27-
#include <libsolutil/JSON.h>
2827
#include <test/Metadata.h>
2928

3029
using namespace std;
@@ -170,30 +169,35 @@ std::optional<map<string, string>> parseCBORMetadata(bytes const& _metadata)
170169
}
171170
}
172171

173-
bool isValidMetadata(string const& _metadata)
172+
bool isValidMetadata(string const& _serialisedMetadata)
174173
{
175174
Json::Value metadata;
176-
if (!util::jsonParseStrict(_metadata, metadata))
175+
if (!util::jsonParseStrict(_serialisedMetadata, metadata))
177176
return false;
178177

178+
return isValidMetadata(metadata);
179+
}
180+
181+
bool isValidMetadata(Json::Value const& _metadata)
182+
{
179183
if (
180-
!metadata.isObject() ||
181-
!metadata.isMember("version") ||
182-
!metadata.isMember("language") ||
183-
!metadata.isMember("compiler") ||
184-
!metadata.isMember("settings") ||
185-
!metadata.isMember("sources") ||
186-
!metadata.isMember("output") ||
187-
!metadata["settings"].isMember("evmVersion") ||
188-
!metadata["settings"].isMember("metadata") ||
189-
!metadata["settings"]["metadata"].isMember("bytecodeHash")
184+
!_metadata.isObject() ||
185+
!_metadata.isMember("version") ||
186+
!_metadata.isMember("language") ||
187+
!_metadata.isMember("compiler") ||
188+
!_metadata.isMember("settings") ||
189+
!_metadata.isMember("sources") ||
190+
!_metadata.isMember("output") ||
191+
!_metadata["settings"].isMember("evmVersion") ||
192+
!_metadata["settings"].isMember("metadata") ||
193+
!_metadata["settings"]["metadata"].isMember("bytecodeHash")
190194
)
191195
return false;
192196

193-
if (!metadata["version"].isNumeric() || metadata["version"] != 1)
197+
if (!_metadata["version"].isNumeric() || _metadata["version"] != 1)
194198
return false;
195199

196-
if (!metadata["language"].isString() || metadata["language"].asString() != "Solidity")
200+
if (!_metadata["language"].isString() || _metadata["language"].asString() != "Solidity")
197201
return false;
198202

199203
/// @TODO add more strict checks

test/Metadata.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222

2323
#include <libsolutil/CommonData.h>
24+
#include <libsolutil/JSON.h>
2425

2526
#include <map>
2627
#include <optional>
@@ -48,8 +49,10 @@ std::string bytecodeSansMetadata(std::string const& _bytecode);
4849
/// - everything else is invalid
4950
std::optional<std::map<std::string, std::string>> parseCBORMetadata(bytes const& _metadata);
5051

51-
/// Expects a serialised metadata JSON and returns true if the
52-
/// content is valid metadata.
53-
bool isValidMetadata(std::string const& _metadata);
52+
/// Expects a serialised metadata JSON and returns true if the content is valid metadata.
53+
bool isValidMetadata(std::string const& _serialisedMetadata);
54+
55+
/// Expects a deserialised metadata JSON and returns true if the content is valid metadata.
56+
bool isValidMetadata(Json::Value const& _metadata);
5457

5558
} // end namespaces

test/libsolidity/Metadata.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ optional<string> compileAndCheckLicenseMetadata(string const& _contractName, cha
5858
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
5959

6060
std::string const& serialisedMetadata = compilerStack.metadata(_contractName);
61-
BOOST_CHECK(solidity::test::isValidMetadata(serialisedMetadata));
6261
Json::Value metadata;
6362
BOOST_REQUIRE(util::jsonParseStrict(serialisedMetadata, metadata));
63+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
6464

6565
BOOST_CHECK_EQUAL(metadata["sources"].size(), 1);
6666
BOOST_REQUIRE(metadata["sources"].isMember("A.sol"));
@@ -250,9 +250,9 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources)
250250
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
251251

252252
std::string const& serialisedMetadata = compilerStack.metadata("A");
253-
BOOST_CHECK(solidity::test::isValidMetadata(serialisedMetadata));
254253
Json::Value metadata;
255254
BOOST_REQUIRE(util::jsonParseStrict(serialisedMetadata, metadata));
255+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
256256

257257
BOOST_CHECK_EQUAL(metadata["sources"].size(), 1);
258258
BOOST_CHECK(metadata["sources"].isMember("A"));
@@ -291,9 +291,9 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources_imports)
291291
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
292292

293293
std::string const& serialisedMetadata = compilerStack.metadata("C");
294-
BOOST_CHECK(solidity::test::isValidMetadata(serialisedMetadata));
295294
Json::Value metadata;
296295
BOOST_REQUIRE(util::jsonParseStrict(serialisedMetadata, metadata));
296+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
297297

298298
BOOST_CHECK_EQUAL(metadata["sources"].size(), 3);
299299
BOOST_CHECK(metadata["sources"].isMember("A"));
@@ -320,8 +320,8 @@ BOOST_AUTO_TEST_CASE(metadata_useLiteralContent)
320320
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
321321
string metadata_str = compilerStack.metadata("test");
322322
Json::Value metadata;
323-
util::jsonParseStrict(metadata_str, metadata);
324-
BOOST_CHECK(solidity::test::isValidMetadata(metadata_str));
323+
BOOST_REQUIRE(util::jsonParseStrict(metadata_str, metadata));
324+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
325325
BOOST_CHECK(metadata.isMember("settings"));
326326
BOOST_CHECK(metadata["settings"].isMember("metadata"));
327327
BOOST_CHECK(metadata["settings"]["metadata"].isMember("bytecodeHash"));
@@ -354,8 +354,8 @@ BOOST_AUTO_TEST_CASE(metadata_viair)
354354
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
355355
string metadata_str = compilerStack.metadata("test");
356356
Json::Value metadata;
357-
util::jsonParseStrict(metadata_str, metadata);
358-
BOOST_CHECK(solidity::test::isValidMetadata(metadata_str));
357+
BOOST_REQUIRE(util::jsonParseStrict(metadata_str, metadata));
358+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
359359
BOOST_CHECK(metadata.isMember("settings"));
360360
if (_viair)
361361
{
@@ -381,9 +381,9 @@ BOOST_AUTO_TEST_CASE(metadata_revert_strings)
381381
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
382382

383383
std::string const& serialisedMetadata = compilerStack.metadata("A");
384-
BOOST_CHECK(solidity::test::isValidMetadata(serialisedMetadata));
385384
Json::Value metadata;
386385
BOOST_REQUIRE(util::jsonParseStrict(serialisedMetadata, metadata));
386+
BOOST_CHECK(solidity::test::isValidMetadata(metadata));
387387

388388
BOOST_CHECK_EQUAL(metadata["settings"]["debug"]["revertStrings"], "strip");
389389
}

0 commit comments

Comments
 (0)