def test_load(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.execute.throw.return_value = 0 mocked_proxy.load.raw_start.return_value = 0 client = RTorrent('http://localhost/RPC2') resp = client.load( torrent_raw, fields={'priority': 3, 'directory': '/data/downloads', 'custom1': 'testing'}, start=True, mkdir=True, ) assert resp == 0 # Ensure mkdir was called mocked_proxy.execute.throw.assert_called_with('', 'mkdir', '-p', '/data/downloads') # Ensure load was called assert mocked_proxy.load.raw_start.called match_binary = Matcher(compare_binary, xmlrpc_client.Binary(torrent_raw)) called_args = mocked_proxy.load.raw_start.call_args_list[0][0] assert len(called_args) == 5 assert '' == called_args[0] assert match_binary in called_args fields = [p for p in called_args[2:]] assert len(fields) == 3 assert 'd.directory.set=\\/data\\/downloads' in fields assert 'd.custom1.set=testing' in fields assert 'd.priority.set=3' in fields
def test_torrents(self, mocked_proxy): mocked_proxy = mocked_proxy() hash1 = "09977FE761AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" hash2 = "09977FE761BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" mocked_proxy.d.multicall.return_value = ( ["/data/downloads", "private.torrent", hash1, "test_custom1"], ["/data/downloads", "private.torrent", hash2, "test_custom2"], ) client = RTorrent("http://localhost/RPC2") torrents = client.torrents(fields=["custom1"]) # Required fields should be added assert isinstance(torrents, list) for torrent in torrents: assert torrent.get("base_path") == "/data/downloads" assert torrent.get("name") == "private.torrent" if torrent.get("hash") == hash1: assert torrent.get("custom1") == "test_custom1" elif torrent.get("hash") == hash2: assert torrent.get("custom1") == "test_custom2" else: assert False, "Invalid hash returned" assert mocked_proxy.system.multicall.called_with( (["main", "d.directory_base=", "d.name=", "d.hash=", "d.custom1="],) )
def test_torrent(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [ ['/data/downloads'], ['private.torrent'], [torrent_info_hash], ['test_custom1'], [123456], ] client = RTorrent('http://localhost/RPC2') torrent = client.torrent( torrent_info_hash, fields=['custom1', 'down_rate'] ) # Required fields should be added assert isinstance(torrent, dict) assert torrent.get('base_path') == '/data/downloads' assert torrent.get('hash') == torrent_info_hash assert torrent.get('custom1') == 'test_custom1' assert torrent.get('name') == 'private.torrent' assert torrent.get('down_rate') == 123456 assert mocked_proxy.system.multicall.called_with( ( [ {'params': (torrent_info_hash,), 'methodName': 'd.base_path'}, {'params': (torrent_info_hash,), 'methodName': 'd.name'}, {'params': (torrent_info_hash,), 'methodName': 'd.hash'}, {'params': (torrent_info_hash,), 'methodName': 'd.custom1'}, {'params': (torrent_info_hash,), 'methodName': 'd.down.rate'}, ] ) )
def test_torrent(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [ ["/data/downloads"], ["private.torrent"], [torrent_info_hash], ["test_custom1"], [123456], ] client = RTorrent("http://localhost/RPC2") torrent = client.torrent(torrent_info_hash, fields=["custom1", "down_rate"]) # Required fields should be added assert isinstance(torrent, dict) assert torrent.get("base_path") == "/data/downloads" assert torrent.get("hash") == torrent_info_hash assert torrent.get("custom1") == "test_custom1" assert torrent.get("name") == "private.torrent" assert torrent.get("down_rate") == 123456 assert mocked_proxy.system.multicall.called_with( ( [ {"params": (torrent_info_hash,), "methodName": "d.base_path"}, {"params": (torrent_info_hash,), "methodName": "d.name"}, {"params": (torrent_info_hash,), "methodName": "d.hash"}, {"params": (torrent_info_hash,), "methodName": "d.custom1"}, {"params": (torrent_info_hash,), "methodName": "d.down.rate"}, ] ) )
def test_torrents(self, mocked_proxy): mocked_proxy = mocked_proxy() hash1 = '09977FE761AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' hash2 = '09977FE761BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' mocked_proxy.d.multicall.return_value = ( ['/data/downloads', 'private.torrent', hash1, 'test_custom1'], ['/data/downloads', 'private.torrent', hash2, 'test_custom2'], ) client = RTorrent('http://localhost/RPC2') torrents = client.torrents(fields=['custom1']) # Required fields should be added assert isinstance(torrents, list) for torrent in torrents: assert torrent.get('base_path') == '/data/downloads' assert torrent.get('name') == 'private.torrent' if torrent.get('hash') == hash1: assert torrent.get('custom1') == 'test_custom1' elif torrent.get('hash') == hash2: assert torrent.get('custom1') == 'test_custom2' else: assert False, 'Invalid hash returned' assert mocked_proxy.system.multicall.called_with(( ['main', 'd.directory_base=', 'd.name=', 'd.hash=', u'd.custom1='], ))
def test_update(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [[0]] client = RTorrent('http://localhost/RPC2') update_fields = { 'custom1': 'test_custom1', 'directory_base': '/data/downloads', 'priority': 3, } resp = client.update(torrent_info_hash, fields=update_fields) assert resp == 0 assert mocked_proxy.system.multicall.called_with(([ { 'params': (torrent_info_hash, '/data/downloads'), 'methodName': 'd.directory_base', }, { 'params': (torrent_info_hash, 'test_custom1'), 'methodName': 'd.custom1' }, { 'params': (torrent_info_hash, '/data/downloads'), 'methodName': 'd.custom1' }, ]))
def test_load(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.execute.throw.return_value = 0 mocked_proxy.load.raw_start.return_value = 0 client = RTorrent("http://localhost/RPC2") resp = client.load( torrent_raw, fields={"priority": 3, "directory": "/data/downloads", "custom1": "testing"}, start=True, mkdir=True, ) assert resp == 0 # Ensure mkdir was called mocked_proxy.execute.throw.assert_called_with("", "mkdir", "-p", "/data/downloads") # Ensure load was called assert mocked_proxy.load.raw_start.called match_binary = Matcher(compare_binary, xmlrpc_client.Binary(torrent_raw)) called_args = mocked_proxy.load.raw_start.call_args_list[0][0] assert len(called_args) == 5 assert "" == called_args[0] assert match_binary in called_args fields = [p for p in called_args[2:]] assert len(fields) == 3 assert "d.directory.set=\\/data\\/downloads" in fields assert "d.custom1.set=testing" in fields assert "d.priority.set=3" in fields
def test_torrents(self, mocked_proxy): mocked_proxy = mocked_proxy() hash1 = '09977FE761AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' hash2 = '09977FE761BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' mocked_proxy.d.multicall.return_value = ( ['/data/downloads', 'private.torrent', hash1, 'test_custom1'], ['/data/downloads', 'private.torrent', hash2, 'test_custom2'], ) client = RTorrent('http://localhost/RPC2') torrents = client.torrents( fields=['custom1']) # Required fields should be added assert isinstance(torrents, list) for torrent in torrents: assert torrent.get('base_path') == '/data/downloads' assert torrent.get('name') == 'private.torrent' if torrent.get('hash') == hash1: assert torrent.get('custom1') == 'test_custom1' elif torrent.get('hash') == hash2: assert torrent.get('custom1') == 'test_custom2' else: assert False, 'Invalid hash returned' assert mocked_proxy.system.multicall.called_with(([ 'main', 'd.directory_base=', 'd.name=', 'd.hash=', u'd.custom1=' ], ))
def test_start(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.d.start.return_value = 0 client = RTorrent('http://localhost/RPC2') resp = client.start(torrent_info_hash) assert resp == 0 assert mocked_proxy.d.start.called_with((torrent_info_hash,))
def test_start(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.d.start.return_value = 0 client = RTorrent('http://localhost/RPC2') resp = client.start(torrent_info_hash) assert resp == 0 assert mocked_proxy.d.start.called_with((torrent_info_hash, ))
def test_delete(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.d.erase.return_value = 0 client = RTorrent("http://localhost/RPC2") resp = client.delete(torrent_info_hash) assert resp == 0 assert mocked_proxy.d.erase.called_with((torrent_info_hash,))
def test_stop(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.d.close.return_value = 0 mocked_proxy.d.stop.return_value = 0 client = RTorrent("http://localhost/RPC2") resp = client.stop(torrent_info_hash) assert resp == 0 assert mocked_proxy.d.stop.called_with((torrent_info_hash,)) assert mocked_proxy.d.close.called_with((torrent_info_hash,))
def test_move(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [["private.torrent"], [torrent_info_hash], ["/data/downloads"]] mocked_proxy.move.return_value = 0 mocked_proxy.d.directory.set.return_value = 0 mocked_proxy.execute.throw.return_value = 0 client = RTorrent("http://localhost/RPC2") client.move(torrent_info_hash, "/new/folder") mocked_proxy.execute.throw.assert_has_calls( [mock.call("", "mkdir", "-p", "/new/folder"), mock.call("", "mv", "-u", "/data/downloads", "/new/folder")] )
def test_version(self, mocked_proxy): mocked_client = mocked_proxy() mocked_client.system.client_version.return_value = '0.9.4' client = RTorrent('http://localhost/RPC2') assert client.version == [0, 9, 4] assert mocked_client.system.client_version.called
def test_move(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [ ['private.torrent'], [torrent_info_hash], ['/data/downloads'], ] mocked_proxy.move.return_value = 0 mocked_proxy.d.directory.set.return_value = 0 mocked_proxy.execute.throw.return_value = 0 client = RTorrent('http://localhost/RPC2') client.move(torrent_info_hash, '/new/folder') mocked_proxy.execute.throw.assert_has_calls([ mock.call('', 'mkdir', '-p', '/new/folder'), mock.call('', 'mv', '-u', '/data/downloads', '/new/folder'), ])
def test_load(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.execute.throw.return_value = 0 mocked_proxy.load.raw_start.return_value = 0 client = RTorrent('http://localhost/RPC2') resp = client.load( torrent_raw, fields={ 'priority': 3, 'directory': '/data/downloads', 'custom1': 'testing' }, start=True, mkdir=True, ) assert resp == 0 # Ensure mkdir was called mocked_proxy.execute.throw.assert_called_with('', 'mkdir', '-p', '/data/downloads') # Ensure load was called assert mocked_proxy.load.raw_start.called match_binary = Matcher(compare_binary, xmlrpc_client.Binary(torrent_raw)) called_args = mocked_proxy.load.raw_start.call_args_list[0][0] assert len(called_args) == 5 assert '' == called_args[0] assert match_binary in called_args fields = [p for p in called_args[2:]] assert len(fields) == 3 # TODO: check the note in clients/rtorrent.py about this escaping. # The client should be fixed to work consistenly on all python versions # Calling re.escape here is a workaround so test works on python 3.7 and older versions assert ('d.directory.set=' + re.escape('/data/downloads')) in fields assert 'd.custom1.set=testing' in fields assert 'd.priority.set=3' in fields
def test_update(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [[0]] client = RTorrent('http://localhost/RPC2') update_fields = { 'custom1': 'test_custom1', 'directory_base': '/data/downloads', 'priority': 3, } resp = client.update(torrent_info_hash, fields=update_fields) assert resp == 0 assert mocked_proxy.system.multicall.called_with(([ {'params': (torrent_info_hash, '/data/downloads'), 'methodName': 'd.directory_base'}, {'params': (torrent_info_hash, 'test_custom1'), 'methodName': 'd.custom1'}, {'params': (torrent_info_hash, '/data/downloads'), 'methodName': 'd.custom1'} ]))
def test_update(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [[0]] client = RTorrent("http://localhost/RPC2") update_fields = {"custom1": "test_custom1", "directory_base": "/data/downloads", "priority": 3} resp = client.update(torrent_info_hash, fields=update_fields) assert resp == 0 assert mocked_proxy.system.multicall.called_with( ( [ {"params": (torrent_info_hash, "/data/downloads"), "methodName": "d.directory_base"}, {"params": (torrent_info_hash, "test_custom1"), "methodName": "d.custom1"}, {"params": (torrent_info_hash, "/data/downloads"), "methodName": "d.custom1"}, ] ) )
def test_torrent(self, mocked_proxy): mocked_proxy = mocked_proxy() mocked_proxy.system.multicall.return_value = [ ['/data/downloads'], ['private.torrent'], [torrent_info_hash], ['test_custom1'], [123456] ] client = RTorrent('http://localhost/RPC2') torrent = client.torrent(torrent_info_hash, fields=['custom1', 'down_rate']) # Required fields should be added assert isinstance(torrent, dict) assert torrent.get('base_path') == '/data/downloads' assert torrent.get('hash') == torrent_info_hash assert torrent.get('custom1') == 'test_custom1' assert torrent.get('name') == 'private.torrent' assert torrent.get('down_rate') == 123456 assert mocked_proxy.system.multicall.called_with(([ {'params': (torrent_info_hash,), 'methodName': 'd.base_path'}, {'params': (torrent_info_hash,), 'methodName': 'd.name'}, {'params': (torrent_info_hash,), 'methodName': 'd.hash'}, {'params': (torrent_info_hash,), 'methodName': 'd.custom1'}, {'params': (torrent_info_hash,), 'methodName': 'd.down.rate'}, ]))