|
1 | | -"""Test environment setting on Langfuse get_client() function.""" |
| 1 | +"""Test the LangfuseResourceManager and get_client() function.""" |
2 | 2 |
|
3 | | -import pytest |
4 | 3 | from langfuse import Langfuse |
5 | 4 | from langfuse._client.get_client import get_client |
| 5 | +from langfuse._client.resource_manager import LangfuseResourceManager |
6 | 6 |
|
7 | 7 |
|
8 | | -def test_get_client_preserves_environment(): |
9 | | - """Test that get_client() preserves the environment when returning existing clients.""" |
10 | | - test_env = "production-test-env" |
11 | | - original_client = Langfuse(environment=test_env) |
| 8 | +def test_get_client_preserves_all_settings(): |
| 9 | + """Test that get_client() preserves environment and all client settings.""" |
| 10 | + with LangfuseResourceManager._lock: |
| 11 | + LangfuseResourceManager._instances.clear() |
12 | 12 |
|
13 | | - # Verify the original client has the correct environment |
14 | | - assert original_client._environment == test_env, ( |
15 | | - f"original client environment should be '{test_env}', got '{original_client._environment}'" |
16 | | - ) |
| 13 | + settings = { |
| 14 | + "environment": "test-env", |
| 15 | + "release": "v1.2.3", |
| 16 | + "timeout": 30, |
| 17 | + "flush_at": 100, |
| 18 | + "sample_rate": 0.8, |
| 19 | + "additional_headers": {"X-Custom": "value"}, |
| 20 | + } |
17 | 21 |
|
18 | | - # call get_client() should return a client with the same environment |
| 22 | + original_client = Langfuse(**settings) |
19 | 23 | retrieved_client = get_client() |
20 | 24 |
|
21 | | - assert retrieved_client._environment == test_env, ( |
22 | | - f"get_client() should return client with environment '{test_env}', got '{retrieved_client._environment}'" |
23 | | - ) |
24 | | - |
25 | | - original_client.shutdown() |
26 | | - |
| 25 | + assert retrieved_client._environment == settings["environment"] |
27 | 26 |
|
28 | | -def test_get_client_with_multiple_environments(): |
29 | | - """Test get_client() behavior with multiple clients having different environments.""" |
30 | | - env_a = "environment-a" |
31 | | - env_b = "environment-b" |
| 27 | + assert retrieved_client._resources is not None |
| 28 | + rm = retrieved_client._resources |
| 29 | + assert rm.environment == settings["environment"] |
| 30 | + assert rm.timeout == settings["timeout"] |
| 31 | + assert rm.sample_rate == settings["sample_rate"] |
| 32 | + assert rm.additional_headers == settings["additional_headers"] |
32 | 33 |
|
33 | | - client_a = Langfuse(public_key="pk-a", secret_key="sk-a", environment=env_a) |
34 | | - client_b = Langfuse(public_key="pk-b", secret_key="sk-b", environment=env_b) |
35 | | - |
36 | | - # original clients should have correct environments |
37 | | - assert client_a._environment == env_a |
38 | | - assert client_b._environment == env_b |
| 34 | + original_client.shutdown() |
39 | 35 |
|
40 | | - # Get clients using get_client() with specific public keys |
41 | | - retrieved_a = get_client(public_key="pk-a") |
42 | | - retrieved_b = get_client(public_key="pk-b") |
43 | 36 |
|
44 | | - # should have the same environments as the originals |
45 | | - assert retrieved_a._environment == env_a, ( |
46 | | - f"Expected client A environment to be '{env_a}', got '{retrieved_a._environment}'" |
47 | | - ) |
48 | | - assert retrieved_b._environment == env_b, ( |
49 | | - f"Expected client B environment to be '{env_b}', got '{retrieved_b._environment}'" |
50 | | - ) |
| 37 | +def test_get_client_multiple_clients_preserve_different_settings(): |
| 38 | + """Test that get_client() preserves different settings for multiple clients.""" |
| 39 | + # Settings for client A |
| 40 | + settings_a = { |
| 41 | + "public_key": "pk-comprehensive-a", |
| 42 | + "secret_key": "sk-comprehensive-a", |
| 43 | + "environment": "env-a", |
| 44 | + "release": "release-a", |
| 45 | + "timeout": 10, |
| 46 | + "sample_rate": 0.5, |
| 47 | + } |
| 48 | + |
| 49 | + # Settings for client B |
| 50 | + settings_b = { |
| 51 | + "public_key": "pk-comprehensive-b", |
| 52 | + "secret_key": "sk-comprehensive-b", |
| 53 | + "environment": "env-b", |
| 54 | + "release": "release-b", |
| 55 | + "timeout": 20, |
| 56 | + "sample_rate": 0.9, |
| 57 | + } |
| 58 | + |
| 59 | + client_a = Langfuse(**settings_a) |
| 60 | + client_b = Langfuse(**settings_b) |
| 61 | + |
| 62 | + # Get clients via get_client() |
| 63 | + retrieved_a = get_client(public_key="pk-comprehensive-a") |
| 64 | + retrieved_b = get_client(public_key="pk-comprehensive-b") |
| 65 | + |
| 66 | + # Verify each client preserves its own settings |
| 67 | + assert retrieved_a._environment == settings_a["environment"] |
| 68 | + assert retrieved_b._environment == settings_b["environment"] |
| 69 | + |
| 70 | + if retrieved_a._resources and retrieved_b._resources: |
| 71 | + assert retrieved_a._resources.timeout == settings_a["timeout"] |
| 72 | + assert retrieved_b._resources.timeout == settings_b["timeout"] |
| 73 | + assert retrieved_a._resources.sample_rate == settings_a["sample_rate"] |
| 74 | + assert retrieved_b._resources.sample_rate == settings_b["sample_rate"] |
| 75 | + assert retrieved_a._resources.release == settings_a["release"] |
| 76 | + assert retrieved_b._resources.release == settings_b["release"] |
51 | 77 |
|
52 | 78 | client_a.shutdown() |
53 | 79 | client_b.shutdown() |
54 | | - |
55 | | - |
56 | | -def test_get_client_single_client_environment(): |
57 | | - """Test that get_client() preserves environment in single-client scenario.""" |
58 | | - # Clean state - ensure no existing clients |
59 | | - from langfuse._client.resource_manager import LangfuseResourceManager |
60 | | - |
61 | | - with LangfuseResourceManager._lock: |
62 | | - LangfuseResourceManager._instances.clear() |
63 | | - |
64 | | - test_env = "single-client-env" |
65 | | - |
66 | | - client = Langfuse(environment=test_env) |
67 | | - assert client._environment == test_env |
68 | | - |
69 | | - # get_client() should return a client with the same environment |
70 | | - retrieved = get_client() |
71 | | - |
72 | | - # This assertion demonstrates the bug |
73 | | - assert retrieved._environment == test_env, ( |
74 | | - f"Expected single client scenario to preserve environment '{test_env}', got '{retrieved._environment}'" |
75 | | - ) |
76 | | - |
77 | | - client.shutdown() |
|
0 commit comments