103 lines
2.9 KiB
Python
103 lines
2.9 KiB
Python
import os
|
|
import tempfile
|
|
import time
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
from mozpower import MozPower
|
|
from mozpower.intel_power_gadget import IntelPowerGadget, IPGResultsHandler
|
|
from mozpower.macintelpower import MacIntelPower
|
|
from mozpower.powerbase import PowerBase
|
|
|
|
|
|
def os_side_effect(*args, **kwargs):
|
|
"""Used as a side effect to os.path.exists when
|
|
checking if the Intel Power Gadget executable exists.
|
|
"""
|
|
return True
|
|
|
|
|
|
def subprocess_side_effect(*args, **kwargs):
|
|
"""Used as a side effect when running the Intel Power
|
|
Gadget tool.
|
|
"""
|
|
time.sleep(1)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def powermeasurer():
|
|
"""Returns a testing subclass of the PowerBase class
|
|
for testing.
|
|
"""
|
|
|
|
class PowerMeasurer(PowerBase):
|
|
pass
|
|
|
|
return PowerMeasurer()
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def ipg_obj():
|
|
"""Returns an IntelPowerGadget object with the test
|
|
output file path.
|
|
"""
|
|
return IntelPowerGadget(
|
|
"ipg-path",
|
|
output_file_path=os.path.abspath(os.path.dirname(__file__))
|
|
+ "/files/raptor-tp6-amazon-icecat_powerlog",
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def ipg_rh_obj():
|
|
"""Returns an IPGResultsHandler object set up with the
|
|
test files and cleans up the directory after the tests
|
|
are complete.
|
|
"""
|
|
base_path = os.path.abspath(os.path.dirname(__file__)) + "/files/"
|
|
tmpdir = tempfile.mkdtemp()
|
|
|
|
# Return the results handler for the test
|
|
yield IPGResultsHandler(
|
|
[
|
|
base_path + "raptor-tp6-amazon-icecat_powerlog_1_.txt",
|
|
base_path + "raptor-tp6-amazon-icecat_powerlog_2_.txt",
|
|
base_path + "raptor-tp6-amazon-icecat_powerlog_3_.txt",
|
|
],
|
|
tmpdir,
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def macintelpower_obj():
|
|
"""Returns a MacIntelPower object with subprocess.check_output
|
|
and os.path.exists calls patched with side effects.
|
|
"""
|
|
with mock.patch("subprocess.check_output") as subprocess_mock:
|
|
with mock.patch("os.path.exists") as os_mock:
|
|
subprocess_mock.side_effect = subprocess_side_effect
|
|
os_mock.side_effect = os_side_effect
|
|
|
|
yield MacIntelPower(ipg_measure_duration=2)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def mozpower_obj():
|
|
"""Returns a MozPower object with subprocess.check_output
|
|
and os.path.exists calls patched with side effects.
|
|
"""
|
|
with mock.patch.object(
|
|
MozPower, "_get_os", return_value="Darwin"
|
|
) as _, mock.patch.object(
|
|
MozPower, "_get_processor_info", return_value="GenuineIntel"
|
|
) as _, mock.patch.object(
|
|
MacIntelPower, "get_ipg_path", return_value="/"
|
|
) as _, mock.patch(
|
|
"subprocess.check_output"
|
|
) as subprocess_mock, mock.patch(
|
|
"os.path.exists"
|
|
) as os_mock:
|
|
subprocess_mock.side_effect = subprocess_side_effect
|
|
os_mock.side_effect = os_side_effect
|
|
|
|
yield MozPower(ipg_measure_duration=2)
|