GraphGenie: To detect logic bugs in graph database engines
GraphGenie
GraphGenie is a bug-finding tool to detect logic bugs and performance issues (we also find internal errors) in graph database management systems. Specifically, unlike most existing testing works mutating query predicates, GraphGenie leverages Graph Query Transformations (GQT) to construct semantically equivalent or variant graph query patterns, which enables comparative analysis of their results to reveal bugs. GraphGenie has been tested and found previously unknown bugs on popular graph database engines like Neo4j.
If you use, extend, or build upon GraphGenie we kindly ask you to cite our ICSE’24 paper:
Install
git clone https://github.com/YuanchengJiang/GraphGenie.git
apt install python3
apt install python3-pip
pip3 install configparser
pip3 install neo4j
pip3 install redisgraph
pip3 install psycopg2
Graph Database Engine Setup
We do not initialize graph data. We use existing graph dataset like recommendations. We give concrete steps for setting up the Neo4j below. For other graph database engines, please refer to official documentations for installation and dataset initialization. We include the python drivers for RedisGraph and AgensGraph in our code.
Neo4j
Then please connect to the server to config your password (the default username:neo4j password:neo4j) (password is 12344321 in our default setting)
./bin/cypher-shell
Use
Config graphgenie.ini first and then start the testing:
If you test Neo4j, simply run the main.py
For other databases, you need to first initialize the dataset and specify
in main.py line 332, or implement your own schema scanner (should be similar to Neo4j one).
Copyright (C) 2023 YuanchengJiang