##// END OF EJS Templates
tests: show graph log before and after widening in more cases...
tests: show graph log before and after widening in more cases I'm about to make some changes to which revisions get sent during widening. Some more tests will make it clearer what changes. I've also switched to graph log so we easily notice if the graph shape changes. Differential Revision: https://phab.mercurial-scm.org/D7091

File last commit:

r43421:36e386db default
r43516:a151606a default
Show More
revlog.cc
62 lines | 1.6 KiB | text/x-c | CppLexer
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 #include <Python.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <string>
#include "pyutil.h"
extern "C" {
static PyCodeObject *code;
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
{
contrib::initpy(*argv[0]);
code = (PyCodeObject *)Py_CompileString(R"py(
from parsers import parse_index2
for inline in (True, False):
try:
index, cache = parse_index2(data, inline)
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 index.slicechunktodensity(list(range(len(index))), 0.5, 262144)
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.stats()
index.findsnapshots({}, 0)
10 in index
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 for rev in range(len(index)):
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.reachableroots(0, [len(index)-1], [rev])
Augie Fackler
fuzz: exercise more of the revlog API...
r41340 node = index[rev][7]
partial = index.shortest(node)
index.partialmatch(node[:partial])
Augie Fackler
fuzz: exercise a little more revlog code...
r43421 index.deltachain(rev, None, True)
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 except Exception as e:
pass
# uncomment this print if you're editing this Python code
# to debug failures.
# print e
)py",
"fuzzer", Py_file_input);
return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
{
Augie Fackler
fuzz: don't allow enormous revlog inputs either...
r41339 // Don't allow fuzzer inputs larger than 60k, since we'll just bog
// down and not accomplish much.
if (Size > 60000) {
return 0;
}
Augie Fackler
fuzz: new fuzzer for revlog's parse_index2 method...
r41050 PyObject *text =
PyBytes_FromStringAndSize((const char *)Data, (Py_ssize_t)Size);
PyObject *locals = PyDict_New();
PyDict_SetItemString(locals, "data", text);
PyObject *res = PyEval_EvalCode(code, contrib::pyglobals(), locals);
if (!res) {
PyErr_Print();
}
Py_XDECREF(res);
Py_DECREF(locals);
Py_DECREF(text);
return 0; // Non-zero return values are reserved for future use.
}
}