Test expect exact sign and verification errors
This commit is contained in:
parent
916709a7e4
commit
dca3c775d1
2 changed files with 52 additions and 23 deletions
|
@ -5,6 +5,7 @@ from cStringIO import StringIO
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from Crypt import CryptBitcoin
|
from Crypt import CryptBitcoin
|
||||||
|
from Content.ContentManager import VerifyError, SignError
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("resetSettings")
|
@pytest.mark.usefixtures("resetSettings")
|
||||||
|
@ -58,7 +59,10 @@ class TestContent:
|
||||||
data_dict["files"]["data.json"]["size"] = 200000 # Emulate 2MB sized data.json
|
data_dict["files"]["data.json"]["size"] = 200000 # Emulate 2MB sized data.json
|
||||||
data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), privatekey)}
|
data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), privatekey)}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False)
|
||||||
|
assert "Include too large" in str(err)
|
||||||
|
|
||||||
# Reset
|
# Reset
|
||||||
data_dict["files"]["data.json"]["size"] = 505
|
data_dict["files"]["data.json"]["size"] = 505
|
||||||
del data_dict["signs"]
|
del data_dict["signs"]
|
||||||
|
@ -67,7 +71,10 @@ class TestContent:
|
||||||
data_dict["files"]["notallowed.exe"] = data_dict["files"]["data.json"]
|
data_dict["files"]["notallowed.exe"] = data_dict["files"]["data.json"]
|
||||||
data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), privatekey)}
|
data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), privatekey)}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False)
|
||||||
|
assert "File not allowed" in str(err)
|
||||||
|
|
||||||
# Reset
|
# Reset
|
||||||
del data_dict["files"]["notallowed.exe"]
|
del data_dict["files"]["notallowed.exe"]
|
||||||
del data_dict["signs"]
|
del data_dict["signs"]
|
||||||
|
@ -80,7 +87,9 @@ class TestContent:
|
||||||
@pytest.mark.parametrize("inner_path", ["content.json", "data/test_include/content.json", "data/users/content.json"])
|
@pytest.mark.parametrize("inner_path", ["content.json", "data/test_include/content.json", "data/users/content.json"])
|
||||||
def testSign(self, site, inner_path):
|
def testSign(self, site, inner_path):
|
||||||
# Bad privatekey
|
# Bad privatekey
|
||||||
assert not site.content_manager.sign(inner_path, privatekey="5aaa3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMnaa", filewrite=False)
|
with pytest.raises(SignError) as err:
|
||||||
|
site.content_manager.sign(inner_path, privatekey="5aaa3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMnaa", filewrite=False)
|
||||||
|
assert "Private key invalid" in str(err)
|
||||||
|
|
||||||
# Good privatekey
|
# Good privatekey
|
||||||
content = site.content_manager.sign(inner_path, privatekey="5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv", filewrite=False)
|
content = site.content_manager.sign(inner_path, privatekey="5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv", filewrite=False)
|
||||||
|
@ -154,7 +163,9 @@ class TestContent:
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
||||||
}
|
}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(inner_path, data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(inner_path, data, ignore_same=False)
|
||||||
|
assert "Wrong site address" in str(err)
|
||||||
|
|
||||||
# Wrong inner_path
|
# Wrong inner_path
|
||||||
data_dict["address"] = "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"
|
data_dict["address"] = "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"
|
||||||
|
@ -164,7 +175,9 @@ class TestContent:
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
||||||
}
|
}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(inner_path, data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(inner_path, data, ignore_same=False)
|
||||||
|
assert "Wrong inner_path" in str(err)
|
||||||
|
|
||||||
# Everything right again
|
# Everything right again
|
||||||
data_dict["address"] = "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"
|
data_dict["address"] = "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT"
|
||||||
|
|
|
@ -4,6 +4,7 @@ from cStringIO import StringIO
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from Crypt import CryptBitcoin
|
from Crypt import CryptBitcoin
|
||||||
|
from Content.ContentManager import VerifyError, SignError
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures("resetSettings")
|
@pytest.mark.usefixtures("resetSettings")
|
||||||
|
@ -81,7 +82,10 @@ class TestUserContent:
|
||||||
rules = site.content_manager.getRules(user_inner_path, data_dict)
|
rules = site.content_manager.getRules(user_inner_path, data_dict)
|
||||||
assert rules["max_size"] == 0
|
assert rules["max_size"] == 0
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
|
||||||
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
||||||
|
assert "Include too large" in str(err)
|
||||||
users_content["user_contents"]["permission_rules"][".*"]["max_size"] = 10000 # Reset
|
users_content["user_contents"]["permission_rules"][".*"]["max_size"] = 10000 # Reset
|
||||||
|
|
||||||
# Test max optional size exception
|
# Test max optional size exception
|
||||||
|
@ -101,7 +105,9 @@ class TestUserContent:
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
||||||
}
|
}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
||||||
|
assert "Include optional files too large" in str(err)
|
||||||
data_dict["files_optional"]["peanut-butter-jelly-time.gif"]["size"] = 1024 * 1024 # Reset
|
data_dict["files_optional"]["peanut-butter-jelly-time.gif"]["size"] = 1024 * 1024 # Reset
|
||||||
|
|
||||||
# hello.exe = Not allowed
|
# hello.exe = Not allowed
|
||||||
|
@ -111,7 +117,9 @@ class TestUserContent:
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
||||||
}
|
}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
||||||
|
assert "Optional file not allowed" in str(err)
|
||||||
del data_dict["files_optional"]["hello.exe"] # Reset
|
del data_dict["files_optional"]["hello.exe"] # Reset
|
||||||
|
|
||||||
# Includes not allowed in user content
|
# Includes not allowed in user content
|
||||||
|
@ -121,7 +129,9 @@ class TestUserContent:
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey)
|
||||||
}
|
}
|
||||||
data = StringIO(json.dumps(data_dict))
|
data = StringIO(json.dumps(data_dict))
|
||||||
assert not site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(user_inner_path, data, ignore_same=False)
|
||||||
|
assert "Includes not allowed" in err
|
||||||
|
|
||||||
|
|
||||||
def testCert(self, site):
|
def testCert(self, site):
|
||||||
|
@ -174,10 +184,13 @@ class TestUserContent:
|
||||||
# Test banned user
|
# Test banned user
|
||||||
cert_user_id = user_content["cert_user_id"] # My username
|
cert_user_id = user_content["cert_user_id"] # My username
|
||||||
site.content_manager.contents["data/users/content.json"]["user_contents"]["permissions"][cert_user_id] = False
|
site.content_manager.contents["data/users/content.json"]["user_contents"]["permissions"][cert_user_id] = False
|
||||||
assert not site.content_manager.verifyFile(
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(
|
||||||
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
||||||
StringIO(json.dumps(signed_content)), ignore_same=False
|
StringIO(json.dumps(signed_content)), ignore_same=False
|
||||||
)
|
)
|
||||||
|
assert "Valid sings: 0" in str(err)
|
||||||
|
del site.content_manager.contents["data/users/content.json"]["user_contents"]["permissions"][cert_user_id] # Reset
|
||||||
|
|
||||||
# Test invalid cert
|
# Test invalid cert
|
||||||
user_content["cert_sign"] = CryptBitcoin.sign(
|
user_content["cert_sign"] = CryptBitcoin.sign(
|
||||||
|
@ -186,10 +199,12 @@ class TestUserContent:
|
||||||
signed_content = site.content_manager.sign(
|
signed_content = site.content_manager.sign(
|
||||||
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", user_priv, filewrite=False
|
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", user_priv, filewrite=False
|
||||||
)
|
)
|
||||||
assert not site.content_manager.verifyFile(
|
with pytest.raises(VerifyError) as err:
|
||||||
|
site.content_manager.verifyFile(
|
||||||
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
||||||
StringIO(json.dumps(signed_content)), ignore_same=False
|
StringIO(json.dumps(signed_content)), ignore_same=False
|
||||||
)
|
)
|
||||||
|
assert "Invalid cert" in str(err)
|
||||||
|
|
||||||
# Test banned user, signed by the site owner
|
# Test banned user, signed by the site owner
|
||||||
user_content["cert_sign"] = CryptBitcoin.sign("1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C#%s/%s" % (
|
user_content["cert_sign"] = CryptBitcoin.sign("1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C#%s/%s" % (
|
||||||
|
@ -237,17 +252,18 @@ class TestUserContent:
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test removed cert
|
# Test removed cert
|
||||||
# user_content["cert_sign"]
|
del user_content["cert_user_id"]
|
||||||
del user_content["cert_auth_type"]
|
del user_content["cert_auth_type"]
|
||||||
del user_content["signs"] # Remove signs before signing
|
del user_content["signs"] # Remove signs before signing
|
||||||
user_content["signs"] = {
|
user_content["signs"] = {
|
||||||
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(user_content, sort_keys=True), user_priv)
|
"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(user_content, sort_keys=True), user_priv)
|
||||||
}
|
}
|
||||||
print "--- Signed content", user_content
|
with pytest.raises(VerifyError) as err:
|
||||||
assert not site.content_manager.verifyFile(
|
site.content_manager.verifyFile(
|
||||||
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
"data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json",
|
||||||
StringIO(json.dumps(user_content)), ignore_same=False
|
StringIO(json.dumps(user_content)), ignore_same=False
|
||||||
)
|
)
|
||||||
|
assert "Missing cert_user_id" in str(err)
|
||||||
|
|
||||||
def testNewFile(self, site):
|
def testNewFile(self, site):
|
||||||
privatekey = "5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv" # For 1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT
|
privatekey = "5KUh3PvNm5HUWoCfSUfcYvfQ2g3PrRNJWr6Q9eqdBGu23mtMntv" # For 1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT
|
||||||
|
|
Loading…
Reference in a new issue