コード例 #1
0
    def test_simple(self):

        rwlock = ClientThreading.FileRWLock()

        result_list = []

        do_read_job(rwlock, result_list, '1')

        expected_result = []

        expected_result.extend(['begin read 1', 'end read 1'])

        self.assertEqual(result_list, expected_result)

        #

        result_list = []

        do_write_job(rwlock, result_list, '1')

        expected_result = []

        expected_result.extend(['begin write 1', 'end write 1'])

        self.assertEqual(result_list, expected_result)
コード例 #2
0
 def test_mixed_competing( self ):
     
     rwlock = ClientThreading.FileRWLock()
     
     result_list = []
     
     all_expected_results = set()
     
     for i in range( 10 ):
         
         HG.test_controller.CallLater( 0.0 * i, do_read_job, rwlock, result_list, str( i ) )
         
         all_expected_results.update( [ 'begin read {}'.format( i ), 'end read {}'.format( i ) ] )
         
     
     for i in range( 5 ):
         
         HG.test_controller.CallLater( 0.0 * i, do_write_job, rwlock, result_list, str( i ) )
         
         all_expected_results.update( [ 'begin write {}'.format( i ), 'end write {}'.format( i ) ] )
         
     
     time.sleep( 0.2 )
     
     with rwlock.read:
         
         pass
         
     
     with rwlock.write:
         
         pass
         
     
     self.assertEqual( set( result_list ), all_expected_results )
     
     for i in range( 15 ):
         
         # even if reads mix up a bit, every two items should have the same read/write value
         
         a = result_list[ i * 2 ]
         b = result_list[ ( i * 2 ) + 1 ]
         
         if 'read' in a:
             
             self.assertIn( 'read', b )
             
         
         if 'write' in a:
             
             self.assertTrue( a.startswith( 'begin write' ) )
             self.assertTrue( b.startswith( 'end write' ) )
             
             self.assertEqual( a[-2:], b[-2:] )
コード例 #3
0
    def test_competing_write(self):

        rwlock = ClientThreading.FileRWLock()

        result_list = []

        HG.test_controller.CallLater(0.0, do_write_job, rwlock, result_list,
                                     '1')
        HG.test_controller.CallLater(0.1, do_write_job, rwlock, result_list,
                                     '2')

        time.sleep(0.2)

        with rwlock.read:

            pass

        expected_result = []

        expected_result.extend(['begin write 1', 'end write 1'])
        expected_result.extend(['begin write 2', 'end write 2'])

        self.assertEqual(result_list, expected_result)

        #

        result_list = []

        for i in range(10):

            HG.test_controller.CallLater(0.0, do_write_job, rwlock,
                                         result_list, str(i))

        time.sleep(0.2)

        with rwlock.read:

            pass

        expected_results = set()

        for i in range(10):

            expected_pair = ('begin write {}'.format(i),
                             'end write {}'.format(i))

            expected_results.add(expected_pair)

        for i in range(10):

            result_pair = (result_list[i * 2], result_list[(i * 2) + 1])

            self.assertIn(result_pair, expected_results)
コード例 #4
0
    def test_shared_read(self):

        rwlock = ClientThreading.FileRWLock()

        result_list = []

        HG.test_controller.CallLater(0.0, do_read_job, rwlock, result_list,
                                     '1')
        HG.test_controller.CallLater(0.1, do_read_job, rwlock, result_list,
                                     '2')

        time.sleep(0.2)

        with rwlock.write:

            pass

        results = set(result_list)

        expected_results = set()

        expected_results.update(['begin read 1', 'end read 1'])
        expected_results.update(['begin read 2', 'end read 2'])

        self.assertEqual(results, expected_results)

        #

        result_list = []

        for i in range(10):

            HG.test_controller.CallLater(0.0, do_read_job, rwlock, result_list,
                                         str(i))

        time.sleep(0.2)

        with rwlock.write:

            pass

        expected_results = set()

        for i in range(10):

            expected_results.update(
                ['begin read {}'.format(i), 'end read {}'.format(i)])

        results = set(result_list)

        self.assertEqual(results, expected_results)