|
1 | 1 | #!/usr/bin/env python
|
2 |
| -# -*- coding: utf-8 -*- |
3 | 2 | # Copyright (c) 2024 Oracle and/or its affiliates.
|
4 | 3 | # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
| 4 | +from unittest.mock import patch |
5 | 5 |
|
6 |
| - |
7 |
| -from unittest.mock import patch, PropertyMock |
| 6 | +import oci |
8 | 7 |
|
9 | 8 | from ads.telemetry.client import TelemetryClient
|
10 | 9 |
|
11 |
| -class TestTelemetryClient: |
12 |
| - """Contains unittests for TelemetryClient.""" |
| 10 | +TEST_CONFIG = { |
| 11 | + "tenancy": "ocid1.tenancy.oc1..unique_ocid", |
| 12 | + "user": "ocid1.user.oc1..unique_ocid", |
| 13 | + "fingerprint": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00", |
| 14 | + "key_file": "<path>/<to>/<key_file>", |
| 15 | + "region": "test_region", |
| 16 | +} |
13 | 17 |
|
14 |
| - endpoint = "https://objectstorage.us-ashburn-1.oraclecloud.com" |
| 18 | +EXPECTED_ENDPOINT = "https://objectstorage.test_region.oraclecloud.com" |
15 | 19 |
|
16 |
| - def mocked_requests_head(*args, **kwargs): |
17 |
| - class MockResponse: |
18 |
| - def __init__(self, status_code): |
19 |
| - self.status_code = status_code |
20 | 20 |
|
21 |
| - return MockResponse(200) |
| 21 | +class TestTelemetryClient: |
| 22 | + """Contains unittests for TelemetryClient.""" |
22 | 23 |
|
23 |
| - @patch('requests.head', side_effect=mocked_requests_head) |
24 |
| - @patch('ads.telemetry.client.TelemetryClient.service_endpoint', new_callable=PropertyMock, |
25 |
| - return_value=endpoint) |
26 |
| - def test_telemetry_client_record_event(self, mock_endpoint, mock_head): |
27 |
| - """Tests TelemetryClient.record_event() with category/action and path, respectively. |
28 |
| - """ |
| 24 | + @patch("oci.base_client.BaseClient.request") |
| 25 | + @patch("oci.signer.Signer") |
| 26 | + def test_telemetry_client_record_event(self, signer, request_call): |
| 27 | + """Tests TelemetryClient.record_event() with category/action and path, respectively.""" |
29 | 28 | data = {
|
30 | 29 | "cmd": "ads aqua model list",
|
31 | 30 | "category": "aqua/service/model",
|
32 | 31 | "action": "list",
|
33 | 32 | "bucket": "test_bucket",
|
34 | 33 | "namespace": "test_namespace",
|
35 |
| - "value": { |
36 |
| - "keyword": "test_service_model_name_or_id" |
37 |
| - } |
| 34 | + "value": {"keyword": "test_service_model_name_or_id"}, |
38 | 35 | }
|
39 | 36 | category = data["category"]
|
40 | 37 | action = data["action"]
|
41 | 38 | bucket = data["bucket"]
|
42 | 39 | namespace = data["namespace"]
|
43 | 40 | value = data["value"]
|
44 |
| - expected_endpoint = f"{self.endpoint}/n/{namespace}/b/{bucket}/o/telemetry/{category}/{action}" |
45 | 41 |
|
46 |
| - telemetry = TelemetryClient(bucket=bucket, namespace=namespace) |
| 42 | + with patch("oci.config.from_file", return_value=TEST_CONFIG): |
| 43 | + telemetry = TelemetryClient(bucket=bucket, namespace=namespace) |
47 | 44 | telemetry.record_event(category=category, action=action)
|
48 | 45 | telemetry.record_event(category=category, action=action, **value)
|
49 | 46 |
|
50 |
| - expected_headers = [ |
51 |
| - {'User-Agent': ''}, |
52 |
| - {'User-Agent': 'keyword=test_service_model_name_or_id'} |
| 47 | + expected_agent_headers = [ |
| 48 | + "", |
| 49 | + "keyword=test_service_model_name_or_id", |
53 | 50 | ]
|
54 |
| - i = 0 |
55 |
| - for call_args in mock_head.call_args_list: |
56 |
| - args, kwargs = call_args |
57 |
| - assert all(endpoint == expected_endpoint for endpoint in args) |
58 |
| - assert kwargs['headers'] == expected_headers[i] |
59 |
| - i += 1 |
| 51 | + |
| 52 | + assert len(request_call.call_args_list) == 2 |
| 53 | + expected_url = f"{EXPECTED_ENDPOINT}/n/{namespace}/b/{bucket}/o/telemetry/{category}/{action}" |
| 54 | + |
| 55 | + # Event #1, no user-agent |
| 56 | + args, _ = request_call.call_args_list[0] |
| 57 | + request: oci.request.Request = args[0] |
| 58 | + operation = args[2] |
| 59 | + assert request.url == expected_url |
| 60 | + assert operation == "head_object" |
| 61 | + assert request.header_params["user-agent"] == expected_agent_headers[0] |
| 62 | + |
| 63 | + # Event #2, with user-agent |
| 64 | + args, _ = request_call.call_args_list[1] |
| 65 | + request: oci.request.Request = args[0] |
| 66 | + operation = args[2] |
| 67 | + assert request.url == expected_url |
| 68 | + assert operation == "head_object" |
| 69 | + assert request.header_params["user-agent"] == expected_agent_headers[1] |
0 commit comments