Ejemplo n.º 1
0
 async def test_enable_rate_limit(self):
     self.daemon.response = rsrc.response_torrents(
         {
             'id': 1,
             'name': 'Foo',
             'uploadLimit': 100,
             'uploadLimited': False
         },
         {
             'id': 2,
             'name': 'Bar',
             'uploadLimit': 200,
             'uploadLimited': False
         },
     )
     response = await self.api.set_limit_rate_up(TorrentFilter('id=1|id=2'),
                                                 True)
     self.assert_request({
         'method': 'torrent-set',
         'arguments': {
             'ids': [1, 2],
             'uploadLimited': True
         }
     })
     self.assertEqual(response.success, True)
Ejemplo n.º 2
0
 async def test_subtract_from_current_limit_when_enabled(self):
     self.daemon.response = rsrc.response_torrents(
         {
             'id': 1,
             'name': 'Foo',
             'uploadLimit': 100,
             'uploadLimited': True
         },
         {
             'id': 2,
             'name': 'Bar',
             'uploadLimit': 200,
             'uploadLimited': True
         },
     )
     await self.api.adjust_limit_rate_up(TorrentFilter('id=1|id=2'), -50e3)
     self.assert_request({
         'method': 'torrent-set',
         'arguments': {
             'ids': [1],
             'uploadLimited': True,
             'uploadLimit': 50
         }
     })
     self.assert_request({
         'method': 'torrent-set',
         'arguments': {
             'ids': [2],
             'uploadLimited': True,
             'uploadLimit': 150
         }
     })
Ejemplo n.º 3
0
 def __init__(self, tfilter, *keys):
     self.keys = keys
     if isinstance(tfilter, str):
         self.tfilter = TorrentFilter(tfilter)
         self.keys_needed = tuple(set(self.keys + self.tfilter.needed_keys))
     else:
         self.tfilter = tfilter
         self.keys_needed = self.keys
     self.callback = FakeCallback()
Ejemplo n.º 4
0
 async def test_no_torrents_found(self):
     response = await self.api._torrent_action(
         torrents=TorrentFilter('id=4'),
         method=self.mock_method,
     )
     self.assertEqual(self.mock_method_args, None)
     self.assertEqual(self.mock_method_kwargs, None)
     self.assertEqual(response.success, False)
     self.assertEqual(response.torrents, ())
     self.assertEqual(response.msgs, ())
     self.assertEqual(response.errors, ('No matching torrents: id=4', ))
Ejemplo n.º 5
0
    async def test_get_torrents_by_filter(self):
        self.daemon.response = rsrc.response_torrents(
            {
                'id': 1,
                'name': 'Foo'
            },
            {
                'id': 2,
                'name': 'Bar'
            },
            {
                'id': 3,
                'name': 'Boo'
            },
        )
        response = await self.api.torrents(torrents=TorrentFilter('name=Foo'))
        self.assertEqual(response.success, True)
        self.assertEqual(response.torrents, (Torrent({
            'id': 1,
            'name': 'Foo'
        }), ))
        self.assertEqual(response.msgs, ('Found 1 =Foo torrent', ))
        self.assertEqual(response.errors, ())

        response = await self.api.torrents(torrents=TorrentFilter('name~oo'))
        self.assertEqual(response.success, True)
        self.assertEqual(response.torrents, (Torrent({
            'id': 1,
            'name': 'Foo'
        }), Torrent({
            'id': 3,
            'name': 'Boo'
        })))
        self.assertEqual(response.msgs, ('Found 2 ~oo torrents', ))
        self.assertEqual(response.errors, ())

        response = await self.api.torrents(torrents=TorrentFilter('name=Nope'))
        self.assertEqual(response.success, False)
        self.assertEqual(response.torrents, ())
        self.assertEqual(response.msgs, ())
        self.assertEqual(response.errors, ('No matching torrents: =Nope', ))
Ejemplo n.º 6
0
    async def test_combining_requests(self):
        await self.rp.start()
        self.assertEqual(self.rp.running, True)
        await self.advance(0)
        self.assert_api_request(calls=0)  # No requests registered yet

        foo = Subscriber('name~foo', 'name', 'rate-down')
        self.rp.register('foo',
                         foo.callback,
                         keys=foo.keys,
                         tfilter=foo.tfilter)
        await self.advance(self.rp.interval)
        self.assert_api_request(calls=1,
                                tfilter=foo.tfilter,
                                keys=foo.keys_needed)

        bar = Subscriber('name~bar', 'name', 'rate-up')
        self.rp.register('bar',
                         bar.callback,
                         keys=bar.keys,
                         tfilter=bar.tfilter)
        await self.advance(self.rp.interval)
        self.assert_api_request(calls=2,
                                tfilter=(foo + bar).tfilter,
                                keys=(foo + bar).keys_needed)

        baz = Subscriber('private', 'id', 'size-total')
        self.rp.register('baz',
                         baz.callback,
                         keys=baz.keys,
                         tfilter=baz.tfilter)
        await self.advance(self.rp.interval)
        self.assert_api_request(calls=3,
                                tfilter=(foo + bar + baz).tfilter,
                                keys=(foo + bar + baz).keys_needed)

        # no filter
        for f in (None, TorrentFilter('all')):
            thelot = Subscriber(f, 'name', 'rate-up')
            self.rp.register('all',
                             thelot.callback,
                             keys=thelot.keys,
                             tfilter=thelot.tfilter)
            await self.advance(self.rp.interval)
            self.assert_api_request(tfilter=None,
                                    keys=(foo + bar + baz +
                                          thelot).keys_needed)
            self.rp.remove('all')
            await self.advance(self.rp.interval)
            self.assert_api_request(tfilter=(foo + bar + baz).tfilter,
                                    keys=(foo + bar + baz).keys_needed)

        await self.rp.stop()
Ejemplo n.º 7
0
 async def test_rpc_method_without_kwargs(self):
     response = await self.api._torrent_action(
         torrents=TorrentFilter('id=4|id=3'),
         method=self.mock_method,
     )
     self.assertEqual(self.mock_method_args, (3, ))
     self.assertEqual(self.mock_method_kwargs, {})
     self.assertEqual(response.success, True)
     self.assertEqual(response.torrents, (Torrent({
         'id': 3,
         'name': 'Boo'
     }), ))
     self.assertEqual(response.msgs, ('Found 1 id=4|id=3 torrent', ))
     self.assertEqual(response.errors, ())
Ejemplo n.º 8
0
 async def test_subtract_from_current_limit_when_disabled(self):
     self.daemon.response = rsrc.response_torrents(
         {
             'id': 1,
             'name': 'Foo',
             'uploadLimit': 100,
             'uploadLimited': False
         },
         {
             'id': 2,
             'name': 'Bar',
             'uploadLimit': 200,
             'uploadLimited': False
         },
     )
     await self.api.adjust_limit_rate_up(TorrentFilter('id=1|id=2'), -50e3)
     self.daemon.requests == ()  # Assert no requests were sent
Ejemplo n.º 9
0
 async def test_rpc_method_with_kwargs(self):
     response = await self.api._torrent_action(
         torrents=TorrentFilter('name~B'),
         method=self.mock_method,
         method_args={'foo': 'bar'},
     )
     self.assertEqual(self.mock_method_args, (2, 3))
     self.assertEqual(self.mock_method_kwargs, {'foo': 'bar'})
     self.assertEqual(response.success, True)
     self.assertEqual(response.torrents, (
         Torrent({
             'id': 2,
             'name': 'Bar'
         }),
         Torrent({
             'id': 3,
             'name': 'Boo'
         }),
     ))
     self.assertEqual(response.msgs, ('Found 2 ~B torrents', ))
     self.assertEqual(response.errors, ())
Ejemplo n.º 10
0
 async def test_set_absolute_rate_limit(self):
     self.daemon.response = rsrc.response_torrents(
         {
             'id': 1,
             'name': 'Foo',
             'uploadLimit': 100,
             'uploadLimited': False
         },
         {
             'id': 2,
             'name': 'Bar',
             'uploadLimit': 200,
             'uploadLimited': True
         },
     )
     await self.api.set_limit_rate_up(TorrentFilter('id=1|id=2'), 1e6)
     self.assert_request({
         'method': 'torrent-set',
         'arguments': {
             'ids': [1, 2],
             'uploadLimited': True,
             'uploadLimit': 1000
         }
     })