2016-04-08 11 views
0

私は、次のテストケースを複数回実行すると失敗します。Pyellipticは時々

のTestCase:

import unittest, pyelliptic, pickle 

class PyellipticTestCase(unittest.TestCase): 
    def setUp(self): 
     self.alice = pyelliptic.ECC() 
     self.bob = pyelliptic.ECC() 

    def test_pickleSign(self): 
     tm = {"text":"contract","amount":12} 
     tms1 = {"doc":tm,"c1":self.bob.get_pubkey(),"s1":self.bob.sign(pickle.dumps(tm))} 
     tms2bb = {"doc":tms1,"c2":self.alice.get_pubkey(),"s2":self.alice.sign(pickle.dumps(tms1))} 
     tms2 = pickle.loads(pickle.dumps(tms2bb)) 
     self.assertEqual(tms2['s2'],tms2bb['s2']) 
     self.assertTrue(pyelliptic.ECC(pubkey=self.alice.get_pubkey()).verify(tms2bb['s2'],pickle.dumps(tms2['doc']))) #<--- FAILs sometimes 

マイシステム:

  • OS:14.04.1-Ubuntuの(カーネル3.16.0-36-ジェネリック)
  • Phtyon3:Pythonの3.4.0(デフォルト、2014年4月11日、午前13時05分18秒)
  • のOpenSSL:1.0.1f 2014年1月6日
  • pyelliptic:1.5.7

私はPython 3.4.3と同様のシステムでこれをテストし、その動作を再現することができました。

システムで障害を再現できますか? 「はい」の場合、原因は何ですか?

更新

私は冗長で(のpython3 -m unittestの-v test_pyelliptic2.py)テストを実行する場合には、以下の出力(2回実行)生成します。さらにいくつかの研究の後

[email protected]:~/test$ python3 -m unittest -v test_pyelliptic2.py 
test_pickleSign (test_pyelliptic2.PyellipticTestCase) ... ok 

---------------------------------------------------------------------- 
Ran 1 test in 0.012s 

OK 
[email protected]:~/test$ python3 -m unittest -v test_pyelliptic2.py 
test_pickleSign (test_pyelliptic2.PyellipticTestCase) ... FAIL 

====================================================================== 
FAIL: test_pickleSign (test_pyelliptic2.PyellipticTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "XX/test/test_pyelliptic2.py", line 14, in test_pickleSign 
    self.assertTrue(pyelliptic.ECC(pubkey=self.alice.get_pubkey()).verify(tms2bb['s2'],pickle.dumps(tms2['doc']))) #<--- FAILs sometimes 
AssertionError: False is not true 

---------------------------------------------------------------------- 
Ran 1 test in 0.013s 

FAILED (failures=1) 

答えて

0

をバイナリ・ピックルの出力は辞書内の要素の順序に依存することが分かります。 したがって、以下のテストケースは、バイナリ配列の比較に失敗した:BTW

def test_pickleOrder(self): 
     d1 = {"test1":12,"test2":14.2,"test3":"test"} 
     d2 = {"test3":"test","test1":12,"test2":14.2}  
     self.assertEqual(d1,d2)  
     d1p = pickle.dumps(d1) 
     d2p = pickle.dumps(d2)  
     self.assertEqual(d1p,d2p) #<--- fails here 

:これだけでなく、漬物の場合であるが、また、JSONとBSONモジュールの

関連する問題