# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # pylint: disable=protected-access import time from unittest import mock from google.adk.telemetry import _metrics from opentelemetry import trace def test_get_elapsed_s_span_none(): """Tests fallback when span is None.""" start_time = 10.0 with mock.patch("time.monotonic", return_value=12.0): elapsed = _metrics.get_elapsed_s(None, start_time) assert elapsed == 2.0 # 12 - 10 def test_get_elapsed_s_span_valid(): """Tests duration calculation with valid span times.""" mock_span = mock.MagicMock(spec=trace.Span) mock_span.start_time = 1000000000 # 1s in ns mock_span.end_time = 2000000000 # 2s in ns elapsed = _metrics.get_elapsed_s(mock_span, time.monotonic()) assert elapsed == 1.0 # (2 - 1) s def test_get_elapsed_s_span_missing_start(): """Tests fallback when start_time is missing.""" mock_span = mock.MagicMock(spec=trace.Span) del mock_span.start_time mock_span.end_time = 2000000000 start_time = 10.0 with mock.patch("time.monotonic", return_value=12.0): elapsed = _metrics.get_elapsed_s(mock_span, start_time) assert elapsed == 2.0 def test_get_elapsed_s_span_missing_end(): """Tests fallback when end_time is missing.""" mock_span = mock.MagicMock(spec=trace.Span) mock_span.start_time = 1000000000 del mock_span.end_time start_time = 10.0 with mock.patch("time.monotonic", return_value=12.0): elapsed = _metrics.get_elapsed_s(mock_span, start_time) assert elapsed == 2.0 def test_get_elapsed_s_span_non_int_start(): """Tests fallback when start_time is not an integer.""" mock_span = mock.MagicMock(spec=trace.Span) mock_span.start_time = 1000000000.0 mock_span.end_time = 2000000000 start_time = 10.0 with mock.patch("time.monotonic", return_value=12.0): elapsed = _metrics.get_elapsed_s(mock_span, start_time) assert elapsed == 2.0 def test_get_elapsed_s_span_non_int_end(): """Tests fallback when end_time is not an integer.""" mock_span = mock.MagicMock(spec=trace.Span) mock_span.start_time = 1000000000 mock_span.end_time = 2000000000.0 start_time = 10.0 with mock.patch("time.monotonic", return_value=12.0): elapsed = _metrics.get_elapsed_s(mock_span, start_time) assert elapsed == 2.0