Coverage for benchmark / benchmark_odg.py: 0%
46 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-18 23:20 -0400
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-18 23:20 -0400
1# flake8: noqa
3import sys
4import time
5from os import path
7from graphqler.__main__ import run_compile_mode, run_fuzz_mode
9from graphqler import config
10import multiprocessing
13# Dictionary specifying the API URL and path
14APIS_TO_TEST = [
15 ("https://countries.trevorblades.com/", "ablation-test-oob/countries-test/"),
16 ("https://api.react-finland.fi/graphql", "ablation-test-oob/react-finland-test/"),
17 ("https://rickandmortyapi.com/graphql", "ablation-test-oob/rick-and-morty-test/"),
18 ("https://graphqlzero.almansi.me/api", "ablation-test-oob/graphql-zero-test/"),
19 ("https://graphql.anilist.co/", "ablation-test-oob/anilist-test"),
20 ("https://portal.ehri-project.eu/api/graphql", "ablation-test-oob/ehri-test/"),
21 ("https://www.universe.com/graphql", "ablation-test-oob/universe-test"),
22 ("https://beta.pokeapi.co/graphql/v1beta", "ablation-test-oob/pokeapi-test"),
23 ("https://hivdb.stanford.edu/graphql", "ablation-test-oob/hivdb-test"),
24 ("https://api.tcgdex.net/v2/graphql", "ablation-test-oob/tcgdex-test/"),
25 # ('http://localhost:4000/graphql', 'benchmark-tests/user-wallet-test/'),
26 # ("https://api.spacex.land/graphql/", "spacex-test/"),
27 # ('http://localhost:4000/graphql', 'benchmark-tests/food-delivery-test/')
28 # ('https://graphql.anilist.co/', 'benchmark-tests/anilist-test/'),
29 # ('https://www.universe.com/graphql', 'benchmark-tests/universe-test/'),
30 # ('https://beta.pokeapi.co/graphql/v1beta', 'benchmark-tests/pokeapi-test/'),
31 # ('http://localhost:3000/', 'benchmark-tests/json-graphql-server/'),
32]
34# MAX_TIMES = [5, 10, 20, 30, 60]
35MAX_TIMES = [60]
36NUM_RETRIES = 1
38# Set the constants
39config.USE_OBJECTS_BUCKET = False
40config.USE_DEPENDENCY_GRAPH = True
41config.NO_DATA_COUNT_AS_SUCCESS = False
42config.SKIP_DOS_ATTACKS = True
43config.SKIP_MISC_ATTACKS = True
44config.SKIP_INJECTION_ATTACKS = True
45config.SKIP_MAXIMAL_PAYLOADS = True
46config.DEBUG = False
47# config.TIME_BETWEEN_REQUESTS = 0.5
50# Run the command multiple times
51def run_api(api_to_test):
52 api_name = api_to_test[1]
53 api_url = api_to_test[0]
54 for max_time in MAX_TIMES:
55 output_path = f"{api_name}/{max_time}/"
56 is_success = False
57 num_tries = 0
58 while is_success is False and num_tries < NUM_RETRIES:
59 try:
60 print(f"Running the API {api_name} with path {output_path} and max time {max_time}")
61 config.MAX_TIME = max_time
62 run_compile_mode(output_path, api_url)
63 run_fuzz_mode(output_path, api_url)
64 is_success = True
65 except Exception as e:
66 print(e)
67 num_tries += 1
68 config.TIME_BETWEEN_REQUESTS = 0.1 * num_tries
69 time.sleep(10 * num_tries)
70 if is_success is False:
71 # Getting here means the API failed to run through retries
72 print(f"Error running the API {api_name} with path {output_path} and max time {max_time}")
75# Run each of the APIs in parallel
76if __name__ == "__main__":
77 processes = []
78 for api_to_test in APIS_TO_TEST:
79 p = multiprocessing.Process(target=run_api, args=(api_to_test,))
80 processes.append(p)
81 p.start()
83 for process in processes:
84 process.join()