def oracle_ds(request, fixture_utils, paths, metadata_version, mocker): """ Return an instantiated DataSourceOracle. This also performs the mocking required: * ``_read_system_uuid`` returns something, * ``_is_platform_viable`` returns True, * ``DataSourceOracle._is_iscsi_root`` returns True by default or what pytest.mark.is_iscsi gives as first param, * ``DataSourceOracle._get_iscsi_config`` returns a network cfg if is_iscsi else an empty network config, * ``read_opc_metadata`` returns ``OPC_V1_METADATA``, * ``ephemeral.EphemeralDHCPv4`` and ``net.find_fallback_nic`` mocked to avoid subp calls (This uses the paths fixture for the required helpers.Paths object, and the fixture_utils fixture for fetching markers.) """ sys_cfg = fixture_utils.closest_marker_first_arg_or( request, "ds_sys_cfg", mock.MagicMock() ) is_iscsi = fixture_utils.closest_marker_first_arg_or( request, "is_iscsi", True ) metadata = OpcMetadata(metadata_version, json.loads(OPC_V2_METADATA), None) mocker.patch(DS_PATH + ".net.find_fallback_nic") mocker.patch(DS_PATH + ".ephemeral.EphemeralDHCPv4") mocker.patch(DS_PATH + "._read_system_uuid", return_value="someuuid") mocker.patch(DS_PATH + "._is_platform_viable", return_value=True) mocker.patch(DS_PATH + ".read_opc_metadata", return_value=metadata) mocker.patch(DS_PATH + ".KlibcOracleNetworkConfigSource") ds = oracle.DataSourceOracle( sys_cfg=sys_cfg, distro=mock.Mock(), paths=paths, ) mocker.patch.object(ds, "_is_iscsi_root", return_value=is_iscsi) if is_iscsi: iscsi_config = copy.deepcopy(KLIBC_NET_CFG) else: iscsi_config = {"version": 1, "config": []} mocker.patch.object(ds, "_get_iscsi_config", return_value=iscsi_config) yield ds