mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 16:48:30 +00:00
Fix SSL certificate verification issue in provider data fetching
Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
40
tests/cli/create_test.py
Normal file
40
tests/cli/create_test.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
from click.testing import CliRunner
|
||||
|
||||
from crewai.cli.cli import create
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def runner():
|
||||
return CliRunner()
|
||||
|
||||
|
||||
class TestCreateCommand:
|
||||
@mock.patch("crewai.cli.cli.create_crew")
|
||||
def test_create_crew_with_ssl_verify_default(self, mock_create_crew, runner):
|
||||
"""Test that create crew command passes skip_ssl_verify=False by default."""
|
||||
result = runner.invoke(create, ["crew", "test_crew"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
mock_create_crew.assert_called_once()
|
||||
assert mock_create_crew.call_args[1]["skip_ssl_verify"] is False
|
||||
|
||||
@mock.patch("crewai.cli.cli.create_crew")
|
||||
def test_create_crew_with_skip_ssl_verify(self, mock_create_crew, runner):
|
||||
"""Test that create crew command passes skip_ssl_verify=True when flag is used."""
|
||||
result = runner.invoke(create, ["crew", "test_crew", "--skip_ssl_verify"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
mock_create_crew.assert_called_once()
|
||||
assert mock_create_crew.call_args[1]["skip_ssl_verify"] is True
|
||||
|
||||
@mock.patch("crewai.cli.cli.create_flow")
|
||||
def test_create_flow_ignores_skip_ssl_verify(self, mock_create_flow, runner):
|
||||
"""Test that create flow command ignores the skip_ssl_verify flag."""
|
||||
result = runner.invoke(create, ["flow", "test_flow", "--skip_ssl_verify"])
|
||||
|
||||
assert result.exit_code == 0
|
||||
mock_create_flow.assert_called_once()
|
||||
assert mock_create_flow.call_args == mock.call("test_flow")
|
||||
85
tests/cli/provider_test.py
Normal file
85
tests/cli/provider_test.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
import requests
|
||||
from click.testing import CliRunner
|
||||
|
||||
from crewai.cli.provider import (
|
||||
fetch_provider_data,
|
||||
get_provider_data,
|
||||
load_provider_data,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_response():
|
||||
"""Mock a successful response from requests.get."""
|
||||
mock_resp = mock.Mock()
|
||||
mock_resp.headers = {"content-length": "100"}
|
||||
mock_resp.iter_content.return_value = [b'{"model1": {"litellm_provider": "openai"}}']
|
||||
return mock_resp
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_cache_file():
|
||||
"""Create a temporary file to use as a cache file."""
|
||||
with tempfile.NamedTemporaryFile() as tmp:
|
||||
yield Path(tmp.name)
|
||||
|
||||
|
||||
class TestProviderFunctions:
|
||||
@mock.patch("crewai.cli.provider.requests.get")
|
||||
def test_fetch_provider_data_with_ssl_verify(self, mock_get, mock_response, mock_cache_file):
|
||||
"""Test that fetch_provider_data calls requests.get with verify=True by default."""
|
||||
mock_get.return_value = mock_response
|
||||
|
||||
fetch_provider_data(mock_cache_file)
|
||||
|
||||
mock_get.assert_called_once()
|
||||
assert mock_get.call_args[1]["verify"] is True
|
||||
|
||||
@mock.patch("crewai.cli.provider.requests.get")
|
||||
def test_fetch_provider_data_without_ssl_verify(self, mock_get, mock_response, mock_cache_file):
|
||||
"""Test that fetch_provider_data calls requests.get with verify=False when skip_ssl_verify=True."""
|
||||
mock_get.return_value = mock_response
|
||||
|
||||
fetch_provider_data(mock_cache_file, skip_ssl_verify=True)
|
||||
|
||||
mock_get.assert_called_once()
|
||||
assert mock_get.call_args[1]["verify"] is False
|
||||
|
||||
@mock.patch("crewai.cli.provider.requests.get")
|
||||
def test_fetch_provider_data_handles_request_exception(self, mock_get, mock_cache_file):
|
||||
"""Test that fetch_provider_data handles RequestException properly."""
|
||||
mock_get.side_effect = requests.RequestException("Test error")
|
||||
|
||||
result = fetch_provider_data(mock_cache_file)
|
||||
|
||||
assert result is None
|
||||
mock_get.assert_called_once()
|
||||
|
||||
@mock.patch("crewai.cli.provider.fetch_provider_data")
|
||||
@mock.patch("crewai.cli.provider.read_cache_file")
|
||||
def test_load_provider_data_with_ssl_verify(
|
||||
self, mock_read_cache, mock_fetch, mock_cache_file
|
||||
):
|
||||
"""Test that load_provider_data passes skip_ssl_verify to fetch_provider_data."""
|
||||
mock_read_cache.return_value = None
|
||||
mock_fetch.return_value = {"model1": {"litellm_provider": "openai"}}
|
||||
|
||||
load_provider_data(mock_cache_file, 3600, skip_ssl_verify=True)
|
||||
|
||||
mock_fetch.assert_called_once_with(mock_cache_file, True)
|
||||
|
||||
@mock.patch("crewai.cli.provider.load_provider_data")
|
||||
def test_get_provider_data_with_ssl_verify(self, mock_load, tmp_path):
|
||||
"""Test that get_provider_data passes skip_ssl_verify to load_provider_data."""
|
||||
mock_load.return_value = {"model1": {"litellm_provider": "openai"}}
|
||||
|
||||
get_provider_data(skip_ssl_verify=True)
|
||||
|
||||
mock_load.assert_called_once()
|
||||
assert mock_load.call_args[0][2] is True # skip_ssl_verify parameter
|
||||
Reference in New Issue
Block a user