2016-04-08 33 views
0

i ile aşağıdaki dizge birkaç kez çalıştırırsanız başarısız olur.Pyelliptic bazen

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 

Benim Sistemi:

  • OS: 14.04.1-Ubuntu (-jenerik 3.16.0-36 Çekirdek)
  • Phtyon3: Python 3.4.0 (varsayılan 2014, 13:05:18)
  • OpenSSL 11 Nisan: 1.0.1f 6 Ocak 2014
  • pyelliptic: 1.5.7

Ayrıca bunu Python 3.4.3 ile benzer bir sistemde test ettim ve bu davranışı yeniden üretebiliyorum.

Hatanızı Sisteminizde yeniden üretebilir misiniz? Evet ise, ne sebep olur?

Güncelleme

Ben ayrıntılı Testi çalıştırırsanız (python3 -m unittest -v test_pyelliptic2.py) aşağıdaki çıktıyı (iki kez çalıştırın) üretir: bazı daha fazla araştırma sonrasında

[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) 

cevap

0

ikili turşu çıktısının sözlükteki öğelerin sıralamasına bağlı olduğu ortaya çıkıyor. 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 

: nedenle aşağıdaki test durumu ikili dizilerin karşılaştırılacağı başarısız bu aynı zamanda json ve BSON modülleri için, turşu için sadece böyle değil