def test_09_alias_stopped(self):
     # relies on Queue.first mock as per setUp
     
     providers = [ProviderMock()]
     pat = ProvidersAliasThread(providers, self.config)
     pat.queue = QueueMock()
     
     pat.start()
     pat.stop()
     pat.join()
     
     # there are no assertions to make here, only that the
     # test completes without error
     assert True
    def test_18_alias_exceptions(self):
        """ test_18_alias_exceptions

            Set up the ProvidersAliasThread with a two mock providers, which 
            simulate errors on processing aliases for various items. Check that
            we handle retries correctly.
        """
        mock_provider1 = ProviderMock(
            aliases_exceptions={
                1:[ProviderRateLimitError,ProviderRateLimitError,ProviderRateLimitError],
                2:[ProviderTimeout,ProviderTimeout,ProviderTimeout,ProviderTimeout],
                4:[ProviderTimeout],
            }
        )
        mock_provider1.name = 'mock1'

        mock_provider2 = ProviderMock(
            aliases_exceptions={
                1:[ProviderRateLimitError,ProviderRateLimitError,ProviderRateLimitError],
                3:[ProviderTimeout,ProviderTimeout,ProviderTimeout,ProviderTimeout],
                4:[ProviderTimeout],
            }
        )
        mock_provider2.name = 'mock2'

        pmt = ProvidersAliasThread([mock_provider1,mock_provider2], self.config)
        pmt.queue = QueueMock(max_items=4)
        
        pmt.start()
        while (pmt.queue.current_item <= 4): 
            time.sleep(1)
        pmt.stop()
        pmt.join()

        # Check that item 1 was processed correctly, after a retry
        self.assertTrue(mock_provider1.aliases_processed.has_key(1))
        self.assertTrue(mock_provider2.aliases_processed.has_key(1))
        ns_list = [k for (k,v) in pmt.queue.items[1].aliases.get_aliases_list()]
        self.assertEqual(set(ns_list),set(['mock','doi']))

        # Check that item 2 failed on the first provider
        ## FIXME re-enable this test after queue refactor in sprint 6        
        ## self.assertFalse(mock_provider1.aliases_processed.has_key(2))
        ## self.assertFalse(mock_provider2.aliases_processed.has_key(2))
        ## self.assertEqual(pmt.queue.items[2].aliases.get_aliases_list(),[])

        # Check that item 3 failed on the second provider
        self.assertTrue(mock_provider1.aliases_processed.has_key(3))
 def test_11_alias_provider_not_implemented(self):
     # relies on Queue.first mock as per setUp
     
     providers = [ProviderNotImplemented()] 
     pat = ProvidersAliasThread(providers, self.d)
     pat.queue = QueueMock()
     
     start = time.time()
     pat.start()
     time.sleep(2)
     
     pat.stop()
     pat.join()
     took = time.time() - start
     
     # The NotImplementedErrors should not derail the thread
     assert took > 2.0
     assert took < 2.5
 def test_10_alias_running(self):
     # relies on Queue.first mock as per setUp
     providers = [ProviderMock()]
     pat = ProvidersAliasThread(providers, self.config)
     pat.queue = QueueMock()
     
     start = time.time()
     pat.start()
     time.sleep(2)
     
     pat.stop()
     pat.join()
     took = time.time() - start
     
     # there are no assertions to make here, only that the
     # test completes without error in the appropriate time
     assert took > 2.0
     assert took < 2.5
    def test_17_alias_thread(self):
        """ test_17_alias_thread

            Set up the ProvidersAliasThread with a single mock provider. Check
            that it runs successfully with a single item in the queue, and that
            it processes the item ok.
        """
        mock_provider = ProviderMock() 
        pmt = ProvidersAliasThread([mock_provider], self.config)
        pmt.queue = QueueMock(max_items=1)
        
        pmt.start()
        while (pmt.queue.current_item <= 1): 
            time.sleep(1)
        pmt.stop()
        pmt.join()

        # Check that item 1 was processed correctly, after a retry
        self.assertTrue(mock_provider.aliases_processed.has_key(1))