Source code
Revision control
Copy as Markdown
Other Tools
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-firefox_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-firefox_powerlog_1_.txt",
base_path + "raptor-tp6-amazon-firefox_powerlog_2_.txt",
base_path + "raptor-tp6-amazon-firefox_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)