summaryrefslogtreecommitdiffstats
path: root/deluge/tests/test_tracker_icons.py
blob: 2f793d12e386440ae6a89fb44dd14f1022a4d2e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
# the additional special exception to link portions of this program with the OpenSSL library.
# See LICENSE for more details.
#
import os.path

import pytest
import pytest_twisted

import deluge.component as component
import deluge.ui.tracker_icons
from deluge.conftest import BaseTestCase
from deluge.ui.tracker_icons import TrackerIcon, TrackerIcons

from . import common

common.disable_new_release_check()


@pytest.mark.internet
class TestTrackerIcons(BaseTestCase):
    def set_up(self):
        # Disable resizing with Pillow for consistency.
        self.patch(deluge.ui.tracker_icons, 'Image', None)
        self.icons = TrackerIcons()

    def tear_down(self):
        return component.shutdown()

    @pytest_twisted.ensureDeferred
    async def test_get_deluge_png(self, mock_mkstemp):
        # Deluge has a png favicon link
        icon = TrackerIcon(common.get_test_data_file('deluge.png'))
        result = await self.icons.fetch('deluge-torrent.org')
        assert result == icon
        assert not os.path.isfile(mock_mkstemp[1])

    @pytest_twisted.ensureDeferred
    async def test_get_google_ico(self):
        # Google doesn't have any icon links
        # So instead we'll grab its favicon.ico
        icon = TrackerIcon(common.get_test_data_file('google.ico'))
        result = await self.icons.fetch('www.google.com')
        assert result == icon

    @pytest_twisted.ensureDeferred
    async def test_get_google_ico_hebrew(self):
        """Test that Google.co.il page is read as UTF-8"""
        icon = TrackerIcon(common.get_test_data_file('google.ico'))
        result = await self.icons.fetch('www.google.co.il')
        assert result == icon

    @pytest_twisted.ensureDeferred
    async def test_get_google_ico_with_redirect(self):
        # google.com redirects to www.google.com
        icon = TrackerIcon(common.get_test_data_file('google.ico'))
        result = await self.icons.fetch('google.com')
        assert result == icon

    @pytest.mark.skip(reason='Site removed favicon, new SNI test will be needed')
    @pytest_twisted.ensureDeferred
    async def test_get_seo_svg_with_sni(self):
        # seo using certificates with SNI support only
        icon = TrackerIcon(common.get_test_data_file('seo.svg'))
        result = await self.icons.fetch('www.seo.com')
        assert result == icon

    @pytest_twisted.ensureDeferred
    async def test_get_empty_string_tracker(self):
        result = await self.icons.fetch('')
        assert result is None

    @pytest_twisted.ensureDeferred
    async def test_invalid_host(self, mock_mkstemp):
        """Test that TrackerIcon can handle invalid hostname"""
        result = await self.icons.fetch('deluge.example.com')
        assert not result
        assert not os.path.isfile(mock_mkstemp[1])