blob: 2d6be117f11722a4dae85f8334de3ee1743fc51e [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2022, The Android Open Source Project
#
# 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.
"""Unittests for metrics_utils."""
# pylint: disable=invalid-name
from io import StringIO
import sys
import unittest
from unittest import mock
from atest.metrics import metrics_base
from atest.metrics import metrics_utils
from atest.proto import internal_user_log_pb2
class MetricsUtilsUnittests(unittest.TestCase):
"""Unit tests for metrics_utils.py"""
def setUp(self) -> None:
self.maxDiff = None
@mock.patch('atest.metrics.metrics_base.get_user_type')
def test_print_data_collection_notice(self, mock_get_user_type):
"""Test method print_data_collection_notice."""
# get_user_type return 1(external).
mock_get_user_type.return_value = 1
capture_output = StringIO()
sys.stdout = capture_output
metrics_utils.print_data_collection_notice(colorful=False)
sys.stdout = sys.__stdout__
self.assertEqual(capture_output.getvalue(), "")
# get_user_type return 0(internal).
red = '31m'
green = '32m'
start = '\033[1;'
end = '\033[0m'
mock_get_user_type.return_value = 0
notice_str = (
f'\n==================\n{start}{red}Notice:{end}\n'
f'{start}{green} We collect usage statistics (including usernames) '
'in accordance with our '
'Content Licenses (https://source.android.com/setup/start/licenses), '
'Contributor License Agreement (https://cla.developers.google.com/), '
'Privacy Policy (https://policies.google.com/privacy) and '
f'Terms of Service (https://policies.google.com/terms).{end}'
'\n==================\n\n'
)
capture_output = StringIO()
sys.stdout = capture_output
metrics_utils.print_data_collection_notice()
sys.stdout = sys.__stdout__
self.assertEqual(capture_output.getvalue(), notice_str)
def test_send_start_event(self):
metrics_base.MetricsBase.tool_name = 'test_tool'
metrics_base.MetricsBase.user_type = metrics_base.INTERNAL_USER
fake_cc = FakeClearcutClient()
metrics_base.MetricsBase.cc = fake_cc
metrics_utils.send_start_event(
command_line='test_command',
test_references=['test'],
cwd='cwd',
operating_system='test system',
source_root='test_source',
hostname='test_host',
)
logged_events = fake_cc.get_logged_events()
expected_start_event = (
internal_user_log_pb2.AtestLogEventInternal.AtestStartEvent(
command_line='test_command',
test_references=['test'],
cwd='cwd',
os='test system',
source_root='test_source',
hostname='test_host',
)
)
self.assertEqual(len(logged_events), 1)
self.assertEqual(
expected_start_event,
internal_user_log_pb2.AtestLogEventInternal.FromString(
logged_events[0].source_extension
).atest_start_event,
)
class FakeClearcutClient:
def __init__(self):
self.logged_event = []
def log(self, event):
self.logged_event.extend([event])
def get_logged_events(self):
return self.logged_event