def test_type_stor_info(self): tlib = s_types.TypeLib() self.assertRaises(BadStorValu, tlib.addSubType, 'fake:newp', 'comp', fields=())
def test_type_comp_err(self): tlib = s_types.TypeLib() self.assertRaises(BadInfoValu, tlib.addSubType, 'fake:newp', 'comp', fields='asdfqwer')
def test_datatype_inet_port(self): tlib = s_types.TypeLib() self.raises(BadTypeValu, tlib.getTypeParse, 'inet:port', '70000') self.raises(BadTypeValu, tlib.getTypeNorm, 'inet:port', 0xffffffff) self.eq(tlib.getTypeNorm('inet:port', 20)[0], 20)
def test_datatype_bool(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeParse, 'bool', 'bogus') self.assertTrue(tlib.getTypeParse('bool', '1')) self.assertTrue(tlib.getTypeParse('bool', 't')) self.assertTrue(tlib.getTypeParse('bool', 'y')) self.assertTrue(tlib.getTypeParse('bool', 'TrUe')) self.assertTrue(tlib.getTypeParse('bool', 'yEs')) self.assertTrue(tlib.getTypeParse('bool', 'ON')) self.assertFalse(tlib.getTypeParse('bool', '0')) self.assertFalse(tlib.getTypeParse('bool', 'f')) self.assertFalse(tlib.getTypeParse('bool', 'n')) self.assertFalse(tlib.getTypeParse('bool', 'FaLsE')) self.assertFalse(tlib.getTypeParse('bool', 'nO')) self.assertFalse(tlib.getTypeParse('bool', 'OFF')) self.assertEqual(tlib.getTypeRepr('bool', 1), 'True') self.assertEqual(tlib.getTypeRepr('bool', 0), 'False') self.assertEqual(tlib.getTypeNorm('bool', 9), 1) self.assertEqual(tlib.getTypeNorm('bool', 0), 0) self.assertEqual(tlib.getTypeFrob('bool', 9), 1) self.assertFalse(tlib.getTypeFrob('bool', 'f')) self.assertFalse(tlib.getTypeFrob('bool', 'n')) self.assertFalse(tlib.getTypeFrob('bool', 'FaLsE'))
def test_datatype_str_hex(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'str:hex', 0xFFF) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'str:hex', '0xFFF') self.eq(tlib.getTypeNorm('str:hex', 'FfF')[0], 'fff') self.eq(tlib.getTypeNorm('str:hex', '12345')[0], '12345') self.eq(tlib.getTypeNorm('str:hex', '12A45')[0], '12a45') self.none(tlib.getTypeFrob('str:hex', '0xFFF')[0]) self.eq(tlib.getTypeFrob('str:hex', 0xFfF)[0], 'fff') self.eq(tlib.getTypeFrob('str:hex', 'FFF')[0], 'fff') self.eq(tlib.getTypeFrob('str:hex', '1A2b3C')[0], '1a2b3c') self.eq(tlib.getTypeFrob('str:hex', 0x1A2b3C)[0], '1a2b3c') self.eq(tlib.getTypeFrob('str:hex', '12345')[0], '12345') # already str self.eq(tlib.getTypeFrob('str:hex', 12345)[0], '3039') self.assertRaises(BadTypeValu, tlib.getTypeParse, 'str:hex', '0xFFF') self.assertRaises(BadTypeValu, tlib.getTypeParse, 'str:hex', 0xFFF) self.assertRaises(BadTypeValu, tlib.getTypeParse, 'str:hex', 123) self.eq(tlib.getTypeParse('str:hex', '10001')[0], '10001') self.eq(tlib.getTypeParse('str:hex', 'FFF')[0], 'fff') tlib.addType('woot', subof='sepr', sep='/', fields='a,str:hex|b,str:hex') self.eq(tlib.getTypeFrob('woot', 'AAA/BBB')[0], 'aaa/bbb') self.eq(tlib.getTypeFrob('woot', '123456/BBB')[0], '123456/bbb') # already str self.eq(tlib.getTypeFrob('woot', (123456, 'BBB'))[0], '1e240/bbb') self.assertRaises(BadTypeValu, tlib.getTypeParse, 'woot', '123x/aaaa') self.assertRaises(BadTypeValu, tlib.getTypeParse, 'woot', '0x123/aaaa')
def test_datatype_bool(self): tlib = s_types.TypeLib() self.raises(BadTypeValu, tlib.getTypeParse, 'bool', 'bogus') self.true(tlib.getTypeParse('bool', '1')[0]) self.true(tlib.getTypeParse('bool', 't')[0]) self.true(tlib.getTypeParse('bool', 'y')[0]) self.true(tlib.getTypeParse('bool', 'TrUe')[0]) self.true(tlib.getTypeParse('bool', 'yEs')[0]) self.true(tlib.getTypeParse('bool', 'ON')[0]) self.false(tlib.getTypeParse('bool', '0')[0]) self.false(tlib.getTypeParse('bool', 'f')[0]) self.false(tlib.getTypeParse('bool', 'n')[0]) self.false(tlib.getTypeParse('bool', 'FaLsE')[0]) self.false(tlib.getTypeParse('bool', 'nO')[0]) self.false(tlib.getTypeParse('bool', 'OFF')[0]) self.eq(tlib.getTypeRepr('bool', 1), 'True') self.eq(tlib.getTypeRepr('bool', 0), 'False') self.eq(tlib.getTypeNorm('bool', 9)[0], 1) self.eq(tlib.getTypeNorm('bool', 0)[0], 0) self.eq(tlib.getTypeNorm('bool', 9)[0], 1) self.false(tlib.getTypeNorm('bool', 'f')[0]) self.false(tlib.getTypeNorm('bool', 'n')[0]) self.false(tlib.getTypeNorm('bool', 'FaLsE')[0])
def test_datatype_inet_url(self): tlib = s_types.TypeLib() self.raises(BadTypeValu, tlib.getTypeNorm, 'inet:url', 'newp') self.eq( tlib.getTypeNorm('inet:url', 'http://WoOt.com/HeHe')[0], 'http://woot.com/HeHe') self.eq( tlib.getTypeNorm('inet:url', 'HTTP://WoOt.com/HeHe')[0], 'http://woot.com/HeHe') self.eq( tlib.getTypeNorm('inet:url', 'HttP://*****:*****@WoOt.com/HeHe&foo=10')[0], 'http://*****:*****@woot.com/HeHe&foo=10') self.raises(BadTypeValu, tlib.getTypeParse, 'inet:url', 'newp') self.eq( tlib.getTypeParse('inet:url', 'http://WoOt.com/HeHe')[0], 'http://woot.com/HeHe') self.eq( tlib.getTypeParse('inet:url', 'HTTP://WoOt.com/HeHe')[0], 'http://woot.com/HeHe') self.eq( tlib.getTypeParse('inet:url', 'HttP://*****:*****@WoOt.com/HeHe&foo=10')[0], 'http://*****:*****@woot.com/HeHe&foo=10') self.eq(tlib.getTypeRepr('inet:url', 'http://woot.com/HeHe'), 'http://woot.com/HeHe')
def test_datatype_str(self): tlib = s_types.TypeLib() self.raises(BadTypeValu, tlib.getTypeNorm, 'str', 10) self.eq(tlib.getTypeNorm('str', 'foo')[0], 'foo') self.eq(tlib.getTypeParse('str', 'bar')[0], 'bar')
def test_type_comp(self): tlib = s_types.TypeLib() tlib.addType('foo:bar', subof='comp', fields='hehe=inet:fqdn,haha=inet:ipv4', optfields="time=time") valu, subs = tlib.getTypeNorm('foo:bar', ('WOOT.COM', 0x01020304)) self.eq(valu, '47e2e1c0f894266153f836a75440f803') self.eq(subs.get('hehe'), 'woot.com') self.eq(subs.get('haha'), 0x01020304) self.none(subs.get('time')) valu1, subs = tlib.getTypeNorm('foo:bar', ('WOOT.COM', 0x01020304, ('time', '20170101'))) self.eq(valu1, 'f34a0c6ed2d91772b4790f4da1d2c0d6') self.eq(subs.get('hehe'), 'woot.com') self.eq(subs.get('haha'), 0x01020304) self.eq(subs.get('time'), 1483228800000) val2, sub2 = tlib.getTypeNorm('foo:bar', {'hehe': 'WOOT.COM', 'haha': 0x01020304}) self.eq(valu, val2) self.raises(BadTypeValu, tlib.getTypeNorm, 'foo:bar', {}) val3, sub3 = tlib.getTypeNorm('foo:bar', {'hehe': 'WOOT.COM', 'haha': 0x01020304, 'time': '20170101'}) self.eq(valu1, val3) self.eq(subs, sub3) self.raises(BadTypeValu, tlib.getTypeNorm, 'foo:bar', set([1, 2]))
def test_type_sepr_parse(self): tlib = s_types.TypeLib() tlib.addType('woot', subof='sepr', sep='/', fields='a,str:hex|b,str:hex') self.eq(tlib.getTypeParse('woot', '12345/67890')[0], '12345/67890')
def test_datatype_inet_ipv6(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeParse, 'inet:ipv6', 'newp' ) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:srv6', 'newp' ) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:srv6', '[fffffffffffffffffffffffff::2]:80' ) self.eq( tlib.getTypeParse('inet:ipv6', 'AF:00::02')[0], 'af::2') self.eq( tlib.getTypeNorm('inet:ipv6', 'AF:00::02')[0], 'af::2') self.eq( tlib.getTypeRepr('inet:ipv6', 'af::2'), 'af::2') self.eq( tlib.getTypeNorm('inet:ipv6', '2001:db8::1:1:1:1:1')[0], '2001:db8:0:1:1:1:1:1') self.eq( tlib.getTypeNorm('inet:ipv6', '2001:db8:0:1:1:1:1:1')[0], '2001:db8:0:1:1:1:1:1') self.eq( tlib.getTypeFrob('inet:ipv6', '2001:db8::1:1:1:1:1')[0], '2001:db8:0:1:1:1:1:1') self.eq( tlib.getTypeNorm('inet:ipv6', '2001:db8::0:1')[0], '2001:db8::1') self.eq( tlib.getTypeNorm('inet:ipv6', '2001:db8:0:0:0:0:2:1')[0], '2001:db8::2:1') self.eq( tlib.getTypeNorm('inet:ipv6', '2001:db8::')[0], '2001:db8::') self.eq( tlib.getTypeRepr('inet:srv6', '[af::2]:80'), '[af::2]:80') self.eq( tlib.getTypeParse('inet:srv6', '[AF:00::02]:80')[0], '[af::2]:80') self.eq( tlib.getTypeNorm('inet:srv6', '[AF:00::02]:80')[0], '[af::2]:80') self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:srv6', '[AF:00::02]:999999') self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:srv6', '[AF:00::02]:-1')
def test_type_sepr_reverse(self): tlib = s_types.TypeLib() tlib.addType('foo',subof='sepr',sep='/',fields='first,str:lwr|rest,str:lwr',reverse=1) foo = tlib.getTypeNorm('foo','/home/user/Downloads') self.eq( foo[1].get('first'), '/home/user' ) self.eq( foo[1].get('rest'), 'downloads' )
def test_datatype_int(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeNorm('int', 1), (1, {})) self.eq(tlib.getTypeNorm('int', -1), (-1, {})) self.eq(tlib.getTypeNorm('int', 0), (0, {})) self.eq(tlib.getTypeNorm('int', '1'), (1, {})) self.eq(tlib.getTypeNorm('int', '0x01'), (1, {})) self.eq(tlib.getTypeNorm('int', '-1'), (-1, {})) self.eq(tlib.getTypeNorm('int', '0'), (0, {})) # Bound checking self.eq(tlib.getTypeNorm('int', -9223372036854775808), (-9223372036854775808, {})) self.eq(tlib.getTypeNorm('int', 9223372036854775807), (9223372036854775807, {})) self.raises(BadTypeValu, tlib.getTypeNorm, 'int', 'hehe') self.raises(BadTypeValu, tlib.getTypeNorm, 'int', 'one') self.raises(BadTypeValu, tlib.getTypeNorm, 'int', 'one') self.raises(BadTypeValu, tlib.getTypeNorm, 'int', 1.0) self.raises(BadTypeValu, tlib.getTypeNorm, 'int', '1.0') self.raises(BadTypeValu, tlib.getTypeNorm, 'int', {}) self.raises(BadTypeValu, tlib.getTypeNorm, 'int', []) self.raises(BadTypeValu, tlib.getTypeNorm, 'int', -9223372036854775809) self.raises(BadTypeValu, tlib.getTypeNorm, 'int', 9223372036854775808)
def test_datatype_inet_ipv4(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeNorm('inet:ipv4', 0x01020304)[0], 0x01020304) self.eq(tlib.getTypeNorm('inet:ipv4', '0x01020304')[0], 0x01020304) self.eq(tlib.getTypeParse('inet:ipv4', '1.2.3.4')[0], 0x01020304) self.eq(tlib.getTypeRepr('inet:ipv4', 0x01020304), '1.2.3.4')
def test_datatype_basics(self): tlib = s_types.TypeLib() self.assertTrue( isinstance(tlib.getDataType('inet:url'), s_types.DataType) ) self.assertIsNone( tlib.getDataType('newp') ) self.assertRaises( NoSuchType, tlib.reqDataType, 'newp' )
def test_types_perm(self): tlib = s_types.TypeLib() self.raises(BadTypeValu, tlib.getTypeNorm, 'syn:perm', 'foo bar baz') self.raises(BadTypeValu, tlib.getTypeNorm, 'syn:perm', 'foo bar=(bar,baz)') tlib.getTypeNorm('syn:perm', 'foo:bar baz=faz') tlib.getTypeNorm('syn:perm', 'foo:bar baz=faz hehe=haha')
def test_datatype_fqdn(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeNorm('inet:fqdn', 'WOOT.COM')[0], 'woot.com') self.eq(tlib.getTypeNorm('inet:fqdn', 'WO-OT.COM')[0], 'wo-ot.com') self.eq(tlib.getTypeParse('inet:fqdn', 'WOOT.COM')[0], 'woot.com') self.eq(tlib.getTypeParse('inet:fqdn', 'WO-OT.COM')[0], 'wo-ot.com')
def test_type_comp(self): tlib = s_types.TypeLib() tlib.addType('inet:foo:a',subof='comp',fields='fqdn,inet:fqdn|ipv4,inet:ipv4|time,time:epoch') jstext = '["wOOt.com","1.2.3.4","20160204080030"]' rawobj = ["wOOt.com","1.2.3.4","20160204080030"] b64t,_ = tlib.getTypeParse('inet:foo:a',jstext) epoc,_ = tlib.getTypeParse('time:epoch','20160204080030') item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) b64t,_ = tlib.getTypeParse('inet:foo:a',rawobj) item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) b64t,_ = tlib.getTypeNorm('inet:foo:a',('wOOt.com',0x01020304,epoc)) item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) b64t,_ = tlib.getTypeFrob('inet:foo:a',('wOOt.com',0x01020304,epoc)) item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) b64t,_ = tlib.getTypeNorm('inet:foo:a',b64t) item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) b64t,_ = tlib.getTypeFrob('inet:foo:a',b64t) item = msgunpack(base64.b64decode(b64t.encode('utf8'))) self.assertEqual(item[0], 'woot.com') self.assertEqual(item[1], 0x01020304) self.assertEqual(item[2], epoc) rept = tlib.getTypeRepr('inet:foo:a',b64t) self.assertEqual( rept, '["woot.com","1.2.3.4","2016/02/04 08:00:30"]')
def test_datatype_int_repr(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeRepr('int', -1), '-1') self.eq(tlib.getTypeRepr('int', 1), '1') tlib.addType('woot:min', subof='int', ismin=1) self.eq(tlib.getTypeRepr('woot:min', 1), '1')
def test_datatype_inet_cidr(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:cidr4', '1.2.3.0/33' ) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:cidr4', '1.2.3.0/-1' ) self.eq( tlib.getTypeNorm('inet:cidr4', '1.2.3.0/24'), ('1.2.3.0/24', {'ipv4':16909056, 'mask':24}) ) self.eq( tlib.getTypeRepr('inet:cidr4', '1.2.3.0/24'), '1.2.3.0/24')
def test_type_comp_chop(self): tlib = s_types.TypeLib() tlib.addSubType('fake:newp', 'comp', fields='fqdn,inet:fqdn|email,inet:email') norm, subs = tlib.getTypeChop('fake:newp', ('woot.com', '*****@*****.**'))
def test_type_json(self): tlib = s_types.TypeLib() self.eq( tlib.getTypeNorm('json','{ "woot" :10}')[0], '{"woot":10}' ) self.eq( tlib.getTypeFrob('json',{'woot':10})[0], '{"woot":10}' ) self.eq( tlib.getTypeParse('json','{"woot":10}')[0], '{"woot":10}' ) # cant frob json string unless it's valid json... ( can't tell the difference ) self.none(tlib.getTypeFrob('json', 'derp' )[0]) self.assertRaises( BadTypeValu, tlib.getTypeParse, 'json', {'woot':10} )
def test_type_json(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeNorm('json', '{ "woot" :10}')[0], '{"woot":10}') self.eq(tlib.getTypeNorm('json', {'woot': 10})[0], '{"woot":10}') self.eq(tlib.getTypeNorm('json', {'hehe': 1, 'foo': 'bar'}), ('{"foo":"bar","hehe":1}', {})) self.eq(tlib.getTypeParse('json', '{"woot":10}')[0], '{"woot":10}') self.raises(BadTypeValu, tlib.getTypeNorm, 'json', {'hehe', 'haha'}) self.raises(BadTypeValu, tlib.getTypeNorm, 'json', 'Wow"wow')
def test_type_sepr(self): tlib = s_types.TypeLib() tlib.addType('siteuser', subof='sepr', sep='/', fields='foo,inet:fqdn|bar,inet:user') self.eq( tlib.getTypeNorm('siteuser','WOOT.COM/visi')[0], 'woot.com/visi' ) self.eq( tlib.getTypeParse('siteuser','WOOT.COM/visi')[0], 'woot.com/visi' ) norm,subs = tlib.getTypeNorm('siteuser','WOOT.COM/Visi') self.eq(subs.get('foo'),'woot.com') self.eq(subs.get('bar'),'Visi')
def test_datatype_inet_udp4(self): tlib = s_types.TypeLib() self.eq(tlib.getTypeNorm('inet:udp4', 0x010203040002), 0x010203040002) self.assertRaises(BadTypeValu, tlib.getTypeParse, 'inet:udp4', 'newp') self.eq(tlib.getTypeParse('inet:udp4', '1.2.3.4:2'), 0x010203040002) self.eq(tlib.getTypeRepr('inet:udp4', 0x010203040002), '1.2.3.4:2')
def test_type_phone(self): tlib = s_types.TypeLib() prop = 'tel:phone' self.eq(tlib.getTypeNorm(prop, 1234567890)[0], 1234567890) self.eq(tlib.getTypeParse(prop, '123 456 7890')[0], 1234567890) self.eq(tlib.getTypeRepr(prop, 12345678901), '+1 (234) 567-8901') self.eq(tlib.getTypeRepr(prop, 9999999999), '+9999999999')
def test_datatype_hash_md5(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeParse, 'hash:md5', 'newp' ) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'hash:md5', 'newp' ) self.eq( tlib.getTypeParse('hash:md5', '000102030405060708090A0B0C0D0E0F')[0], '000102030405060708090a0b0c0d0e0f') self.eq( tlib.getTypeNorm('hash:md5', '000102030405060708090A0B0C0D0E0F')[0], '000102030405060708090a0b0c0d0e0f') self.eq( tlib.getTypeFrob('hash:md5', '000102030405060708090A0B0C0D0E0F')[0], '000102030405060708090a0b0c0d0e0f') self.eq( tlib.getTypeRepr('hash:md5', '000102030405060708090a0b0c0d0e0f'), '000102030405060708090a0b0c0d0e0f')
def test_datatype_inet_mac(self): tlib = s_types.TypeLib() self.assertRaises(BadTypeValu, tlib.getTypeParse, 'inet:mac', 'newp' ) self.assertRaises(BadTypeValu, tlib.getTypeNorm, 'inet:mac', 'newp' ) self.eq( tlib.getTypeFrob('inet:mac', 'FF:FF:FF:FF:FF:FF')[0], 'ff:ff:ff:ff:ff:ff' ) self.eq( tlib.getTypeNorm('inet:mac', 'FF:FF:FF:FF:FF:FF')[0], 'ff:ff:ff:ff:ff:ff' ) self.eq( tlib.getTypeParse('inet:mac', 'FF:FF:FF:FF:FF:FF')[0], 'ff:ff:ff:ff:ff:ff' ) self.eq( tlib.getTypeRepr('inet:mac', 'ff:ff:ff:ff:ff:ff'), 'ff:ff:ff:ff:ff:ff' )
def test_datatype_str_enums(self): tlib = s_types.TypeLib() tlib.addType('woot', subof='str', enums='hehe,haha,hoho', lower=1) self.raises(BadTypeValu, tlib.getTypeNorm, 'woot', 'asdf') self.raises(BadTypeValu, tlib.getTypeParse, 'woot', 'asdf') self.eq(tlib.getTypeNorm('woot', 'HeHe')[0], 'hehe') self.eq(tlib.getTypeParse('woot', 'HeHe')[0], 'hehe')
def test_type_comp(self): tlib = s_types.TypeLib() tlib.addType('foo:bar', subof='comp', fields='hehe=inet:fqdn,haha=inet:ipv4') valu, subs = tlib.getTypeNorm('foo:bar', ('WOOT.COM', 0x01020304)) self.eq(valu, '47e2e1c0f894266153f836a75440f803') self.eq(subs.get('hehe'), 'woot.com') self.eq(subs.get('haha'), 0x01020304)