def test_extends(self): host = Record({ "host": IPv4Address(required=True), "time": DateTime(required=True), "data": SubRecord({}), "error": String() }) banner_grab = Record({"data": SubRecord({"banner": String()})}, extends=host) tls_banner_grab = Record({"data": SubRecord({"tls": SubRecord({})})}, extends=banner_grab) smtp_starttls = Record({"data": SubRecord({"ehlo": String()})}, extends=tls_banner_grab) valid = Record({ "host": IPv4Address(required=True), "time": DateTime(required=True), "data": SubRecord({ "banner": String(), "tls": SubRecord({}), "ehlo": String() }), "error": String() }) self.assertEqual(smtp_starttls.to_dict(), valid.to_dict())
def setUp(self): self.maxDiff = 10000 heartbleed = SubRecord( { # with explicit proto field indices "heartbeat_support": Boolean(pr_index=11), "heartbleed_vulnerable": Boolean(category="Vulnerabilities", pr_ignore=True), "timestamp": DateTime(pr_index=10) }, pr_index=77) self.host = Record({ "ipstr": IPv4Address(required=True, examples=["8.8.8.8"], pr_index=1), "ip": Unsigned32BitInteger(doc="The IP Address of the host", pr_index=2), Port(443): SubRecord({ "tls": String(pr_index=1), "heartbleed": heartbleed }, category="heartbleed", pr_index=3), "tags": ListOf(String(), pr_index=47) })
def test_parses_ipv4_records(self): ipv4_host_ssh = Record({ Port(22): SubRecord({ "ssh": SubRecord({ "banner": SubRecord({ "comment": String(), "timestamp": DateTime() }) }) }) }) ipv4_host_ssh.validate(json_fixture('ipv4-ssh-record'))
def test_subrecord_type_override(self): SSH = SubRecordType( { "banner": SubRecord({ "comment": String(), "timestamp": DateTime() }) }, doc="class doc", required=False) self.assertEqual(SSH.DOC, "class doc") self.assertEqual(SSH.REQUIRED, False) ssh = SSH(doc="instance doc", required=True) ipv4_host_ssh = Record({Port(22): SubRecord({"ssh": ssh})}) self.assertEqual(ssh.doc, "instance doc") self.assertEqual(ssh.required, True) ipv4_host_ssh.validate(json_fixture('ipv4-ssh-record')) # class unchanged self.assertEqual(SSH.DOC, "class doc") self.assertEqual(SSH.REQUIRED, False)
def test_datetime_DateTime(self): DateTimeRecord = DateTime(validation_policy="error") DateTimeRecord.validate("fake", datetime.datetime.now()) DateTimeRecord.validate("fake", "Wed Dec 5 01:23:45 CST 1956") DateTimeRecord.validate("fake", 116048701)
from zschema.keys import Port from zschema.compounds import ListOf, Record, SubRecord from zschema.leaves import Boolean, DateTime, IPv4Address, String, Unsigned32BitInteger heartbleed = SubRecord({ "heartbeat_support": Boolean(), "heartbleed_vulnerable": Boolean(), "timestamp": DateTime() }) host = Record({ "ipstr": IPv4Address(required=True), "ip": Unsigned32BitInteger(), Port(443): SubRecord({ "tls": String(), "heartbleed": heartbleed }), "tags": ListOf(String()) })