예제 #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()
예제 #2
0
    def test_getSeasonAndEpisode_When_match_not_found_using_original_airdate_Then_match_by_subtitle(
            self):
        # Given
        fields = {
            'title': u'WCG Ultimate Gamer',
            'subtitle': u'In The Crosshairs',
            'starttime': socketDateTime(2010, 12, 2, 22, 45, 00),
            'endtime': socketDateTime(2010, 12, 2, 23, 50, 00),
            'hasairdate': 1,
            'airdate': u'2010-09-20',  # TVRage shows date as 2010-09-16
        }
        program = RecordedProgram(data=pdata(fields, P.version()),
                                  settings=Mock(),
                                  translator=Mock(),
                                  platform=self.platform,
                                  protocol=P,
                                  conn=Mock())
        provider = TvRageProvider(self.platform)

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

        # Then
        self.assertEqual('2', season)
        self.assertEqual('5', episode)
예제 #3
0
    def test_getSeasonAndEpisode_NBCNightlyNews_returns_None_cuz_TVRage_throws_KeyError(
            self):
        # Given
        fields = {
            'title': u'NBC Nightly News',
            'subtitle': u'blah',
            'starttime': socketDateTime(2008, 11, 4, 23, 45, 00),
            'endtime': socketDateTime(2008, 11, 4, 23, 50, 00),
            'hasairdate': 1,
            'airdate': u'2010-07-14'
        }

        program = RecordedProgram(pdata(fields, P.version()),
                                  settings=Mock(),
                                  translator=Mock(),
                                  platform=self.platform,
                                  protocol=P,
                                  conn=Mock())
        provider = TvRageProvider(self.platform)

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

        # Then
        self.assertIsNone(season)
        self.assertIsNone(episode)
예제 #4
0
    def test_getJobs_ForProgram_ByJobType(self):
        # Setup
        when(self.domainCache).getUserJobs().thenReturn(self.db.getUserJobs())
        jobs = self.db.getJobs()
        if len(jobs) == 0:
            log.warn('No jobs in database to test with. Test skipped...')
            return
        job = jobs[-1]  # last job
        data = [''] * self.protocol.recordSize()
        data[4] = job.channelId
        data[11] = time.mktime(job.startTime.timetuple())
        program = RecordedProgram(data=data,
                                  settings=Mock(),
                                  translator=Mock(),
                                  platform=Mock(),
                                  protocol=self.protocol,
                                  conn=Mock())

        # Test
        jobs = self.db.getJobs(program=program, jobType=job.jobType)

        # Verify
        self.assertTrue(len(jobs) > 0)
        for index, actual in enumerate(jobs):
            log.debug('job %d = %s' % (index, actual))
            self.assertEquals(job.channelId, actual.channelId)
            self.assertEquals(job.startTime, actual.startTime)
            self.assertEquals(job.jobType, actual.jobType)
예제 #5
0
    def test_getSeasonAndEpisode_try_to_cache_output(self):
        # Given
        fields = {
            'title': u'Seinfeld',
            'starttime': socketDateTime(2008, 11, 4, 23, 45, 00),
            'endtime': socketDateTime(2008, 11, 4, 23, 50, 00),
            'hasairdate': 1,
            'airdate': u'1989-07-05'
        }
        program = RecordedProgram(data=pdata(fields, P.version()),
                                  settings=Mock(),
                                  translator=Mock(),
                                  platform=self.platform,
                                  protocol=P,
                                  conn=Mock())
        provider = TvRageProvider(self.platform)

        # When
        for i in xrange(100):  #@UnusedVariable
            # TODO Verify hitting cache < 1sec per invocation.
            #      Since tvrage api is not injected, cannot mock
            season, episode = provider.getSeasonAndEpisode(program)
            # Then
            self.assertEqual('1', season)
            self.assertEqual('1', episode)
예제 #6
0
 def test_hashable(self):
     s1 = RecordingSchedule({'recordid' : 1}, Mock())
     s2 = RecordingSchedule({'recordid' : 2}, Mock())
     d = {s1:'schedule1',}
     self.assertIn(s1, d)
     self.assertEqual('schedule1', d[s1])
     self.assertNotIn(s2, d)
예제 #7
0
    def test_moveToFrontOfQueue_From_5_Of_10(self):
        # Setup
        jobPos = 4 # zero based index
        db = Mock()
        conn = Mock()
        jobs = []
        for i in xrange(1, 11):
            job = self.createJob(conn=conn, db=db, id=i, jobStatus=JobStatus.QUEUED, jobType=JobType.COMMFLAG)
            job.scheduledRunTime = datetime.datetime.now().replace(year=(2000+i))
            jobs.append(job)
            #log.debug('%s' % job)
      
        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)
        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)
        job = copy.copy(jobs[jobPos])
        
        # Test
        job.moveToFrontOfQueue()
        
        # Verify
        # pushed back [1:4]
        for i, j in enumerate(jobs[:jobPos]):
            log.debug('job %s = %s' % (i, j))
            self.assertTrue(2000 + (i+2), j.scheduledRunTime.year)

        # moved to first in queue
        log.debug('current job = %s' % job)
        self.assertTrue(2001, job.scheduledRunTime.year)
        
        # unaffected jobs [5,10]
        for i, j in enumerate(jobs[jobPos+1:]):  
            log.debug('job %s = %s' % (i, j))
            self.assertTrue(2000 + (i+2), j.scheduledRunTime.year)
예제 #8
0
    def test_getPositionInQueue_Position_Is_7_of_10(self):
        # Setup
        db = Mock()
        conn = Mock()
        jobs = []
        for i in xrange(1, 11):
            jobs.append(
                self.createJob(id=i,
                               jobStatus=JobStatus.QUEUED,
                               jobType=JobType.COMMFLAG))

        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)
        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)

        job = self.createJob(conn=conn,
                             db=db,
                             id=7,
                             jobStatus=JobStatus.QUEUED,
                             jobType=JobType.COMMFLAG)

        # Test
        pos, numJobs = job.getPositionInQueue()

        # Verify
        log.debug('Job is %d of %d' % (pos, numJobs))
        self.assertEqual(7, pos)
        self.assertEqual(10, numJobs)
예제 #9
0
 def setUp(self):
     self.conn = Mock()
     self.settings = Mock()
     self.translator = Mock()
     self.platform = Mock()
     self.protocol = TEST_PROTOCOL
     self.pkwargs = {'settings':self.settings, 'translator': self.translator, 'platform':self.platform, 'protocol':self.protocol, 'conn':self.conn}
예제 #10
0
    def test_moveToFrontOfQueue_From_2_Of_2(self):
        # Setup
        db = Mock()
        conn = Mock()
        jobs = []
        for i in xrange(1, 3):
            job = self.createJob(conn=conn,
                                 db=db,
                                 id=i,
                                 jobStatus=JobStatus.QUEUED,
                                 jobType=JobType.COMMFLAG)
            job.scheduledRunTime = datetime.datetime.now().replace(year=(2000 +
                                                                         i))
            jobs.append(job)

        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)
        when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn(jobs)
        job = copy.copy(jobs[1])

        # Test
        job.moveToFrontOfQueue()

        # Verify
        for i, j in enumerate(jobs[:-1]):
            log.debug('job %s = %s' % (i, j))
            self.assertEqual(2000 + (i + 2), j.scheduledRunTime.year)
        log.debug('current job = %s' % job)
        self.assertEqual(2001, job.scheduledRunTime.year)
예제 #11
0
    def test_token_error(self):
        token = Mock()
        token.value = 'unknown'
        token.lexer = Mock()
        token.lexer.lineno = 10

        self.assertRaises(LingoLexingException, self.parser.t_error, token)
예제 #12
0
    def setUp(self):
        self.platform = getPlatform()
        self.translator = Mock()
        self.settings = MythSettings(self.platform, self.translator)

        privateConfig = OnDemandConfig()
        self.settings.put('mysql_host', privateConfig.get('mysql_host'))
        self.settings.put('mysql_port', privateConfig.get('mysql_port'))
        self.settings.setMySqlDatabase(privateConfig.get('mysql_database'))
        self.settings.setMySqlUser(privateConfig.get('mysql_user'))
        self.settings.put('mysql_password',
                          privateConfig.get('mysql_password'))
        self.settings.put('paths_recordedprefix',
                          privateConfig.get('paths_recordedprefix'))
        self.bus = EventBus()
        self.domainCache = Mock()
        pools['dbPool'] = Pool(
            MythDatabaseFactory(settings=self.settings,
                                translator=self.translator,
                                domainCache=self.domainCache))
        pools['connPool'] = Pool(
            ConnectionFactory(settings=self.settings,
                              translator=self.translator,
                              platform=self.platform,
                              bus=self.bus))
예제 #13
0
 def setUp(self):
     self.db = Mock()
     self.conn = Mock()
     self.translator = Mock()
     self.domainCache = Mock()
     self.tuner = Tuner(4, 'mrbun', 1000, 6000, 'HDHOMERUN',
                        self.domainCache, self.conn, self.db,
                        self.translator)
예제 #14
0
    def test_production_error(self):
        production = Mock()
        production.lexer = Mock()
        production.lexer.lexdata = 'hello\nworld'
        production.lexpos = 0
        production.lineno = 1

        self.assertRaises(LingoParsingException, self.parser.p_error,
                          production)
예제 #15
0
 def setUp(self):
     self.pcb1 = Mock()
     self.pcb2 = Mock()
     self.interruptor = Mock()
     self.logger = Mock()
     self.printLine1 = InstIO("Impresion 1", 0)
     self.printLine2 = InstIO("Impresion 2", 0)
     self.queue = Queue()
     self.device = Device("Printer", self.interruptor, self.queue)  # 0 equals to the device cod printer
     self.device.setLogger(self.logger)
예제 #16
0
    def setUp(self):
        self.tracker = Mock()

        self.translator = Mock()
        when(self.translator).get(any()).thenReturn('some %s string')

        self.player = Mock()
        self.player.tracker = self.tracker

        self.program = Mock()
        when(self.program).title().thenReturn('movie.mpg')
예제 #17
0
    def test_getLatestEntries_None(self):

        # Setup
        settings = Mock()
        when(settings).get(any()).thenReturn('blah')
        feedHose = FeedHose(settings=settings, bus=Mock())

        # Test
        entries = feedHose.getLatestEntries()

        # Verify
        self.assertTrue(len(entries) == 0)
예제 #18
0
 def setUp(self):
     self.sandbox = tempfile.mkdtemp()
     self.addCleanup(shutil.rmtree, self.sandbox, ignore_errors=True)
     self.platform = Mock()
     when(self.platform).getCacheDir().thenReturn(self.sandbox)
     self.deps = {
         'settings': Mock(),
         'translator': Mock(),
         'platform': self.platform,
         'protocol': TEST_PROTOCOL,
         'conn': Mock()
     }
예제 #19
0
 def setUp(self):
     self.conn = Mock()
     self.settings = Mock()
     self.translator = Mock()
     self.platform = Mock()
     self.protocol = protocol.Protocol23056()
     self.pkwargs = {
         'settings': self.settings,
         'translator': self.translator,
         'platform': self.platform,
         'protocol': self.protocol,
         'conn': self.conn
     }
예제 #20
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)
예제 #21
0
 def setUp(self):
     self.nextProvider = Mock()
     self.dir = tempfile.mkdtemp()
     self.addCleanup(shutil.rmtree, self.dir, ignore_errors=True)
     self.httpCache = FileCache(self.dir, HttpResolver())
     self.program = TVProgram(
         {
             'title': 'Not Important',
             'category_type': 'series'
         },
         translator=Mock())
     self.provider = HttpCachingFanartProvider(self.httpCache,
                                               self.nextProvider)
     self.addCleanup(self.provider.close)
예제 #22
0
    def test_enterText_Should_DoNothing_When_UserCancelsOperation(self):
        # Setup
        xbmc.Keyboard.stubConfirmed = False
        control = Mock()
        validator = Mock()
        updater = Mock()

        # Test
        enterText(control=control,
                  validator=validator.validate,
                  updater=updater.update)

        # Verify
        verifyZeroInteractions(validator)
        verifyZeroInteractions(updater)
예제 #23
0
 def setUp(self):
     self.spam = TVProgram(
         {
             'title': 'Paid Programming',
             'category_type': 'series'
         },
         translator=Mock())
     self.notSpam = TVProgram(
         {
             'title': 'I am not spam',
             'category_type': 'series'
         },
         translator=Mock())
     self.next = Mock()
     self.provider = SpamSkippingFanartProvider(nextProvider=self.next)
예제 #24
0
    def test_episodeFilter_and_checkForDupesIn_read_from_and_written_to_dupin_field_correctly(
            self):
        data = {
            'dupin':
            CheckForDupesIn.ALL_RECORDINGS
            | EpisodeFilter.EXCLUDE_REPEATS_AND_GENERICS
        }
        schedule = RecordingSchedule(data, Mock())
        self.assertEqual(EpisodeFilter.EXCLUDE_REPEATS_AND_GENERICS,
                         schedule.getEpisodeFilter())

        schedule.setEpisodeFilter(EpisodeFilter.NEW_EPISODES_ONLY)
        self.assertEqual(EpisodeFilter.NEW_EPISODES_ONLY,
                         schedule.getEpisodeFilter())
        self.assertEqual(CheckForDupesIn.ALL_RECORDINGS,
                         schedule.getCheckForDupesIn())

        schedule.setCheckForDupesIn(CheckForDupesIn.PREVIOUS_RECORDINGS)
        self.assertEqual(EpisodeFilter.NEW_EPISODES_ONLY,
                         schedule.getEpisodeFilter())
        self.assertEqual(CheckForDupesIn.PREVIOUS_RECORDINGS,
                         schedule.getCheckForDupesIn())

        schedule.setEpisodeFilter(EpisodeFilter.NONE)
        self.assertEqual(EpisodeFilter.NONE, schedule.getEpisodeFilter())
        self.assertEqual(CheckForDupesIn.PREVIOUS_RECORDINGS,
                         schedule.getCheckForDupesIn())
예제 #25
0
 def test_getPositionInQueue_Position_Is_1_of_1(self):
     # Setup
     db = Mock()
     conn = Mock()
     
     job = self.createJob(conn=conn, db=db, jobStatus=JobStatus.QUEUED, jobType=JobType.COMMFLAG)
     when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn([job])
     when(db).getJobs(jobStatus=JobStatus.QUEUED).thenReturn([job])
     
     # Test
     pos, numJobs = job.getPositionInQueue()
     
     # Verify
     log.debug('Job is %d of %d' % (pos, numJobs))
     self.assertEqual(1, pos)
     self.assertEqual(1, numJobs)
예제 #26
0
 def test_starttime_DataFromNativeMySQL(self):
     data = {
         'starttime':
         datetime.timedelta(seconds=(1 * 60 * 60) + (2 * 60) + 3)
     }
     schedule = ScheduleFromQuery(data, Mock())
     self.assertEquals('010203', schedule.starttime())
예제 #27
0
    def test_getPosters_When_pounded_by_many_threads_looking_up_same_program_Then_doesnt_fail_miserably(
            self):

        programs = []
        for i in xrange(10):  #@UnusedVariable
            programs.append(
                TVProgram({
                    'title': 'Seinfeld',
                    'category_type': 'series'
                },
                          translator=Mock()))
        provider = self.getProvider()

        @run_async
        def work(p):
            posters = provider.getPosters(p)
            if len(posters) == 0:
                self.fail = True
            for poster in posters:
                log.debug('%s - %s' % (p.title(), poster))

        self.fail = False
        threads = []
        for p in programs:
            threads.append(work(p))
        for t in threads:
            t.join()

        self.assertFalse(self.fail)
예제 #28
0
 def test_getPosters_When_program_is_movie_Then_returns_empty_list(self):
     program = TVProgram({
         'title': 'Departed',
         'category_type': 'movie'
     },
                         translator=Mock())
     self.assertListEqual([], self.getProvider().getPosters(program))
예제 #29
0
 def getTvShows(self):
     return map(
         lambda t: TVProgram({
             'title': t,
             'category_type': 'series'
         },
                             translator=Mock()), self.tvShows)
예제 #30
0
 def getMovies(self):
     return map(
         lambda t: TVProgram({
             'title': t,
             'category_type': 'movie'
         },
                             translator=Mock()), self.movies)