def test_sig_bitcoin1(bare_session): msg = "this is a test message" name1, name2 = "member_a", "member_b" priv1, addr1 = makeTestKey(name1) priv2, addr2 = makeTestKey(name2) msg = b"this is a test message" sig1 = bitcoin.ecdsa_sign(msg, priv1) sig2 = bitcoin.ecdsa_sign(msg, priv2) with pytest.raises(ValidationError): # member not existing checkSig(msg, sig1, name1) m1 = Member(name1, addr1) m2 = Member(name2, addr2) bare_session.add(m1) bare_session.add(m2) # should succeed checkSig(msg, sig1, name1) with pytest.raises(ValidationError): # wrong sig checkSig(msg, sig2, name1) # should succeed checkSig(msg, sig2, name2)
def test1(bare_session): m = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign") bare_session.add(m) assert not m.eligible() Global.set_member_last_vote_time(m, time.time()) # member is still not eligible - because no # current member list exists assert not m.eligible() assert not len(m.dependencies()) assert len(m.member_lists) == 0 with pytest.raises(ValidationError): Member( name="member_a ", # illegal name address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign") with pytest.raises(ValidationError): Member( name="member_a", # Bitcoin address with broken checksum address="19L8fQDCta3mewpJXcRm8wqq6X6k6HFign") m2 = Member(name="member_b", address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV") bare_session.add(m2) # not allowed: reuse of address with pytest.raises(ValidationError): m3 = Member(name="member_a", address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV")
def test_duplicate_name(bare_session): m1 = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign") bare_session.add(m1) with pytest.raises(ValidationError): m2 = Member(name="member_a", address="1FPZ29pzqC1FLYyDuB5Han6wi8oNwQeHCV")
def test_with_pgpkey(bare_session): with pytest.raises(ValidationError): m = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign", pgp_pubkey="test") m = Member(name="member_a", address="19L8fQDCta3mewpJXcRm8wqq5X6k6HFign", pgp_pubkey=testkeys.pubkey1.decode("ascii")) bare_session.add(m)
def test_invalid_publish(bare_session): test_scenario1(bare_session, stopper="two-unpublished") ml = Global.current_member_list() proposal1 = b"Test proposal #1" hashprop1 = hashlib.sha256(proposal1).hexdigest() hashprop_noexist = hashlib.sha256(b"nope").hexdigest() rf = RawFile.by_hash(hashprop1) m1 = rf.proposal_metadata # test hash does not exist with pytest.raises(ValidationError): act_publish = makeTestAction( author=Member.by_name("member_v"), apart= (ml.hashref() + " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v" % hashprop_noexist)) act_publish.apply(None, None) rf_nomd = RawFile(b"nope") bare_session.add(rf_nomd) # test file has no metadata with pytest.raises(ValidationError): act_publish = makeTestAction( author=Member.by_name("member_v"), apart= (ml.hashref() + " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v" % hashprop_noexist)) act_publish.apply(None, None) # test file is already public m1.file_public = True with pytest.raises(ValidationError): act_publish = makeTestAction( author=Member.by_name("member_v"), apart= (ml.hashref() + " proposal-publish file %s designation BUIP0001 title 'title BUIP0001' by member_v" % hashprop1)) act_publish.apply(None, None)
def test_rawfile1(bare_session): rf=RawFile(b"123") bare_session.add(rf) assert not rf.public() assert rf.serialize() == b"123" H=hashlib.sha256(b"123").hexdigest() assert rf.hashref() == H with pytest.raises(ValidationError): rf2 = RawFile(b"123") with pytest.raises(Exception): rf.toJ() assert not len(rf.dependencies())
def test_sig_pgp1(gpg_env1, bare_session): env = gpg_env1 gpg = env["gpg"] name1, name2 = "member_a", "member_b" priv1, addr1 = makeTestKey(name1) priv2, addr2 = makeTestKey(name2) m1 = Member(name1, addr1, env["pk1"]) m2 = Member(name2, addr2, env["pk2"]) bare_session.add(m1) bare_session.add(m2) msg = b"this is a test message" s1 = gpg.sign(msg, keyid=env["key1"].fingerprint, passphrase="key1", detach=True) sig1 = s1.data s2 = gpg.sign(msg, keyid=env["key2"].fingerprint, passphrase="key2", detach=True) sig2 = s2.data # signing should have succeeded (non-zero sig length) assert len(sig1) and b"SIGNATURE" in sig1 assert len(sig2) and b"SIGNATURE" in sig1 # should suceed checkSig(msg, sig1, name1) checkSig(msg, sig2, name2) with pytest.raises(ValidationError): # wrong user checkSig(msg, sig2, name1)