import pytest from os import walk from os.path import join from viewstate import * class TestViewState(object): def test_blank(self): vs = ViewState() assert not vs.is_valid() def test_is_valid(self): for root, dirs, files in walk("tests/samples"): for f in files: with open(join(root, f), "r") as t: vs = ViewState(t.read()) assert vs.is_valid() is True def test_invalid_base64(self): with pytest.raises(ViewStateException): vs = ViewState("hello") def test_invalid_decode(self): with pytest.raises(ViewStateException): vs = ViewState(raw=b"\x01\x02") vs.decode() def test_no_signature(self): vs = ViewState(raw=b"\xff\x01e") vs.decode() assert vs.mac is None assert vs.signature is None def test_macs(self): MAC_LENGTHS = { "hmac_sha1": 20, "hmac_sha256": 32, "unknown": 5, # could be any other value } for mac, n in MAC_LENGTHS.items(): sig = b"\x55" * n # not a real signature, just testing length vs = ViewState(raw=b"\xff\x01d" + sig) vs.decode() assert vs.mac == mac assert vs.signature == sig