test_openapi.py
""" Tests generating the implementation of openapi/swagger:
https://swagger.io/
This script launches a sandbox node, activates folder specific
protocol, gets the RPC descriptions as JSON, and converts this JSON
into an OpenAPI specification.
This test mimicks src/openapi/generate.sh.
"""
# import json
# import subprocess
# from pathlib import Path
# import requests
# import openapi_spec_validator
# import pytest
# from launchers.sandbox import Sandbox
# from tools.constants import NODE_PARAMS
# from tools.utils import get_tezos_node_version
# from . import protocol
# class TestOpenAPI:
# @pytest.fixture(scope="class")
# def sandbox(self, sandbox: Sandbox):
# sandbox.add_node(0, params=NODE_PARAMS)
# client = sandbox.client(0)
# protocol.activate(client)
# return sandbox
# @pytest.mark.parametrize(
# "rpc_path", ["describe", "describe/chains/main/blocks/head/"]
# )
# def test_validity(self, sandbox: Sandbox, rpc_path: str, tmp_path: Path):
# """
# Mimicks the script src/openapi/generate.sh. Generates the API
# and check it generates a valid OpenAPI specification.
# """
# FIXME: https://gitlab.com/tezos/tezos/-/issues/3148
# We deactivate this test temporarily. The encodings of
# Irmin proofs generate either an assert false in
# src/lib_openapi/convert.ml:188 or an infinite loop (!?) in
# the conversion from Json Schema to OpenAPI (depending on the
# version of the proof trees used).
# node = sandbox.node(0)
# addr = f"http://localhost:{node.rpc_port}/{rpc_path}?recurse=yes"
# json_path = tmp_path / "result.json"
# with open(json_path, "w") as o_file:
# json_res = requests.get(addr).json()
# json.dump(json_res, o_file)
# # If you need to debug, insert time.sleep(15) in there,
# # to give you time to inspect generated files before the
# # enclosing 'with' block finishes or to execute the dune
# # command manually while the temporary files are still there.
# version = get_tezos_node_version()
# cmd = [
# "dune",
# "exec",
# "../src/bin_openapi/rpc_openapi.exe",
# "--",
# version,
# str(json_path.absolute()),
# ]
# process_ret = subprocess.run(
# cmd, check=True, capture_output=True, text=True
# )
# res = json.loads(process_ret.stdout)
# openapi_spec_validator.validate_spec(res)