From 4e143a60ebcafae23cadd293fd3f6f38207fe88f Mon Sep 17 00:00:00 2001 From: Matthew Zhou Date: Wed, 8 Jan 2025 15:10:59 -1000 Subject: [PATCH] fix: Write unit test for ensuring e2b composio version is valid (#560) --- tests/integration_test_composio.py | 45 +++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/tests/integration_test_composio.py b/tests/integration_test_composio.py index 1b2c2e3f..8bb61567 100644 --- a/tests/integration_test_composio.py +++ b/tests/integration_test_composio.py @@ -1,28 +1,59 @@ import pytest from fastapi.testclient import TestClient +from letta.log import get_logger from letta.server.rest_api.app import app +from letta.settings import tool_settings + +logger = get_logger(__name__) @pytest.fixture -def client(): +def fastapi_client(): return TestClient(app) -def test_list_composio_apps(client): - response = client.get("/v1/tools/composio/apps") +def test_list_composio_apps(fastapi_client): + response = fastapi_client.get("/v1/tools/composio/apps") assert response.status_code == 200 assert isinstance(response.json(), list) -def test_list_composio_actions_by_app(client): - response = client.get("/v1/tools/composio/apps/github/actions") +def test_list_composio_actions_by_app(fastapi_client): + response = fastapi_client.get("/v1/tools/composio/apps/github/actions") assert response.status_code == 200 assert isinstance(response.json(), list) -def test_add_composio_tool(client): - response = client.post("/v1/tools/composio/GITHUB_STAR_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER") +def test_add_composio_tool(fastapi_client): + response = fastapi_client.post("/v1/tools/composio/GITHUB_STAR_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER") assert response.status_code == 200 assert "id" in response.json() assert "name" in response.json() + + +def test_composio_version_on_e2b_matches_server(check_e2b_key_is_set): + import composio + from e2b_code_interpreter import Sandbox + from packaging.version import Version + + sbx = Sandbox(tool_settings.e2b_sandbox_template_id) + result = sbx.run_code( + """ + import composio + print(str(composio.__version__)) + """ + ) + e2b_composio_version = result.logs.stdout[0].strip() + composio_version = str(composio.__version__) + + # Compare versions + if Version(composio_version) > Version(e2b_composio_version): + raise AssertionError(f"Local composio version {composio_version} is greater than server version {e2b_composio_version}") + elif Version(composio_version) < Version(e2b_composio_version): + logger.warning( + f"Local version of composio {composio_version} is less than the E2B version: {e2b_composio_version}. Please upgrade your local composio version." + ) + + # Print concise summary + logger.info(f"Server version: {composio_version}, E2B version: {e2b_composio_version}")