diff --git a/src/Test/TestContent.py b/src/Test/TestContent.py index b163818c..687a18d4 100644 --- a/src/Test/TestContent.py +++ b/src/Test/TestContent.py @@ -40,6 +40,7 @@ class TestContent: def testInlcudeLimits(self, site, crypt_bitcoin_lib): # Data validation + res = [] data_dict = { "files": { "data.json": { @@ -51,19 +52,21 @@ class TestContent: } # Normal data - data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), self.privatekey)} - data = io.StringIO(json.dumps(data_dict)) + data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey)} + data_json = json.dumps(data_dict).encode() + data = io.BytesIO(data_json) assert site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False) + # Reset del data_dict["signs"] # Too large data_dict["files"]["data.json"]["size"] = 200000 # Emulate 2MB sized data.json - data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), self.privatekey)} - data = io.StringIO(json.dumps(data_dict)) + data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey)} + data = io.BytesIO(json.dumps(data_dict).encode()) 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) + assert "Include too large" in str(err) # Reset data_dict["files"]["data.json"]["size"] = 505 @@ -71,19 +74,19 @@ class TestContent: # Not allowed file data_dict["files"]["notallowed.exe"] = data_dict["files"]["data.json"] - data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), self.privatekey)} - data = io.StringIO(json.dumps(data_dict)) + data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey)} + data = io.BytesIO(json.dumps(data_dict).encode()) 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) + assert "File not allowed" in str(err) # Reset del data_dict["files"]["notallowed.exe"] del data_dict["signs"] # Should work again - data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict), self.privatekey)} - data = io.StringIO(json.dumps(data_dict)) + data_dict["signs"] = {"1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey)} + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile("data/test_include/content.json", data, ignore_same=False) @pytest.mark.parametrize("inner_path", ["content.json", "data/test_include/content.json", "data/users/content.json"]) @@ -166,7 +169,7 @@ class TestContent: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey) } - data = io.StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(inner_path, data, ignore_same=False) assert "Wrong site address" in str(err) @@ -178,7 +181,7 @@ class TestContent: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey) } - data = io.StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(inner_path, data, ignore_same=False) assert "Wrong inner_path" in str(err) @@ -190,7 +193,7 @@ class TestContent: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey) } - data = io.StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(inner_path, data, ignore_same=False) def testVerifyInnerPath(self, site, crypt_bitcoin_lib): @@ -206,7 +209,7 @@ class TestContent: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey) } - data = io.StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(inner_path, data, ignore_same=False) for bad_relative_path in ["../data.json", "data/" * 100, "invalid|file.jpg"]: @@ -218,7 +221,7 @@ class TestContent: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), self.privatekey) } - data = io.StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(inner_path, data, ignore_same=False) assert "Invalid relative path" in str(err) diff --git a/src/Test/TestContentUser.py b/src/Test/TestContentUser.py index ff5ab76c..58b71df0 100644 --- a/src/Test/TestContentUser.py +++ b/src/Test/TestContentUser.py @@ -1,5 +1,5 @@ import json -from io import StringIO +import io import pytest @@ -91,7 +91,7 @@ class TestContentUser: data_dict = site.storage.loadJson(user_inner_path) users_content = site.content_manager.contents["data/users/content.json"] - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) # Test error on 15k data.json @@ -100,7 +100,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) assert "Include too large" in str(err) @@ -111,7 +111,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) def testVerify(self, site): @@ -120,7 +120,7 @@ class TestContentUser: data_dict = site.storage.loadJson(user_inner_path) users_content = site.content_manager.contents["data/users/content.json"] - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) # Test max size exception by setting allowed to 0 @@ -131,7 +131,7 @@ class TestContentUser: users_content["user_contents"]["permission_rules"][".*"]["max_size"] = 0 rules = site.content_manager.getRules(user_inner_path, data_dict) assert rules["max_size"] == 0 - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) @@ -145,7 +145,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) assert site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) # 100 MB gif = Not allowed @@ -154,7 +154,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) 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) @@ -166,7 +166,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) 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) @@ -178,7 +178,7 @@ class TestContentUser: data_dict["signs"] = { "1TeSTvb4w2PWE81S2rEELgmX2GCCExQGT": CryptBitcoin.sign(json.dumps(data_dict, sort_keys=True), privatekey) } - data = StringIO(json.dumps(data_dict)) + data = io.BytesIO(json.dumps(data_dict).encode()) with pytest.raises(VerifyError) as err: site.content_manager.verifyFile(user_inner_path, data, ignore_same=False) assert "Includes not allowed" in str(err) @@ -227,7 +227,7 @@ class TestContentUser: # Test user cert assert site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) # Test banned user @@ -236,7 +236,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Valid signs: 0/1" in str(err) del site.content_manager.contents["data/users/content.json"]["user_contents"]["permissions"][cert_user_id] # Reset @@ -251,7 +251,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Invalid cert" in str(err) @@ -270,7 +270,7 @@ class TestContentUser: } assert site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(user_content)), ignore_same=False + io.BytesIO(json.dumps(user_content).encode()), ignore_same=False ) def testMissingCert(self, site): @@ -297,7 +297,7 @@ class TestContentUser: assert site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) # Test invalid cert_user_id @@ -311,7 +311,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Invalid domain in cert_user_id" in str(err) @@ -328,7 +328,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Missing cert_user_id" in str(err) @@ -355,7 +355,7 @@ class TestContentUser: assert site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) # Cert does not matches the pattern @@ -364,7 +364,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Invalid cert signer: 14wgQ4VDDZNoRMFF4yCDuTrBSHmYhL3bet" in str(err) @@ -374,7 +374,7 @@ class TestContentUser: with pytest.raises(VerifyError) as err: site.content_manager.verifyFile( "data/users/1J6UrZMkarjVg5ax9W4qThir3BFUikbW6C/content.json", - StringIO(json.dumps(signed_content)), ignore_same=False + io.BytesIO(json.dumps(signed_content).encode()), ignore_same=False ) assert "Invalid cert signer: 14wgQ4VDDZNoRMFF4yCDuTrBSHmYhL3bet" in str(err) diff --git a/src/Test/TestDb.py b/src/Test/TestDb.py index 10777f2f..dda2ca20 100644 --- a/src/Test/TestDb.py +++ b/src/Test/TestDb.py @@ -103,14 +103,14 @@ class TestDb: def testUpdateJson(self, db): - f = io.StringIO() + f = io.BytesIO() f.write(""" { "test": [ {"test_id": 1, "title": "Test 1 title", "extra col": "Ignore it"} ] } - """) + """.encode()) f.seek(0) assert db.updateJson(db.db_dir + "data.json", f) is True assert db.execute("SELECT COUNT(*) AS num FROM test_importfilter").fetchone()["num"] == 1 @@ -129,4 +129,4 @@ class TestDb: f.seek(0) assert db.updateJson(db.db_dir + "data.json", f) is False assert db.execute("SELECT COUNT(*) AS num FROM test_importfilter").fetchone()["num"] == 0 - assert db.execute("SELECT COUNT(*) AS num FROM test").fetchone()["num"] == 0 \ No newline at end of file + assert db.execute("SELECT COUNT(*) AS num FROM test").fetchone()["num"] == 0 diff --git a/src/Test/TestMsgpack.py b/src/Test/TestMsgpack.py index 926c57ef..5a0b6d4d 100644 --- a/src/Test/TestMsgpack.py +++ b/src/Test/TestMsgpack.py @@ -6,14 +6,17 @@ import pytest from Config import config from util import Msgpack +from collections import OrderedDict class TestMsgpack: - test_data = {"cmd": "fileGet", "params": {"site": "1Site"}, "utf8": b'\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91'.decode("utf8"), "bin": b'p\x81zDhL\xf0O\xd0\xaf', "list": [b'p\x81zDhL\xf0O\xd0\xaf', b'p\x81zDhL\xf0O\xd0\xaf']} + test_data = OrderedDict( + sorted({"cmd": "fileGet", "bin": b'p\x81zDhL\xf0O\xd0\xaf', "params": {"site": "1Site"}, "utf8": b'\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91'.decode("utf8"), "list": [b'p\x81zDhL\xf0O\xd0\xaf', b'p\x81zDhL\xf0O\xd0\xaf']}.items()) + ) def testPacking(self): - assert Msgpack.pack(self.test_data) == b'\x85\xa3cmd\xa7fileGet\xa6params\x81\xa4site\xa51Site\xa4utf8\xad\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91\xa3bin\xc4\np\x81zDhL\xf0O\xd0\xaf\xa4list\x92\xc4\np\x81zDhL\xf0O\xd0\xaf\xc4\np\x81zDhL\xf0O\xd0\xaf' - assert Msgpack.pack(self.test_data, use_bin_type=False) == b'\x85\xa3cmd\xa7fileGet\xa6params\x81\xa4site\xa51Site\xa4utf8\xad\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91\xa3bin\xaap\x81zDhL\xf0O\xd0\xaf\xa4list\x92\xaap\x81zDhL\xf0O\xd0\xaf\xaap\x81zDhL\xf0O\xd0\xaf' + assert Msgpack.pack(self.test_data) == b'\x85\xa3bin\xc4\np\x81zDhL\xf0O\xd0\xaf\xa3cmd\xa7fileGet\xa4list\x92\xc4\np\x81zDhL\xf0O\xd0\xaf\xc4\np\x81zDhL\xf0O\xd0\xaf\xa6params\x81\xa4site\xa51Site\xa4utf8\xad\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91' + assert Msgpack.pack(self.test_data, use_bin_type=False) == b'\x85\xa3bin\xaap\x81zDhL\xf0O\xd0\xaf\xa3cmd\xa7fileGet\xa4list\x92\xaap\x81zDhL\xf0O\xd0\xaf\xaap\x81zDhL\xf0O\xd0\xaf\xa6params\x81\xa4site\xa51Site\xa4utf8\xad\xc3\xa1rv\xc3\xadzt\xc5\xb1r\xc5\x91' def testUnpackinkg(self): assert Msgpack.unpack(Msgpack.pack(self.test_data)) == self.test_data