Exemplo n.º 1
0
    def test_cache_consistent_across_sessions(self):
        sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True)
        nextProvider = Mock()
        platform = Mock()
        when(platform).getCacheDir().thenReturn(sandbox)
        when(nextProvider).getPosters(any(Program)).thenReturn([
            'http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif',
            'http://d.com/d.gif'
        ])
        provider = SuperFastFanartProvider(platform, nextProvider)

        programs = []
        for i in xrange(1000):
            program = TVProgram({
                'title': 'P%d' % i,
                'category_type': 'series'
            },
                                translator=Mock())
            httpUrls = provider.getPosters(program)
            self.assertTrue(4, len(httpUrls))
            programs.append(program)
        provider.close()

        nextProvider = Mock()
        provider2 = SuperFastFanartProvider(platform, nextProvider)
        for p in programs:
            httpUrls = provider2.getPosters(p)
            self.assertTrue(4, len(httpUrls))
        provider2.close()
Exemplo n.º 2
0
 def setUp(self):
     self.sandbox = tempfile.mkdtemp()
     self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True)
     self.nextProvider = Mock()
     self.platform = Mock()
     when(self.platform).getCacheDir().thenReturn(self.sandbox)
     self.program = TVProgram(
         {
             'title': 'Two Fat Ladies',
             'category_type': 'series'
         },
         translator=Mock())
     self.provider = SuperFastFanartProvider(self.platform,
                                             self.nextProvider)
Exemplo n.º 3
0
 def setUp(self):
     self.sandbox = tempfile.mkdtemp()
     self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True)
     self.nextProvider = Mock()
     self.platform = Mock()
     when(self.platform).getCacheDir().thenReturn(self.sandbox)
     self.program = TVProgram({'title': 'Two Fat Ladies', 'category_type':'series'}, translator=Mock())
     self.provider = SuperFastFanartProvider(self.platform, self.nextProvider)
Exemplo n.º 4
0
    def test_end_to_end_tvdb_flow(self):
        no_op = NoOpFanartProvider()
        tvdb = TvdbFanartProvider(self.platform)
        fileCache = FileCache(os.path.join(self.sandbox, 'http'),
                              HttpResolver())
        http = HttpCachingFanartProvider(fileCache, tvdb)
        superfast = SuperFastFanartProvider(self.platform,
                                            http,
                                            filename='tvdb')
        strike = OneStrikeAndYoureOutFanartProvider(self.platform,
                                                    superfast,
                                                    no_op,
                                                    filename='tvdb')

        fields = {
            'title': u'The Real World',
            'subtitle': u'',
            'starttime': socketDateTime(2008, 11, 4, 22, 45, 00),
            'endtime': socketDateTime(2008, 11, 4, 23, 50, 00),
            'airdate': u'2010-07-14'
        }
        #self.assertSeasonAndEpisode(RecordedProgram(data=pdata(fields), **self.deps), u'24', u'3')

        program = RecordedProgram(data=pdata(fields), **self.deps)
        season, episode = strike.getSeasonAndEpisode(program)

        log.info(season)
        log.info(episode)

        self.assertEqual(('24', '3'), (season, episode))

        method = 'getSeasonAndEpisode'

        # verify strikeout provider
        strikeKey = strike.createKey(method, program)
        self.assertFalse(strike.hasStruckOut(strikeKey))

        # verify superfast provider
        superfastKey = superfast.createEpisodeKey(method, program)
        self.assertEqual(superfast.pcache[superfastKey], ('24', '3'))

        strike.close()
Exemplo n.º 5
0
    def test_end_to_end_tvdb_flow(self):
        no_op = NoOpFanartProvider()
        tvdb = TvdbFanartProvider(self.platform)
        fileCache = FileCache(os.path.join(self.sandbox, 'http'), HttpResolver())
        http = HttpCachingFanartProvider(fileCache, tvdb)
        superfast = SuperFastFanartProvider(self.platform, http, filename='tvdb')
        strike = OneStrikeAndYoureOutFanartProvider(self.platform, superfast, no_op, filename='tvdb')

        fields = {
            'title'     : u'The Real World',
            'subtitle'  : u'',
            'starttime' : socketDateTime(2008, 11, 4, 22, 45, 00),
            'endtime'   : socketDateTime(2008, 11, 4, 23, 50, 00),
            'airdate'   : u'2010-07-14'
        }
        #self.assertSeasonAndEpisode(RecordedProgram(data=pdata(fields), **self.deps), u'24', u'3')
        
        program = RecordedProgram(data=pdata(fields), **self.deps)
        season, episode = strike.getSeasonAndEpisode(program)
        
        log.info(season)
        log.info(episode)

        self.assertEqual(('24','3'), (season, episode))
        
        method = 'getSeasonAndEpisode'
        
        # verify strikeout provider
        strikeKey = strike.createKey(method, program)
        self.assertFalse(strike.hasStruckOut(strikeKey))
        
        # verify superfast provider
        superfastKey = superfast.createEpisodeKey(method, program)
        self.assertEqual(superfast.pcache[superfastKey], ('24','3'))
        
        strike.close()
Exemplo n.º 6
0
    def test_cache_consistent_across_sessions(self):
        sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True)
        nextProvider = Mock()
        platform = Mock()
        when(platform).getCacheDir().thenReturn(sandbox)
        when(nextProvider).getPosters(any(Program)).thenReturn(['http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif'])
        provider = SuperFastFanartProvider(platform, nextProvider)

        programs = []        
        for i in xrange(1000):
            program = TVProgram({'title': 'P%d' % i, 'category_type':'series'}, translator=Mock())
            httpUrls = provider.getPosters(program)
            self.assertTrue(4, len(httpUrls))
            programs.append(program)
        provider.close()
        
        nextProvider = Mock()
        provider2 = SuperFastFanartProvider(platform, nextProvider)
        for p in programs:
            httpUrls = provider2.getPosters(p)
            self.assertTrue(4, len(httpUrls))
        provider2.close()
Exemplo n.º 7
0
class SuperFastFanartProviderTest(unittest.TestCase):
    
    def setUp(self):
        self.sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True)
        self.nextProvider = Mock()
        self.platform = Mock()
        when(self.platform).getCacheDir().thenReturn(self.sandbox)
        self.program = TVProgram({'title': 'Two Fat Ladies', 'category_type':'series'}, translator=Mock())
        self.provider = SuperFastFanartProvider(self.platform, self.nextProvider)

    @staticmethod
    def programs(cnt):
        for i in xrange(cnt): #@UnusedVariable
            yield TVProgram({
                'starttime': '20081121140000',
                'endtime'  : '20081121140000',
                'chanid'   : random.randint(1,9999999),
                'channum'  : str(random.randint(1,10)),
                'title'    : 'Two Fat Ladies %d' % random.randint(1,999999),
                'subtitle' : 'Away we go....', 
                'description' : 'blah blah blah', 
                'category_type':'series'}, 
                translator=Mock())

    def test_pickling(self):
        when(self.nextProvider).getPosters(any(Program)).thenReturn(['logo.gif'])
        for p in self.programs(20000):
            self.provider.getPosters(p)
        self.provider.close()
        filesize = os.path.getsize(self.provider.pfilename)
        log.debug('Pickle file size = %d' % filesize)
        self.assertGreater(filesize, 0)
        
    def test_cache_consistent_across_sessions(self):
        sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True)
        nextProvider = Mock()
        platform = Mock()
        when(platform).getCacheDir().thenReturn(sandbox)
        when(nextProvider).getPosters(any(Program)).thenReturn(['http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif', 'http://d.com/d.gif'])
        provider = SuperFastFanartProvider(platform, nextProvider)

        programs = []        
        for i in xrange(1000):
            program = TVProgram({'title': 'P%d' % i, 'category_type':'series'}, translator=Mock())
            httpUrls = provider.getPosters(program)
            self.assertTrue(4, len(httpUrls))
            programs.append(program)
        provider.close()
        
        nextProvider = Mock()
        provider2 = SuperFastFanartProvider(platform, nextProvider)
        for p in programs:
            httpUrls = provider2.getPosters(p)
            self.assertTrue(4, len(httpUrls))
        provider2.close()
    
    def test_getPosters_When_posters_not_in_cache_and_returned_by_next_in_chain_Then_cache_locally_and_return_posters(self):
        # Setup
        when(self.nextProvider).getPosters(any(Program)).thenReturn(['logo.gif'])
        key = self.provider.createKey('getPosters', self.program)
        self.assertNotIn(key, self.provider.imagePathsByKey)
                        
        # Test
        posters = self.provider.getPosters(self.program)
        
        # Verify
        log.debug('Posters = %s' % posters)
        self.assertEqual('logo.gif', posters[0])
        self.assertIn(key, self.provider.imagePathsByKey)

    def test_getPosters_When_next_link_in_chain_doesnt_find_posters_Then_dont_cache_anything(self):
        # Setup
        when(self.nextProvider).getPosters(any(Program)).thenReturn([])
        key = self.provider.createKey('getPosters', self.program)
        self.assertNotIn(key, self.provider.imagePathsByKey)
                        
        # Test
        posters = self.provider.getPosters(self.program)
        
        # Verify
        self.assertListEqual([], posters)
        self.assertNotIn(key, self.provider.imagePathsByKey)

    def test_createKey_When_program_title_contains_unicode_chars_Then_dont_blow_up(self):
        program = TVProgram({'title': u'madeleine (Grabación Manual)', 'category_type':'series'}, translator=Mock())
        key = self.provider.createKey('getPosters', program)
        self.assertGreater(len(key), 0)
Exemplo n.º 8
0
class SuperFastFanartProviderTest(unittest.TestCase):
    def setUp(self):
        self.sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True)
        self.nextProvider = Mock()
        self.platform = Mock()
        when(self.platform).getCacheDir().thenReturn(self.sandbox)
        self.program = TVProgram(
            {
                'title': u'Two Fat Ladies',
                'category_type': u'series',
                'subtitle': u'Finger lickin good',
                'originalairdate': u'20081121'
            },
            translator=Mock())
        self.provider = SuperFastFanartProvider(self.platform,
                                                self.nextProvider)

    @staticmethod
    def programs(cnt):
        for i in xrange(cnt):  #@UnusedVariable
            yield TVProgram(
                {
                    'starttime': '20081121140000',
                    'endtime': '20081121140000',
                    'chanid': random.randint(1, 9999999),
                    'channum': str(random.randint(1, 10)),
                    'title': 'Two Fat Ladies %d' % random.randint(1, 999999),
                    'subtitle': 'Away we go....',
                    'description': 'blah blah blah',
                    'category_type': 'series'
                },
                translator=Mock())

    def test_pickling(self):
        when(self.nextProvider).getPosters(any(Program)).thenReturn(
            ['logo.gif'])
        for p in self.programs(20000):
            self.provider.getPosters(p)
        self.provider.close()
        filesize = os.path.getsize(self.provider.pfilename)
        log.debug('Pickle file size = %d' % filesize)
        self.assertGreater(filesize, 0)

    def test_cache_consistent_across_sessions(self):
        sandbox = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, sandbox, ignore_errors=True)
        nextProvider = Mock()
        platform = Mock()
        when(platform).getCacheDir().thenReturn(sandbox)
        when(nextProvider).getPosters(any(Program)).thenReturn([
            'http://a.com/a.gif', 'http://b.com/b.gif', 'http://c.com/c.gif',
            'http://d.com/d.gif'
        ])
        provider = SuperFastFanartProvider(platform, nextProvider)

        programs = []
        for i in xrange(1000):
            program = TVProgram({
                'title': 'P%d' % i,
                'category_type': 'series'
            },
                                translator=Mock())
            httpUrls = provider.getPosters(program)
            self.assertTrue(4, len(httpUrls))
            programs.append(program)
        provider.close()

        nextProvider = Mock()
        provider2 = SuperFastFanartProvider(platform, nextProvider)
        for p in programs:
            httpUrls = provider2.getPosters(p)
            self.assertTrue(4, len(httpUrls))
        provider2.close()

    def test_getPosters_When_posters_not_in_cache_and_returned_by_next_in_chain_Then_cache_locally_and_return_posters(
            self):
        # Setup
        when(self.nextProvider).getPosters(any(Program)).thenReturn(
            ['logo.gif'])
        key = self.provider.createKey('getPosters', self.program)
        self.assertNotIn(key, self.provider.imagePathsByKey)

        # Test
        posters = self.provider.getPosters(self.program)

        # Verify
        log.debug('Posters = %s' % posters)
        self.assertEqual('logo.gif', posters[0])
        self.assertIn(key, self.provider.imagePathsByKey)

    def test_getPosters_When_next_link_in_chain_doesnt_find_posters_Then_dont_cache_anything(
            self):
        # Setup
        when(self.nextProvider).getPosters(any(Program)).thenReturn([])
        key = self.provider.createKey('getPosters', self.program)
        self.assertNotIn(key, self.provider.imagePathsByKey)

        # Test
        posters = self.provider.getPosters(self.program)

        # Verify
        self.assertListEqual([], posters)
        self.assertNotIn(key, self.provider.imagePathsByKey)

    def test_createKey_When_program_title_contains_unicode_chars_Then_dont_blow_up(
            self):
        program = TVProgram(
            {
                'title': u'madeleine (Grabación Manual)',
                'category_type': 'series'
            },
            translator=Mock())
        key = self.provider.createKey('getPosters', program)
        self.assertGreater(len(key), 0)

    def test_getSeasonAndEpisode_When_not_in_cache_Then_ask_next_provider(
            self):
        # Given
        when(self.nextProvider).getSeasonAndEpisode(any(Program)).thenReturn(
            ('5', '12'))
        key = self.provider.createEpisodeKey('getSeasonAndEpisode',
                                             self.program)
        self.assertNotIn(key, self.provider.imagePathsByKey)

        # When
        season, episode = self.provider.getSeasonAndEpisode(self.program)

        # Then
        self.assertEqual('5', season)
        self.assertEqual('12', episode)
        self.assertEqual(('5', '12'), self.provider.imagePathsByKey.get(key))

    def test_getSeasonAndEpisode_When_found_in_cache_Then_return_cached_copy(
            self):
        # Given
        key = self.provider.createEpisodeKey('getSeasonAndEpisode',
                                             self.program)
        self.provider.imagePathsByKey[key] = ('5', '12')

        # When
        season, episode = self.provider.getSeasonAndEpisode(self.program)

        # Then
        self.assertEqual('5', season)
        self.assertEqual('12', episode)
        verifyZeroInteractions(self.nextProvider)