def test_execute_json_rpc(self, mock_exec_json_rpc): mock_exec_json_rpc.return_value = '{"ok": true}' method = 'test_method', params = {'test_param': True} h = helper.DRMHelper() h._execute_json_rpc(method, params) mock_exec_json_rpc.assert_called_once()
def test_enable_addon(self): with mock.patch.object(helper.DRMHelper, '_execute_json_rpc', return_value=True): h = helper.DRMHelper() result = h._enable_addon() self.assertTrue(result)
def test_private_get_addon(self, mock_get_addon): fake_addon = fakes.FakeAddon() mock_get_addon.return_value = fake_addon h = helper.DRMHelper() result = h._get_addon() mock_get_addon.assert_called_once_with('inputstream.adaptive') self.assertEqual(result, fake_addon)
def test_is_wv_drm_not_supported(self): with mock.patch.object(helper.DRMHelper, '_get_platform', return_value=('PowerPC', 'sparc')): h = helper.DRMHelper() is_supported = h._is_wv_drm_supported() self.assertFalse(is_supported)
def test_get_addon_enable_error(self): with mock.patch.object(helper.DRMHelper, '_execute_json_rpc', return_value=None): h = helper.DRMHelper() result = h.get_addon() self.assertFalse(result)
def test_is_uwp_kodi17(self, mock_get_system, mock_trans_path): for system in fakes.SYSTEMS: if system['system'] == 'Windows': mock_get_system.return_value = 'UWP' # Kodi <18 mock_trans_path.return_value = 'foo bar 4n2hpmxwrvr6p key' h = helper.DRMHelper() self.assertTrue(h._is_uwp())
def test_get_wvcdm(self, is_dir, is_file, dialog, mock_get_addon, mock_json_rpc, temp_file, translate_path, prog_download, cdm_command, unzip_win): fake_addon = fakes.FakeAddon() for s in fakes.SYSTEMS: h = helper.DRMHelper() if not h._is_wv_drm_supported(): continue mock_get_addon.return_value = fake_addon mock_json_rpc.return_value = json.dumps(fakes.IA_ENABLED) responses.add(responses.GET, config.CMD_CURRENT_VERSION_URL, body='9.9.9.9999') translate_path.side_effect = get_trans_path( fakes.TRANS_PATH_ARGS[0], s.get('system')) with mock.patch.object(helper.DRMHelper, '_get_wvcdm_paths', return_value=fakes.TRANSLATED_PATHS.get( s.get('system'))): with mock.patch.object(helper.DRMHelper, '_get_system', return_value=s.get('system')): with mock.patch.object( helper.DRMHelper, '_get_arch', return_value=s.get('expected_arch')): is_dir.return_value = True is_file.return_value = False result = h._get_wvcdm() temp_file.assert_called() dialog.assert_called() prog_download.assert_called() assert cdm_command.called or unzip_win.called self.assertEqual(result, True)
def test_get_wvcdm_current_ver(self): responses.add(responses.GET, config.CMD_CURRENT_VERSION_URL, body='9.9.9.9999') h = helper.DRMHelper() result = h._get_wvcdm_current_ver() self.assertEqual(result, '9.9.9.9999')
def test_is_wv_drm_supported(self): with mock.patch.object(helper.DRMHelper, '_get_platform', return_value=('Linux', 'x86_64')): h = helper.DRMHelper() is_supported = h._is_wv_drm_supported() self.assertTrue(is_supported)
def test_check_wvcdm_version_current(self, mock_isfile, mock_open, mock_paths, mock_system, mock_arch, mock_platform, mock_md5): responses.add(responses.GET, config.CDM_CURRENT_VERSION_URL, body=self.MODULE_JSON) h = helper.DRMHelper() fake_md5 = fakes.FakeMd5() mock_md5.return_value = fake_md5 wvdata = json.loads(self.MODULE_JSON)['widevine'].get('platforms') for system in fakes.SYSTEMS: expected_system = system.get('expected_system') expected_arch = system.get('expected_arch') mock_platform.return_value = (expected_system, expected_arch) if expected_system == 'Android' or not h._is_wv_drm_supported(): continue mock_system.return_value = expected_system mock_arch.return_value = expected_arch fake_md5.digest_value = wvdata.get(h._lookup_mjh_plat()).get('md5') mock_paths.return_value = fakes.TRANSLATED_PATHS.get('Linux') mock_isfile.return_value = True mock_open.return_value = io.BytesIO('bar') expected = wvdata.get(h._lookup_mjh_plat()).get('src') observed = h._check_wv_cdm_version_current() self.assertEqual(expected, observed)
def test_install_addon(self, mock_executebuiltin): fake_addon = fakes.FakeAddon() with mock.patch.object(helper.DRMHelper, '_get_addon', return_value=fake_addon): h = helper.DRMHelper() result = h._install_addon() self.assertEqual(result, fake_addon)
def test_is_android(self, mock_get_system): for system in fakes.SYSTEMS: mock_get_system.return_value = system['expected_system'] if system['expected_system'] == 'Android': h = helper.DRMHelper() sys = h._get_system() is_android = h._is_android() if sys == system['expected_system']: self.assertTrue(is_android)
def test_is_uwp_kodi18(self, mock_get_system, mock_cond_vis): for system in fakes.SYSTEMS: if system['system'] == 'Windows': global HACK_PLATFORMS HACK_PLATFORMS = system['platforms'] mock_cond_vis.side_effect = get_xbmc_cond_visibility mock_get_system.return_value = 'UWP' h = helper.DRMHelper() self.assertTrue(h._is_uwp())
def test_get_wvcdm_filename(self): fake_system = 'Linux' with mock.patch.object(helper.DRMHelper, '_get_system', return_value=fake_system): wvcdm_filename = config.WIDEVINE_CDM_DICT[fake_system] h = helper.DRMHelper() result = h._get_wvcdm_filename() self.assertEqual(result, wvcdm_filename)
def test_is_uwp_kodi17(self, mock_trans_path, mock_cond_vis): for system in fakes.SYSTEMS: if system['system'] == 'Windows': global HACK_PLATFORMS HACK_PLATFORMS = system['platforms'] mock_cond_vis.side_effect = get_xbmc_cond_visibility mock_trans_path.return_value = 'foo bar 4n2hpmxwrvr6p key' h = helper.DRMHelper() self.assertTrue(h._is_uwp())
def test_get_system(self, mock_cond_vis): for system in fakes.SYSTEMS: with mock.patch('platform.system', return_value=system['system']): global HACK_PLATFORMS HACK_PLATFORMS = system['platforms'] mock_cond_vis.side_effect = get_xbmc_cond_visibility h = helper.DRMHelper() sys = h._get_system() self.assertEqual(sys, system['expected_system'])
def test_get_addon_install_error(self): with mock.patch.object(helper.DRMHelper, '_execute_json_rpc', return_value={"error": "message"}): with mock.patch.object(helper.DRMHelper, '_install_addon', return_value=None): h = helper.DRMHelper() result = h.get_addon() self.assertFalse(result)
def test_get_wvcdm_paths(self): for system in fakes.SYSTEMS: rv = fakes.TRANSLATED_PATHS.get(system.get('system')) with mock.patch.object(helper.DRMHelper, '_get_wvcdm_paths', return_value=rv): fake_addon = fakes.FakeAddon() h = helper.DRMHelper() cdm_paths = h._get_wvcdm_paths(fake_addon) self.assertEqual(rv[0], cdm_paths[0])
def test_get_wv_cdm_path(self, temp_file): for system in fakes.SYSTEMS: rv = fakes.TRANSLATED_PATHS.get(system.get('system')) with mock.patch.object(helper.DRMHelper, '_get_wvcdm_paths', return_value=rv): fake_addon = fakes.FakeAddon() h = helper.DRMHelper() cdm_paths = h._get_wvcdm_paths(fake_addon) result = h._get_wvcdm_path(fake_addon, cdm_paths) temp_file.assert_called() self.assertEqual(result, cdm_paths[0])
def test_get_kodi_platform(self): fake_system = 'Windows' fake_arch = 'x64' with mock.patch.object(helper.DRMHelper, '_get_system', return_value=fake_system): with mock.patch.object(helper.DRMHelper, '_get_arch', return_value=fake_arch): h = helper.DRMHelper() plat = h._get_platform() expected_plat = (fake_system, fake_arch) self.assertEqual(plat, expected_plat)
def test_get_addon_install_ok(self, mock_get_addon): rpc_success = {"result": {"addon": {"enabled": True}}} fake_addon = fakes.FakeAddon() mock_get_addon.return_value = fake_addon with mock.patch.object(helper.DRMHelper, '_execute_json_rpc', return_value=rpc_success): with mock.patch.object(helper.DRMHelper, '_install_addon', return_value=fake_addon): h = helper.DRMHelper() result = h.get_addon() self.assertEqual(result, fake_addon)
def test_is_wv_drm_supported(self, mock_system, mock_machine, mock_trans_path, mock_cond_vis): for s in fakes.SYSTEMS: h = helper.DRMHelper() global HACK_PLATFORMS HACK_PLATFORMS = s['platforms'] mock_cond_vis.side_effect = get_xbmc_cond_visibility expected_system = s.get('expected_system') if expected_system == 'UWP': mock_trans_path.return_value = 'foo bar 4n2hpmxwrvr6p key' expected_machine = s.get('machine') mock_system.return_value = expected_system mock_machine.return_value = expected_machine observed = h._is_wv_drm_supported() expected = s.get('drm_supported') self.assertEqual(expected, observed)
def test_set_wvcdm_current_ver_data(self, mock_system, mock_kodi_arch): responses.add(responses.GET, config.CDM_CURRENT_VERSION_URL, body=self.MODULE_JSON) h = helper.DRMHelper() for system in fakes.SYSTEMS: expected_system = system.get('expected_system') expected_arch = system.get('expected_arch') mock_system.return_value = expected_system mock_kodi_arch.return_value = expected_arch h._set_wvcdm_current_ver_data() expected = json.loads( self.MODULE_JSON)['widevine']['platforms'].get( h._lookup_mjh_plat()) observed = h.wvcdm_download_data self.assertEqual(expected, observed)
def test_get_wvcdm_paths(self, translate_path, fake_setting): for system in fakes.SYSTEMS: sys_name = system.get('system') def get_trnspath(path): return get_trans_path(path, sys_name) translate_path.side_effect = get_trnspath fake_setting.side_effect = lambda \ x: fakes.TRANSLATED_SPECIAL_PATHS.get(sys_name) fake_addon = fakes.FakeAddon() h = helper.DRMHelper() observed = h._get_wvcdm_paths(fake_addon) self.assertEqual([ fakes.TRANSLATED_SPECIAL_PATHS.get(sys_name), fakes.CDM_PATHS.get(sys_name)[1] ], observed)
def test_get_kodi_platform(self, mock_system, mock_machine, mock_trans_path, mock_cond_vis): for system in fakes.SYSTEMS: h = helper.DRMHelper() global HACK_PLATFORMS HACK_PLATFORMS = system['platforms'] mock_cond_vis.side_effect = get_xbmc_cond_visibility expected_system = system.get('expected_system') if expected_system == 'UWP': mock_trans_path.return_value = 'foo bar 4n2hpmxwrvr6p key' expected_machine = system.get('machine') expected_arch = system.get('expected_arch') mock_system.return_value = expected_system mock_machine.return_value = expected_machine observed = h._get_platform() expected = (expected_system, expected_arch) self.assertEqual(expected, observed)
def test_get_wvcdm(self, is_dir, is_file, dialog, mock_get_addon, mock_json_rpc, temp_file, translate_path, prog_download, cdm_command, rename_win, mock_kodi_arch): fake_addon = fakes.FakeAddon() for s in fakes.SYSTEMS: h = helper.DRMHelper() mock_get_addon.return_value = fake_addon mock_json_rpc.return_value = json.dumps(fakes.IA_ENABLED) responses.add(responses.GET, config.CDM_CURRENT_VERSION_URL, body=self.MODULE_JSON) translate_path.return_value = get_trans_path( fakes.TRANS_PATH_ARGS[0], s.get('system')) with mock.patch.object(helper.DRMHelper, '_get_wvcdm_paths', return_value=fakes.TRANSLATED_PATHS.get( s.get('system'))): with mock.patch.object(helper.DRMHelper, '_get_system', return_value=s.get('expected_system')): with mock.patch.object( helper.DRMHelper, '_get_arch', return_value=s.get('expected_arch')): mock_kodi_arch.return_value = s.get('expected_arch') is_dir.return_value = True is_file.return_value = False observed = h._get_wvcdm() if (not h._is_wv_drm_supported() or s.get('expected_system') == 'Android'): expected = None else: expected = True temp_file.assert_called_once() temp_file.reset_mock() dialog.assert_called_once() dialog.reset_mock() prog_download.assert_called_once() #print(prog_download.call_args) prog_download.reset_mock() assert cdm_command.called or rename_win.called cdm_command.reset_mock() rename_win.reset_mock() self.assertEqual(expected, observed)
def test_check_wvcdm_version_current_fail(self, mock_isfile, mock_open, mock_paths, mock_system, mock_arch, mock_md5): responses.add(responses.GET, config.CDM_CURRENT_VERSION_URL, body=self.MODULE_JSON) h = helper.DRMHelper() fake_md5 = fakes.FakeMd5() mock_md5.return_value = fake_md5 fake_md5.digest_value = 'abc123' mock_system.return_value = 'Linux' mock_arch.return_value = 'x86_64' mock_paths.return_value = fakes.TRANSLATED_PATHS.get('Linux') mock_isfile.return_value = True mock_open.return_value = io.BytesIO('bar') expected = False observed = h._check_wv_cdm_version_current() self.assertEqual(expected, observed)
def check_inputstream(drm=True): dh = helper.DRMHelper() return dh.check_inputstream(drm=drm)
def get_ia_direct(update=False, drm=True): dh = helper.DRMHelper() return dh._get_ia_direct(update=update, drm=drm)
def get_widevinecdm(cdm_path=None): dh = helper.DRMHelper() return dh._get_wvcdm()