synapse 2.171.0__py311-none-any.whl → 2.172.0__py311-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synapse might be problematic. Click here for more details.
- synapse/common.py +20 -0
- synapse/cortex.py +86 -4
- synapse/lib/agenda.py +13 -7
- synapse/lib/ast.py +9 -8
- synapse/lib/cache.py +2 -2
- synapse/lib/cell.py +5 -0
- synapse/lib/coro.py +12 -0
- synapse/lib/layer.py +124 -84
- synapse/lib/lmdbslab.py +17 -10
- synapse/lib/node.py +1 -1
- synapse/lib/slabseqn.py +11 -5
- synapse/lib/storm.py +7 -71
- synapse/lib/stormhttp.py +1 -1
- synapse/lib/stormlib/auth.py +19 -0
- synapse/lib/stormlib/cell.py +42 -4
- synapse/lib/stormlib/compression.py +6 -6
- synapse/lib/stormlib/env.py +50 -0
- synapse/lib/stormlib/gen.py +1 -1
- synapse/lib/stormlib/model.py +1 -1
- synapse/lib/stormtypes.py +35 -11
- synapse/lib/types.py +6 -6
- synapse/lib/version.py +2 -2
- synapse/lib/view.py +6 -12
- synapse/models/base.py +13 -0
- synapse/models/biz.py +14 -0
- synapse/models/economic.py +3 -0
- synapse/models/inet.py +474 -4
- synapse/models/infotech.py +163 -22
- synapse/models/orgs.py +17 -0
- synapse/models/risk.py +15 -1
- synapse/models/transport.py +1 -1
- synapse/tests/test_common.py +15 -0
- synapse/tests/test_lib_ast.py +2 -1
- synapse/tests/test_lib_layer.py +168 -59
- synapse/tests/test_lib_lmdbslab.py +13 -0
- synapse/tests/test_lib_stormlib_auth.py +22 -0
- synapse/tests/test_lib_stormlib_cell.py +47 -0
- synapse/tests/test_lib_stormlib_env.py +25 -0
- synapse/tests/test_lib_view.py +9 -9
- synapse/tests/test_model_base.py +5 -3
- synapse/tests/test_model_economic.py +4 -0
- synapse/tests/test_model_inet.py +405 -1
- synapse/tests/test_model_infotech.py +135 -3
- synapse/tests/test_model_orgs.py +6 -0
- synapse/tests/test_model_risk.py +8 -0
- synapse/tests/test_tools_storm.py +46 -8
- synapse/tools/storm.py +14 -6
- {synapse-2.171.0.dist-info → synapse-2.172.0.dist-info}/METADATA +1 -1
- {synapse-2.171.0.dist-info → synapse-2.172.0.dist-info}/RECORD +52 -50
- {synapse-2.171.0.dist-info → synapse-2.172.0.dist-info}/WHEEL +1 -1
- {synapse-2.171.0.dist-info → synapse-2.172.0.dist-info}/LICENSE +0 -0
- {synapse-2.171.0.dist-info → synapse-2.172.0.dist-info}/top_level.txt +0 -0
synapse/tests/test_lib_layer.py
CHANGED
|
@@ -4,11 +4,14 @@ import asyncio
|
|
|
4
4
|
|
|
5
5
|
import synapse.exc as s_exc
|
|
6
6
|
import synapse.common as s_common
|
|
7
|
+
import synapse.cortex as s_cortex
|
|
7
8
|
import synapse.telepath as s_telepath
|
|
8
9
|
|
|
9
10
|
import synapse.lib.time as s_time
|
|
10
11
|
import synapse.lib.layer as s_layer
|
|
11
12
|
import synapse.lib.msgpack as s_msgpack
|
|
13
|
+
import synapse.lib.spooled as s_spooled
|
|
14
|
+
import synapse.lib.hiveauth as s_hiveauth
|
|
12
15
|
|
|
13
16
|
import synapse.tools.backup as s_tools_backup
|
|
14
17
|
|
|
@@ -16,6 +19,8 @@ import synapse.tests.utils as s_t_utils
|
|
|
16
19
|
|
|
17
20
|
from synapse.tests.utils import alist
|
|
18
21
|
|
|
22
|
+
from unittest import mock
|
|
23
|
+
|
|
19
24
|
async def iterPropForm(self, form=None, prop=None):
|
|
20
25
|
bad_valu = [(b'foo', "bar"), (b'bar', ('bar',)), (b'biz', 4965), (b'baz', (0, 56))]
|
|
21
26
|
bad_valu += [(b'boz', 'boz')] * 10
|
|
@@ -1014,6 +1019,20 @@ class LayerTest(s_t_utils.SynTest):
|
|
|
1014
1019
|
if offs == layr.nodeeditlog.index() - 1:
|
|
1015
1020
|
break
|
|
1016
1021
|
|
|
1022
|
+
fwdedits = [item async for item in core0.getLayer().syncNodeEdits(0, wait=False)]
|
|
1023
|
+
revedits = [item async for item in core0.getLayer().syncNodeEdits(0xffffffff, wait=False, reverse=True)]
|
|
1024
|
+
|
|
1025
|
+
self.eq(fwdedits, list(reversed(revedits)))
|
|
1026
|
+
|
|
1027
|
+
fwdedit = await core0.callStorm('for $item in $lib.layer.get().edits() { return($item) }')
|
|
1028
|
+
revedit = await core0.callStorm('for $item in $lib.layer.get().edits(reverse=(true)) { return($item) }')
|
|
1029
|
+
|
|
1030
|
+
self.nn(await core0.callStorm('return($lib.layer.get().edited())'))
|
|
1031
|
+
|
|
1032
|
+
self.ne(fwdedit, revedit)
|
|
1033
|
+
self.eq(fwdedits[0], fwdedit)
|
|
1034
|
+
self.eq(revedits[0], revedit)
|
|
1035
|
+
|
|
1017
1036
|
async with self.getTestCore() as core1:
|
|
1018
1037
|
|
|
1019
1038
|
url = core1.getLocalUrl('*/layer')
|
|
@@ -1897,74 +1916,164 @@ class LayerTest(s_t_utils.SynTest):
|
|
|
1897
1916
|
|
|
1898
1917
|
async def test_layer_edit_perms(self):
|
|
1899
1918
|
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
$lyr = $lib.layer.add()
|
|
1904
|
-
$view = $lib.view.add(($lyr.iden,))
|
|
1905
|
-
return($view.iden)
|
|
1906
|
-
''')
|
|
1919
|
+
class Dict(s_spooled.Dict):
|
|
1920
|
+
async def __anit__(self, dirn=None, size=1, cell=None):
|
|
1921
|
+
await super().__anit__(dirn=dirn, size=size, cell=cell)
|
|
1907
1922
|
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
await core.addTagProp('score', ('int', {}), {})
|
|
1923
|
+
with mock.patch('synapse.lib.spooled.Dict', Dict):
|
|
1924
|
+
async with self.getTestCore() as core:
|
|
1911
1925
|
|
|
1912
|
-
|
|
1926
|
+
user = await core.auth.addUser('blackout@vertex.link')
|
|
1913
1927
|
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
<(refs)+ { test:str=bar }
|
|
1920
|
-
]
|
|
1921
|
-
$node.data.set(foo, bar)
|
|
1922
|
-
''', opts=opts)
|
|
1923
|
-
|
|
1924
|
-
await core.nodes('''
|
|
1925
|
-
test:str=foo
|
|
1926
|
-
[ <(refs)- { test:str=bar } ]
|
|
1927
|
-
$node.data.pop(foo)
|
|
1928
|
-
| delnode
|
|
1929
|
-
''', opts=opts)
|
|
1930
|
-
|
|
1931
|
-
layr = core.views[viewiden].layers[0]
|
|
1932
|
-
|
|
1933
|
-
nodeedits = []
|
|
1934
|
-
async for _, edits, _ in layr.iterNodeEditLog():
|
|
1935
|
-
nodeedits.extend(edits)
|
|
1936
|
-
|
|
1937
|
-
perms = [perm for permoffs, perm in s_layer.getNodeEditPerms(nodeedits)]
|
|
1938
|
-
|
|
1939
|
-
self.eq({
|
|
1940
|
-
('node', 'add', 'test:str'),
|
|
1941
|
-
('node', 'del', 'test:str'),
|
|
1942
|
-
|
|
1943
|
-
('node', 'add', 'syn:tag'),
|
|
1944
|
-
|
|
1945
|
-
('node', 'prop', 'set', 'test:str:.created'),
|
|
1946
|
-
('node', 'prop', 'del', 'test:str:.created'),
|
|
1928
|
+
viewiden = await core.callStorm('''
|
|
1929
|
+
$lyr = $lib.layer.add()
|
|
1930
|
+
$view = $lib.view.add(($lyr.iden,))
|
|
1931
|
+
return($view.iden)
|
|
1932
|
+
''')
|
|
1947
1933
|
|
|
1948
|
-
|
|
1949
|
-
('node', 'prop', 'del', 'test:str:hehe'),
|
|
1934
|
+
layr = core.views[viewiden].layers[0]
|
|
1950
1935
|
|
|
1951
|
-
|
|
1952
|
-
('node', 'prop', 'set', 'syn:tag:base'),
|
|
1953
|
-
('node', 'prop', 'set', 'syn:tag:depth'),
|
|
1954
|
-
('node', 'prop', 'set', 'syn:tag:.created'),
|
|
1936
|
+
opts = {'view': viewiden}
|
|
1955
1937
|
|
|
1956
|
-
('
|
|
1957
|
-
('node', 'tag', 'del', 'foo'),
|
|
1938
|
+
await core.addTagProp('score', ('int', {}), {})
|
|
1958
1939
|
|
|
1959
|
-
('
|
|
1960
|
-
('node', 'tag', 'del', 'foo', 'bar'),
|
|
1940
|
+
await core.nodes('[ test:str=bar +#foo.bar ]', opts=opts)
|
|
1961
1941
|
|
|
1962
|
-
('
|
|
1963
|
-
|
|
1942
|
+
await core.nodes('''
|
|
1943
|
+
[ test:str=foo
|
|
1944
|
+
:hehe=bar
|
|
1945
|
+
+#foo:score=2
|
|
1946
|
+
+#foo.bar.baz
|
|
1947
|
+
+#bar:score=2
|
|
1948
|
+
<(refs)+ { test:str=bar }
|
|
1949
|
+
]
|
|
1950
|
+
$node.data.set(foo, bar)
|
|
1951
|
+
''', opts=opts)
|
|
1952
|
+
|
|
1953
|
+
parent = core.view.layers[0]
|
|
1954
|
+
|
|
1955
|
+
seen = set()
|
|
1956
|
+
def confirm(self, perm, default=None, gateiden=None):
|
|
1957
|
+
seen.add(perm)
|
|
1958
|
+
return True
|
|
1959
|
+
|
|
1960
|
+
def confirmPropSet(self, user, prop, layriden):
|
|
1961
|
+
seen.add(prop.setperms[0])
|
|
1962
|
+
seen.add(prop.setperms[1])
|
|
1963
|
+
|
|
1964
|
+
def confirmPropDel(self, user, prop, layriden):
|
|
1965
|
+
seen.add(prop.delperms[0])
|
|
1966
|
+
seen.add(prop.delperms[1])
|
|
1967
|
+
|
|
1968
|
+
with mock.patch.object(s_hiveauth.HiveUser, 'confirm', confirm):
|
|
1969
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropSet', confirmPropSet):
|
|
1970
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropDel', confirmPropDel):
|
|
1971
|
+
await layr.confirmLayerEditPerms(user, parent.iden)
|
|
1972
|
+
|
|
1973
|
+
self.eq(seen, {
|
|
1974
|
+
# Node add
|
|
1975
|
+
('node', 'add', 'syn:tag'),
|
|
1976
|
+
('node', 'add', 'test:str'),
|
|
1977
|
+
|
|
1978
|
+
# Old style prop set
|
|
1979
|
+
('node', 'prop', 'set', 'test:str:hehe'),
|
|
1980
|
+
('node', 'prop', 'set', 'test:str.created'),
|
|
1981
|
+
|
|
1982
|
+
('node', 'prop', 'set', 'syn:tag:up'),
|
|
1983
|
+
('node', 'prop', 'set', 'syn:tag:base'),
|
|
1984
|
+
('node', 'prop', 'set', 'syn:tag:depth'),
|
|
1985
|
+
('node', 'prop', 'set', 'syn:tag.created'),
|
|
1986
|
+
|
|
1987
|
+
# New style prop set
|
|
1988
|
+
('node', 'prop', 'set', 'test:str', 'hehe'),
|
|
1989
|
+
('node', 'prop', 'set', 'test:str', '.created'),
|
|
1990
|
+
|
|
1991
|
+
('node', 'prop', 'set', 'syn:tag', 'up'),
|
|
1992
|
+
('node', 'prop', 'set', 'syn:tag', 'base'),
|
|
1993
|
+
('node', 'prop', 'set', 'syn:tag', 'depth'),
|
|
1994
|
+
('node', 'prop', 'set', 'syn:tag', '.created'),
|
|
1995
|
+
|
|
1996
|
+
# Tag/tagprop add
|
|
1997
|
+
('node', 'tag', 'add', 'foo'),
|
|
1998
|
+
('node', 'tag', 'add', 'bar'),
|
|
1999
|
+
('node', 'tag', 'add', 'foo', 'bar'),
|
|
2000
|
+
('node', 'tag', 'add', 'foo', 'bar', 'baz'),
|
|
2001
|
+
|
|
2002
|
+
# Nodedata set
|
|
2003
|
+
('node', 'data', 'set', 'foo'),
|
|
2004
|
+
|
|
2005
|
+
# Edge add
|
|
2006
|
+
('node', 'edge', 'add', 'refs'),
|
|
2007
|
+
})
|
|
1964
2008
|
|
|
1965
|
-
('
|
|
1966
|
-
|
|
1967
|
-
|
|
2009
|
+
await core.nodes('''
|
|
2010
|
+
test:str=foo
|
|
2011
|
+
[ <(refs)- { test:str=bar } ]
|
|
2012
|
+
$node.data.pop(foo)
|
|
2013
|
+
| delnode
|
|
2014
|
+
''', opts=opts)
|
|
2015
|
+
|
|
2016
|
+
seen.clear()
|
|
2017
|
+
with mock.patch.object(s_hiveauth.HiveUser, 'confirm', confirm):
|
|
2018
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropSet', confirmPropSet):
|
|
2019
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropDel', confirmPropDel):
|
|
2020
|
+
await layr.confirmLayerEditPerms(user, parent.iden)
|
|
2021
|
+
|
|
2022
|
+
self.eq(seen, {
|
|
2023
|
+
# Node add
|
|
2024
|
+
('node', 'add', 'syn:tag'),
|
|
2025
|
+
('node', 'add', 'test:str'),
|
|
2026
|
+
|
|
2027
|
+
# Old style prop set
|
|
2028
|
+
('node', 'prop', 'set', 'test:str.created'),
|
|
2029
|
+
|
|
2030
|
+
('node', 'prop', 'set', 'syn:tag:up'),
|
|
2031
|
+
('node', 'prop', 'set', 'syn:tag:base'),
|
|
2032
|
+
('node', 'prop', 'set', 'syn:tag:depth'),
|
|
2033
|
+
('node', 'prop', 'set', 'syn:tag.created'),
|
|
2034
|
+
|
|
2035
|
+
# New style prop set
|
|
2036
|
+
('node', 'prop', 'set', 'test:str', '.created'),
|
|
2037
|
+
|
|
2038
|
+
('node', 'prop', 'set', 'syn:tag', 'up'),
|
|
2039
|
+
('node', 'prop', 'set', 'syn:tag', 'base'),
|
|
2040
|
+
('node', 'prop', 'set', 'syn:tag', 'depth'),
|
|
2041
|
+
('node', 'prop', 'set', 'syn:tag', '.created'),
|
|
2042
|
+
|
|
2043
|
+
# Tag/tagprop add
|
|
2044
|
+
('node', 'tag', 'add', 'foo', 'bar'),
|
|
2045
|
+
})
|
|
2046
|
+
|
|
2047
|
+
seen.clear()
|
|
2048
|
+
with mock.patch.object(s_hiveauth.HiveUser, 'confirm', confirm):
|
|
2049
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropSet', confirmPropSet):
|
|
2050
|
+
with mock.patch.object(s_cortex.Cortex, 'confirmPropDel', confirmPropDel):
|
|
2051
|
+
await layr.confirmLayerEditPerms(user, layr.iden, delete=True)
|
|
2052
|
+
|
|
2053
|
+
self.eq(seen, {
|
|
2054
|
+
# Node del
|
|
2055
|
+
('node', 'del', 'syn:tag'),
|
|
2056
|
+
('node', 'del', 'test:str'),
|
|
2057
|
+
|
|
2058
|
+
# Old style prop del
|
|
2059
|
+
('node', 'prop', 'del', 'test:str.created'),
|
|
2060
|
+
|
|
2061
|
+
('node', 'prop', 'del', 'syn:tag:up'),
|
|
2062
|
+
('node', 'prop', 'del', 'syn:tag:base'),
|
|
2063
|
+
('node', 'prop', 'del', 'syn:tag:depth'),
|
|
2064
|
+
('node', 'prop', 'del', 'syn:tag.created'),
|
|
2065
|
+
|
|
2066
|
+
# New style prop del
|
|
2067
|
+
('node', 'prop', 'del', 'test:str', '.created'),
|
|
2068
|
+
|
|
2069
|
+
('node', 'prop', 'del', 'syn:tag', 'up'),
|
|
2070
|
+
('node', 'prop', 'del', 'syn:tag', 'base'),
|
|
2071
|
+
('node', 'prop', 'del', 'syn:tag', 'depth'),
|
|
2072
|
+
('node', 'prop', 'del', 'syn:tag', '.created'),
|
|
2073
|
+
|
|
2074
|
+
# Tag/tagprop del
|
|
2075
|
+
('node', 'tag', 'del', 'foo', 'bar'),
|
|
2076
|
+
})
|
|
1968
2077
|
|
|
1969
2078
|
async def test_layer_v9(self):
|
|
1970
2079
|
async with self.getRegrCore('2.101.1-hugenum-indxprec') as core:
|
|
@@ -57,9 +57,11 @@ class LmdbSlabTest(s_t_utils.SynTest):
|
|
|
57
57
|
|
|
58
58
|
testgenr = slab.scanKeys(db=testdb)
|
|
59
59
|
dupsgenr = slab.scanKeys(db=dupsdb)
|
|
60
|
+
nodupsgenr = slab.scanKeys(db=dupsdb, nodup=True)
|
|
60
61
|
|
|
61
62
|
testlist = [next(testgenr)]
|
|
62
63
|
dupslist = [next(dupsgenr)]
|
|
64
|
+
nodupslist = [next(nodupsgenr)]
|
|
63
65
|
|
|
64
66
|
slab.put(b'derp', b'derp', db=editdb)
|
|
65
67
|
|
|
@@ -68,16 +70,25 @@ class LmdbSlabTest(s_t_utils.SynTest):
|
|
|
68
70
|
|
|
69
71
|
testlist.extend(testgenr)
|
|
70
72
|
dupslist.extend(dupsgenr)
|
|
73
|
+
nodupslist.extend(nodupsgenr)
|
|
71
74
|
|
|
72
75
|
self.eq(testlist, (b'hehe', b'hoho'))
|
|
73
76
|
self.eq(dupslist, (b'hehe', b'hehe', b'hoho'))
|
|
77
|
+
self.eq(nodupslist, (b'hehe', b'hoho'))
|
|
78
|
+
|
|
79
|
+
self.eq([b'hehe', b'hehe', b'hoho'], list(slab.scanKeysByPref(b'h', db=dupsdb)))
|
|
80
|
+
self.eq([b'hehe', b'hoho'], list(slab.scanKeysByPref(b'h', db=dupsdb, nodup=True)))
|
|
81
|
+
|
|
82
|
+
self.eq(3, await slab.countByPref(b'h', db=dupsdb))
|
|
74
83
|
|
|
75
84
|
# now lets delete the key we're on
|
|
76
85
|
testgenr = slab.scanKeys(db=testdb)
|
|
77
86
|
dupsgenr = slab.scanKeys(db=testdb)
|
|
87
|
+
nodupsgenr = slab.scanKeys(db=testdb, nodup=True)
|
|
78
88
|
|
|
79
89
|
testlist = [next(testgenr)]
|
|
80
90
|
dupslist = [next(dupsgenr)]
|
|
91
|
+
nodupslist = [next(nodupsgenr)]
|
|
81
92
|
|
|
82
93
|
slab.delete(b'hehe', db=testdb)
|
|
83
94
|
for lkey, lval in slab.scanByDups(b'hehe', db=dupsdb):
|
|
@@ -87,9 +98,11 @@ class LmdbSlabTest(s_t_utils.SynTest):
|
|
|
87
98
|
|
|
88
99
|
testlist.extend(testgenr)
|
|
89
100
|
dupslist.extend(dupsgenr)
|
|
101
|
+
nodupslist.extend(nodupsgenr)
|
|
90
102
|
|
|
91
103
|
self.eq(testlist, (b'hehe', b'hoho'))
|
|
92
104
|
self.eq(dupslist, (b'hehe', b'hoho'))
|
|
105
|
+
self.eq(nodupslist, (b'hehe', b'hoho'))
|
|
93
106
|
|
|
94
107
|
# by pref
|
|
95
108
|
self.eq([b'hoho'], list(slab.scanKeysByPref(b'h', db=dupsdb)))
|
|
@@ -628,6 +628,28 @@ class StormLibAuthTest(s_test.SynTest):
|
|
|
628
628
|
|
|
629
629
|
self.nn(await core.tryUserPasswd('hehe', 'haha'))
|
|
630
630
|
|
|
631
|
+
hehe = await core.callStorm('''
|
|
632
|
+
$hehe = $lib.auth.users.byname(hehe)
|
|
633
|
+
$hehe.setArchived($lib.true)
|
|
634
|
+
return($hehe)
|
|
635
|
+
''')
|
|
636
|
+
self.eq(True, hehe['archived'])
|
|
637
|
+
self.eq(True, hehe['locked'])
|
|
638
|
+
|
|
639
|
+
self.none(await core.tryUserPasswd('hehe', 'haha'))
|
|
640
|
+
|
|
641
|
+
hehe = await core.callStorm('''
|
|
642
|
+
$hehe = $lib.auth.users.byname(hehe)
|
|
643
|
+
$hehe.setArchived($lib.false)
|
|
644
|
+
return($hehe)
|
|
645
|
+
''')
|
|
646
|
+
self.eq(True, hehe['locked'])
|
|
647
|
+
self.eq(False, hehe['archived'])
|
|
648
|
+
self.none(await core.tryUserPasswd('hehe', 'haha'))
|
|
649
|
+
|
|
650
|
+
await core.callStorm('$lib.auth.users.byname(hehe).setLocked($lib.false)')
|
|
651
|
+
self.nn(await core.tryUserPasswd('hehe', 'haha'))
|
|
652
|
+
|
|
631
653
|
self.nn(await core.callStorm('''
|
|
632
654
|
$visi = $lib.auth.users.byname(visi)
|
|
633
655
|
if $( $visi.name = "visi" ) {
|
|
@@ -312,3 +312,50 @@ class StormCellTest(s_test.SynTest):
|
|
|
312
312
|
self.len(1, await core.nodes('it:sec:cpe:v2_2', opts={'view': view0}))
|
|
313
313
|
self.len(2, await core.nodes('it:sec:cpe:v2_2', opts={'view': view1}))
|
|
314
314
|
self.len(1, await core.nodes('it:sec:cpe:v2_2', opts={'view': view2}))
|
|
315
|
+
|
|
316
|
+
async def test_stormfix_riskhasvuln(self):
|
|
317
|
+
|
|
318
|
+
async with self.getTestCore() as core:
|
|
319
|
+
|
|
320
|
+
view0 = core.getView().iden
|
|
321
|
+
view1 = await core.callStorm('return($lib.view.get().fork().iden)')
|
|
322
|
+
view2 = await core.callStorm('return($lib.view.add(($lib.layer.add().iden,)).iden)')
|
|
323
|
+
|
|
324
|
+
self.len(1, await core.nodes('''
|
|
325
|
+
[ risk:hasvuln=*
|
|
326
|
+
:vuln={[ risk:vuln=* ]}
|
|
327
|
+
:software={[ it:prod:softver=* :name=view0 ]}
|
|
328
|
+
]
|
|
329
|
+
''', opts={'view': view0}))
|
|
330
|
+
|
|
331
|
+
self.len(1, await core.nodes('''
|
|
332
|
+
risk:hasvuln
|
|
333
|
+
[ :software={[ it:prod:softver=* :name=view1 ]} ]
|
|
334
|
+
''', opts={'view': view1}))
|
|
335
|
+
|
|
336
|
+
self.len(1, await core.nodes('''
|
|
337
|
+
[ risk:hasvuln=*
|
|
338
|
+
:vuln={[ risk:vuln=* ]}
|
|
339
|
+
:host={[ it:host=* :name=view2 ]}
|
|
340
|
+
]
|
|
341
|
+
''', opts={'view': view2}))
|
|
342
|
+
|
|
343
|
+
opts = {'vars': {'key': s_stormlib_cell.runtime_fixes_key, 'valu': (2, 0, 0)}}
|
|
344
|
+
await core.callStorm('$lib.globals.set($key, $valu)', opts)
|
|
345
|
+
|
|
346
|
+
msgs = await core.stormlist('$lib.cell.hotFixesCheck()')
|
|
347
|
+
printmesgs = [m[1]['mesg'] for m in msgs if m[0] == 'print']
|
|
348
|
+
self.isin('Would apply fix (3, 0, 0)', printmesgs[0])
|
|
349
|
+
self.eq('', printmesgs[1])
|
|
350
|
+
self.isin('Would apply fix (4, 0, 0)', printmesgs[2])
|
|
351
|
+
self.eq('', printmesgs[3])
|
|
352
|
+
self.isin('This hotfix should', printmesgs[4])
|
|
353
|
+
self.eq('', printmesgs[-1])
|
|
354
|
+
|
|
355
|
+
msgs = await core.stormlist('$lib.cell.hotFixesApply()')
|
|
356
|
+
self.stormIsInPrint('Applying hotfix (4, 0, 0) for [Create risk:vulnerable nodes', msgs)
|
|
357
|
+
self.stormIsInPrint('Applied hotfix (4, 0, 0)', msgs)
|
|
358
|
+
|
|
359
|
+
self.len(1, await core.nodes('risk:vulnerable -> it:prod:softver +:name=view0', opts={'view': view0}))
|
|
360
|
+
self.len(1, await core.nodes('risk:vulnerable -> it:prod:softver +:name=view1', opts={'view': view1}))
|
|
361
|
+
self.len(1, await core.nodes('risk:vulnerable -> it:host', opts={'view': view2}))
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import synapse.exc as s_exc
|
|
3
|
+
import synapse.tests.utils as s_test
|
|
4
|
+
|
|
5
|
+
class StormLibEnvTest(s_test.SynTest):
|
|
6
|
+
|
|
7
|
+
async def test_stormlib_env(self):
|
|
8
|
+
|
|
9
|
+
with self.setTstEnvars(SYN_STORM_ENV_WOOT='woot'):
|
|
10
|
+
|
|
11
|
+
async with self.getTestCore() as core:
|
|
12
|
+
|
|
13
|
+
self.eq('woot', await core.callStorm('return($lib.env.get(SYN_STORM_ENV_WOOT))'))
|
|
14
|
+
self.eq('hehe', await core.callStorm('return($lib.env.get(SYN_STORM_ENV_HEHE, default=hehe))'))
|
|
15
|
+
|
|
16
|
+
self.none(await core.callStorm('return($lib.env.get(SYN_STORM_ENV_HEHE))'))
|
|
17
|
+
|
|
18
|
+
visi = await core.auth.addUser('visi')
|
|
19
|
+
|
|
20
|
+
with self.raises(s_exc.AuthDeny):
|
|
21
|
+
opts = {'user': visi.iden}
|
|
22
|
+
await core.callStorm('return($lib.env.get(SYN_STORM_ENV_WOOT))', opts=opts)
|
|
23
|
+
|
|
24
|
+
with self.raises(s_exc.BadArg):
|
|
25
|
+
await core.callStorm('return($lib.env.get(USER))')
|
synapse/tests/test_lib_view.py
CHANGED
|
@@ -769,21 +769,15 @@ class ViewTest(s_t_utils.SynTest):
|
|
|
769
769
|
|
|
770
770
|
with self.raises(s_exc.AuthDeny) as cm:
|
|
771
771
|
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
772
|
-
self.eq('node.
|
|
773
|
-
|
|
774
|
-
await core.addUserRule(useriden, (True, ('node', 'add')), gateiden=baselayr)
|
|
775
|
-
|
|
776
|
-
with self.raises(s_exc.AuthDeny) as cm:
|
|
777
|
-
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
778
|
-
self.eq('node.prop.set.test:str:.created', cm.exception.errinfo['perm'])
|
|
772
|
+
self.eq('node.prop.set.syn:tag.base', cm.exception.errinfo['perm'])
|
|
779
773
|
|
|
780
774
|
await core.addUserRule(useriden, (True, ('node', 'prop', 'set')), gateiden=baselayr)
|
|
781
775
|
|
|
782
776
|
with self.raises(s_exc.AuthDeny) as cm:
|
|
783
777
|
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
784
|
-
self.eq('node.
|
|
778
|
+
self.eq('node.add.syn:tag', cm.exception.errinfo['perm'])
|
|
785
779
|
|
|
786
|
-
await core.addUserRule(useriden, (True, ('node', '
|
|
780
|
+
await core.addUserRule(useriden, (True, ('node', 'add')), gateiden=baselayr)
|
|
787
781
|
|
|
788
782
|
with self.raises(s_exc.AuthDeny) as cm:
|
|
789
783
|
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
@@ -797,6 +791,12 @@ class ViewTest(s_t_utils.SynTest):
|
|
|
797
791
|
|
|
798
792
|
await core.addUserRule(useriden, (True, ('node', 'data', 'set')), gateiden=baselayr)
|
|
799
793
|
|
|
794
|
+
with self.raises(s_exc.AuthDeny) as cm:
|
|
795
|
+
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
796
|
+
self.eq('node.edge.add.refs', cm.exception.errinfo['perm'])
|
|
797
|
+
|
|
798
|
+
await core.addUserRule(useriden, (True, ('node', 'edge', 'add')), gateiden=baselayr)
|
|
799
|
+
|
|
800
800
|
await core.nodes('$lib.view.get().merge()', opts=viewopts)
|
|
801
801
|
|
|
802
802
|
nodes = await core.nodes('test:str=foo $node.data.load(foo)')
|
synapse/tests/test_model_base.py
CHANGED
|
@@ -12,9 +12,10 @@ class BaseTest(s_t_utils.SynTest):
|
|
|
12
12
|
nodes = await core.nodes('[ meta:timeline=* :title=Woot :summary=4LOLZ :type=lol.cats ]')
|
|
13
13
|
self.len(1, nodes)
|
|
14
14
|
nodes = await core.nodes('''
|
|
15
|
-
[ meta:event=* :title=Zip :duration=1:30:00
|
|
15
|
+
[ meta:event=* :title=Zip :duration=1:30:00 :index=0
|
|
16
16
|
:summary=Zop :time=20220321 :type=zip.zop :timeline={meta:timeline:title=Woot} ]''')
|
|
17
17
|
self.len(1, nodes)
|
|
18
|
+
self.eq(0, nodes[0].get('index'))
|
|
18
19
|
nodes = await core.nodes('''[ meta:event=* :title=Hehe :duration=2:00
|
|
19
20
|
:summary=Haha :time=20220322 :type=hehe.haha :timeline={meta:timeline:title=Woot} ]''')
|
|
20
21
|
self.len(1, nodes)
|
|
@@ -68,13 +69,14 @@ class BaseTest(s_t_utils.SynTest):
|
|
|
68
69
|
self.len(1, nodes)
|
|
69
70
|
self.eq(nodes[0].get('text'), 'yieldnote')
|
|
70
71
|
|
|
71
|
-
nodes = await core.nodes('note.add --yield "nonodes"')
|
|
72
|
+
nodes = await core.nodes('note.add --yield "nonodes" | [ :replyto=* ]')
|
|
72
73
|
self.len(1, nodes)
|
|
73
74
|
self.eq(nodes[0].get('text'), 'nonodes')
|
|
74
75
|
self.nn(nodes[0].get('created'))
|
|
75
76
|
self.nn(nodes[0].get('updated'))
|
|
76
77
|
|
|
77
78
|
self.len(0, await core.nodes('meta:note:text=nonodes -(about)> *'))
|
|
79
|
+
self.len(1, await core.nodes('meta:note:text=nonodes -> meta:note'))
|
|
78
80
|
|
|
79
81
|
async def test_model_base_node(self):
|
|
80
82
|
|
|
@@ -348,7 +350,7 @@ class BaseTest(s_t_utils.SynTest):
|
|
|
348
350
|
|
|
349
351
|
keep.append(node)
|
|
350
352
|
|
|
351
|
-
self.len(0, keep)
|
|
353
|
+
self.len(0, keep, msg=[node.ndef[1] for node in keep])
|
|
352
354
|
self.len(len(SYN_6315), skip)
|
|
353
355
|
|
|
354
356
|
for edge in core.model.edges.values():
|
|
@@ -36,13 +36,17 @@ class EconTest(s_utils.SynTest):
|
|
|
36
36
|
:paid:time=20180202
|
|
37
37
|
|
|
38
38
|
:settled=20180205
|
|
39
|
+
:listing = *
|
|
39
40
|
]'''
|
|
40
41
|
|
|
41
42
|
perc = (await core.nodes(text))[0]
|
|
42
43
|
|
|
44
|
+
self.nn(perc.get('listing'))
|
|
43
45
|
self.eq('13.37', perc.get('price'))
|
|
44
46
|
self.eq('usd', perc.get('currency'))
|
|
45
47
|
|
|
48
|
+
self.len(1, await core.nodes('econ:purchase -> biz:listing'))
|
|
49
|
+
|
|
46
50
|
self.len(1, await core.nodes('econ:purchase:price=13.37'))
|
|
47
51
|
self.len(1, await core.nodes('econ:purchase:price=13.370'))
|
|
48
52
|
self.len(0, await core.nodes('econ:purchase:price=13.372'))
|