synapse 2.180.0__py311-none-any.whl → 2.181.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/assets/__init__.py +35 -0
- synapse/assets/storm/migrations/model-0.2.28.storm +355 -0
- synapse/common.py +2 -1
- synapse/cortex.py +49 -35
- synapse/cryotank.py +1 -1
- synapse/datamodel.py +30 -0
- synapse/lib/ast.py +12 -7
- synapse/lib/cell.py +1 -1
- synapse/lib/certdir.py +4 -4
- synapse/lib/chop.py +0 -1
- synapse/lib/drive.py +8 -8
- synapse/lib/layer.py +55 -13
- synapse/lib/lmdbslab.py +26 -5
- synapse/lib/modelrev.py +28 -1
- synapse/lib/modules.py +1 -0
- synapse/lib/nexus.py +1 -1
- synapse/lib/node.py +5 -0
- synapse/lib/parser.py +23 -16
- synapse/lib/scrape.py +1 -1
- synapse/lib/slabseqn.py +2 -2
- synapse/lib/snap.py +129 -0
- synapse/lib/storm.lark +16 -2
- synapse/lib/storm.py +3 -0
- synapse/lib/storm_format.py +1 -0
- synapse/lib/stormhttp.py +34 -1
- synapse/lib/stormlib/auth.py +1 -1
- synapse/lib/stormlib/cortex.py +5 -2
- synapse/lib/stormlib/ipv6.py +2 -2
- synapse/lib/stormlib/model.py +114 -12
- synapse/lib/stormlib/project.py +1 -1
- synapse/lib/stormtypes.py +81 -7
- synapse/lib/types.py +7 -0
- synapse/lib/version.py +2 -2
- synapse/lib/view.py +47 -0
- synapse/models/inet.py +10 -3
- synapse/models/infotech.py +2 -1
- synapse/models/language.py +4 -0
- synapse/models/math.py +50 -0
- synapse/models/orgs.py +8 -0
- synapse/models/risk.py +9 -0
- synapse/tests/files/stormcov/pragma-nocov.storm +18 -0
- synapse/tests/test_assets.py +25 -0
- synapse/tests/test_cortex.py +129 -0
- synapse/tests/test_datamodel.py +6 -0
- synapse/tests/test_lib_aha.py +2 -1
- synapse/tests/test_lib_certdir.py +9 -0
- synapse/tests/test_lib_grammar.py +7 -1
- synapse/tests/test_lib_layer.py +35 -0
- synapse/tests/test_lib_lmdbslab.py +11 -9
- synapse/tests/test_lib_modelrev.py +655 -1
- synapse/tests/test_lib_slabseqn.py +5 -4
- synapse/tests/test_lib_snap.py +4 -0
- synapse/tests/test_lib_storm.py +72 -1
- synapse/tests/test_lib_stormhttp.py +99 -1
- synapse/tests/test_lib_stormlib_cortex.py +21 -4
- synapse/tests/test_lib_stormlib_iters.py +8 -5
- synapse/tests/test_lib_stormlib_model.py +45 -6
- synapse/tests/test_lib_stormtypes.py +158 -2
- synapse/tests/test_lib_types.py +6 -0
- synapse/tests/test_model_inet.py +10 -0
- synapse/tests/test_model_language.py +4 -0
- synapse/tests/test_model_math.py +22 -0
- synapse/tests/test_model_orgs.py +6 -2
- synapse/tests/test_model_risk.py +4 -0
- synapse/tests/test_utils_stormcov.py +5 -0
- synapse/tests/utils.py +18 -5
- synapse/utils/stormcov/plugin.py +31 -1
- synapse/vendor/cpython/LICENSE +279 -0
- synapse/vendor/cpython/__init__.py +0 -0
- synapse/vendor/cpython/lib/__init__.py +0 -0
- synapse/vendor/cpython/lib/email/__init__.py +0 -0
- synapse/vendor/cpython/lib/email/_parseaddr.py +560 -0
- synapse/vendor/cpython/lib/email/utils.py +505 -0
- synapse/vendor/cpython/lib/ipaddress.py +2366 -0
- synapse/vendor/cpython/lib/test/__init__.py +0 -0
- synapse/vendor/cpython/lib/test/support/__init__.py +114 -0
- synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
- synapse/vendor/cpython/lib/test/test_email/test_email.py +480 -0
- synapse/vendor/cpython/lib/test/test_email/test_utils.py +167 -0
- synapse/vendor/cpython/lib/test/test_ipaddress.py +2672 -0
- synapse/vendor/utils.py +4 -3
- {synapse-2.180.0.dist-info → synapse-2.181.0.dist-info}/METADATA +2 -2
- {synapse-2.180.0.dist-info → synapse-2.181.0.dist-info}/RECORD +86 -69
- {synapse-2.180.0.dist-info → synapse-2.181.0.dist-info}/WHEEL +1 -1
- synapse/lib/jupyter.py +0 -505
- synapse/tests/test_lib_jupyter.py +0 -224
- {synapse-2.180.0.dist-info → synapse-2.181.0.dist-info}/LICENSE +0 -0
- {synapse-2.180.0.dist-info → synapse-2.181.0.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
|
|
1
3
|
import synapse.exc as s_exc
|
|
4
|
+
import synapse.common as s_common
|
|
2
5
|
|
|
3
6
|
import synapse.lib.chop as s_chop
|
|
4
7
|
import synapse.lib.modelrev as s_modelrev
|
|
@@ -561,8 +564,659 @@ class ModelRevTest(s_tests.SynTest):
|
|
|
561
564
|
self.eq([node.ndef[0] for node in nodes], [node.ndef[0] for node in reversed(rnodes)])
|
|
562
565
|
|
|
563
566
|
async def test_modelrev_0_2_27(self):
|
|
564
|
-
|
|
565
567
|
async with self.getRegrCore('model-0.2.27') as core:
|
|
566
568
|
nodes = await core.nodes('it:dev:repo:commit:id=" Foo "')
|
|
567
569
|
self.len(1, nodes)
|
|
568
570
|
self.eq('Foo', nodes[0].get('id'))
|
|
571
|
+
|
|
572
|
+
async def test_modelrev_cpe(self):
|
|
573
|
+
# Skip this test for now since 0_2_28 migration was disabled. This test will be moved/updated in a later PR.
|
|
574
|
+
self.skip('Model 0.2.28 disabled')
|
|
575
|
+
|
|
576
|
+
async with self.getRegrCore('model-0.2.28', maxvers=(0, 2, 24)) as core:
|
|
577
|
+
# Do some pre-migration validation of the cortex. It's still a
|
|
578
|
+
# little weird in here because the CPE types have been updated so
|
|
579
|
+
# some lifting/pivoting won't work right.
|
|
580
|
+
|
|
581
|
+
views = await core.callStorm('return($lib.view.list(deporder=$lib.true))')
|
|
582
|
+
self.len(3, views)
|
|
583
|
+
|
|
584
|
+
fork00 = views[1].get('iden')
|
|
585
|
+
infork00 = {'view': fork00}
|
|
586
|
+
|
|
587
|
+
nodes = await core.nodes('it:sec:cpe')
|
|
588
|
+
self.len(11, nodes)
|
|
589
|
+
for node in nodes:
|
|
590
|
+
self.isin('test.cpe', node.tags)
|
|
591
|
+
data = await s_tests.alist(node.iterData())
|
|
592
|
+
self.eq([k[0] for k in data], ('cpe22', 'cpe23'))
|
|
593
|
+
|
|
594
|
+
nodes = await core.nodes('it:sec:cpe -(refs)> risk:vuln | uniq')
|
|
595
|
+
self.len(1, nodes)
|
|
596
|
+
self.eq(nodes[0].ndef, ('risk:vuln', s_common.guid(('risk', 'vuln'))))
|
|
597
|
+
|
|
598
|
+
nodes = await core.nodes('risk:vulnerable')
|
|
599
|
+
self.len(11, nodes)
|
|
600
|
+
for node in nodes:
|
|
601
|
+
self.nn(node.get('node'))
|
|
602
|
+
|
|
603
|
+
nodes = await core.nodes(r'it:sec:cpe:vendor="d\-link"')
|
|
604
|
+
self.len(1, nodes)
|
|
605
|
+
|
|
606
|
+
nodes = await core.nodes('it:prod:soft', opts=infork00)
|
|
607
|
+
self.len(4, nodes)
|
|
608
|
+
for node in nodes:
|
|
609
|
+
self.isin('test.prod', node.tags)
|
|
610
|
+
self.nn(node.get('cpe'))
|
|
611
|
+
|
|
612
|
+
nodes = await core.nodes('inet:flow', opts=infork00)
|
|
613
|
+
self.len(4, nodes)
|
|
614
|
+
for node in nodes:
|
|
615
|
+
self.isin('test.flow', node.tags)
|
|
616
|
+
dsts = node.get('dst:cpes')
|
|
617
|
+
srcs = node.get('src:cpes')
|
|
618
|
+
self.true((
|
|
619
|
+
(dsts is not None and len(dsts) == 2) or
|
|
620
|
+
(srcs is not None and len(srcs) == 2)
|
|
621
|
+
))
|
|
622
|
+
|
|
623
|
+
nodes = await core.nodes('_ext:model:form', opts=infork00)
|
|
624
|
+
self.len(4, nodes)
|
|
625
|
+
for node in nodes:
|
|
626
|
+
self.isin('test.ext', node.tags)
|
|
627
|
+
self.nn(node.get('cpe'))
|
|
628
|
+
|
|
629
|
+
nodes = await core.nodes('meta:source:name="cpe.22.invalid" -(seen)> it:sec:cpe', opts=infork00)
|
|
630
|
+
self.len(5, nodes)
|
|
631
|
+
|
|
632
|
+
nodes = await core.nodes('meta:source:name="cpe.23.invalid" -(seen)> it:sec:cpe', opts=infork00)
|
|
633
|
+
self.len(6, nodes)
|
|
634
|
+
|
|
635
|
+
nodes = await core.nodes('meta:source:name="cpe.22.invalid" -> meta:seen', opts=infork00)
|
|
636
|
+
self.len(5, nodes)
|
|
637
|
+
|
|
638
|
+
nodes = await core.nodes('meta:source:name="cpe.23.invalid" -> meta:seen', opts=infork00)
|
|
639
|
+
self.len(6, nodes)
|
|
640
|
+
|
|
641
|
+
nodes = await core.nodes('it:sec:vuln:scan:result', opts=infork00)
|
|
642
|
+
self.len(11, nodes)
|
|
643
|
+
|
|
644
|
+
async with self.getRegrCore('model-0.2.28') as core:
|
|
645
|
+
|
|
646
|
+
views = await core.callStorm('return($lib.view.list(deporder=$lib.true))')
|
|
647
|
+
self.len(3, views)
|
|
648
|
+
|
|
649
|
+
fork00 = views[1].get('iden')
|
|
650
|
+
infork00 = {'view': fork00}
|
|
651
|
+
|
|
652
|
+
# Calculate some timestamps
|
|
653
|
+
start = datetime.datetime(year=2020, month=1, day=1, tzinfo=datetime.timezone.utc)
|
|
654
|
+
end = datetime.datetime(year=2021, month=1, day=1, tzinfo=datetime.timezone.utc)
|
|
655
|
+
|
|
656
|
+
start = int(start.timestamp() * 1000)
|
|
657
|
+
end = int(end.timestamp() * 1000)
|
|
658
|
+
|
|
659
|
+
# We started with 11 CPE nodes and two got removed
|
|
660
|
+
nodes = await core.nodes('it:sec:cpe')
|
|
661
|
+
self.len(9, nodes)
|
|
662
|
+
for node in nodes:
|
|
663
|
+
self.isin('test.cpe', node.tags)
|
|
664
|
+
data = await s_tests.alist(node.iterData())
|
|
665
|
+
self.eq([k[0] for k in data], ('cpe22', 'cpe23'))
|
|
666
|
+
|
|
667
|
+
# Check the .seen time was migrated
|
|
668
|
+
seen = node.get('.seen')
|
|
669
|
+
self.nn(seen)
|
|
670
|
+
|
|
671
|
+
self.eq((start, end), seen)
|
|
672
|
+
|
|
673
|
+
nodes = await core.nodes('it:sec:cpe#test.cpe.22invalid +#test.cpe.23invalid')
|
|
674
|
+
self.len(0, nodes)
|
|
675
|
+
|
|
676
|
+
nodes = await core.nodes('it:sec:cpe -(refs)> risk:vuln')
|
|
677
|
+
self.len(9, nodes)
|
|
678
|
+
|
|
679
|
+
nodes = await core.nodes('risk:vulnerable')
|
|
680
|
+
self.len(11, nodes)
|
|
681
|
+
|
|
682
|
+
nodes = await core.nodes('risk:vulnerable:node')
|
|
683
|
+
self.len(9, nodes)
|
|
684
|
+
|
|
685
|
+
nodes = await core.nodes('risk:vulnerable -> it:sec:cpe')
|
|
686
|
+
self.len(9, nodes)
|
|
687
|
+
|
|
688
|
+
nodes = await core.nodes('risk:vulnerable -:node')
|
|
689
|
+
self.len(2, nodes)
|
|
690
|
+
|
|
691
|
+
nodes = await core.nodes('it:prod:soft', opts=infork00)
|
|
692
|
+
self.len(4, nodes)
|
|
693
|
+
for node in nodes:
|
|
694
|
+
self.isin('test.prod', node.tags)
|
|
695
|
+
|
|
696
|
+
nodes = await core.nodes('it:prod:soft:cpe', opts=infork00)
|
|
697
|
+
self.len(3, nodes)
|
|
698
|
+
|
|
699
|
+
nodes = await core.nodes('it:prod:soft -> it:sec:cpe', opts=infork00)
|
|
700
|
+
self.len(3, nodes)
|
|
701
|
+
ndefs = [k.ndef for k in nodes]
|
|
702
|
+
self.sorteq(ndefs, (
|
|
703
|
+
('it:sec:cpe', 'cpe:2.3:a:1c:1c\\:enterprise:-:*:*:*:*:*:*:*'),
|
|
704
|
+
('it:sec:cpe', 'cpe:2.3:a:01generator:pireospay:-:*:*:*:*:prestashop:*:*'),
|
|
705
|
+
('it:sec:cpe', 'cpe:2.3:o:zyxel:nas326_firmware:5.21\\(aazf.14\\)c0:*:*:*:*:*:*:*'),
|
|
706
|
+
))
|
|
707
|
+
|
|
708
|
+
nodes = await core.nodes('it:prod:soft -:cpe', opts=infork00)
|
|
709
|
+
self.len(1, nodes)
|
|
710
|
+
self.eq(nodes[0].get('name'), '22i-23i')
|
|
711
|
+
|
|
712
|
+
nodes = await core.nodes('inet:flow', opts=infork00)
|
|
713
|
+
self.len(4, nodes)
|
|
714
|
+
|
|
715
|
+
nodes = await core.nodes('inet:flow +(:src:cpes or :dst:cpes)', opts=infork00)
|
|
716
|
+
self.len(3, nodes)
|
|
717
|
+
|
|
718
|
+
nodes = await core.nodes('inet:flow -(:src:cpes or :dst:cpes)', opts=infork00)
|
|
719
|
+
self.len(1, nodes)
|
|
720
|
+
self.eq(nodes[0].repr(), s_common.guid(('flow', '22i', '23i')))
|
|
721
|
+
|
|
722
|
+
nodes = await core.nodes('inet:flow -> it:sec:cpe', opts=infork00)
|
|
723
|
+
self.len(6, nodes)
|
|
724
|
+
ndefs = [k.ndef for k in nodes]
|
|
725
|
+
self.sorteq(ndefs, (
|
|
726
|
+
('it:sec:cpe', 'cpe:2.3:a:10web:social_feed_for_instagram:1.0.0:*:*:*:premium:wordpress:*:*'),
|
|
727
|
+
('it:sec:cpe', 'cpe:2.3:o:zyxel:nas326_firmware:5.21\\(aazf.14\\)c0:*:*:*:*:*:*:*'),
|
|
728
|
+
('it:sec:cpe', 'cpe:2.3:a:01generator:pireospay:-:*:*:*:*:prestashop:*:*'),
|
|
729
|
+
('it:sec:cpe', 'cpe:2.3:a:abine:donottrackme_-_mobile_privacy:1.1.8:*:*:*:*:android:*:*'),
|
|
730
|
+
('it:sec:cpe', 'cpe:2.3:a:1c:1c\\:enterprise:-:*:*:*:*:*:*:*'),
|
|
731
|
+
('it:sec:cpe', 'cpe:2.3:a:abinitio:control\\>center:-:*:*:*:*:*:*:*'),
|
|
732
|
+
))
|
|
733
|
+
|
|
734
|
+
nodes = await core.nodes('_ext:model:form', opts=infork00)
|
|
735
|
+
self.len(4, nodes)
|
|
736
|
+
|
|
737
|
+
nodes = await core.nodes('_ext:model:form:cpe', opts=infork00)
|
|
738
|
+
self.len(3, nodes)
|
|
739
|
+
|
|
740
|
+
nodes = await core.nodes('_ext:model:form -:cpe', opts=infork00)
|
|
741
|
+
self.len(1, nodes)
|
|
742
|
+
|
|
743
|
+
nodes = await core.nodes('_ext:model:form -> it:sec:cpe', opts=infork00)
|
|
744
|
+
self.len(3, nodes)
|
|
745
|
+
ndefs = [k.ndef for k in nodes]
|
|
746
|
+
self.sorteq(ndefs, (
|
|
747
|
+
('it:sec:cpe', 'cpe:2.3:a:01generator:pireospay:-:*:*:*:*:prestashop:*:*'),
|
|
748
|
+
('it:sec:cpe', r'cpe:2.3:a:acurax:under_construction_\/_maintenance_mode:-:*:*:*:*:wordpress:*:*'),
|
|
749
|
+
('it:sec:cpe', r'cpe:2.3:a:1c:1c\:enterprise:-:*:*:*:*:*:*:*'),
|
|
750
|
+
))
|
|
751
|
+
|
|
752
|
+
nodes = await core.nodes('meta:seen', opts=infork00)
|
|
753
|
+
self.len(3, nodes)
|
|
754
|
+
|
|
755
|
+
nodes = await core.nodes('meta:seen -> it:sec:cpe', opts=infork00)
|
|
756
|
+
self.len(3, nodes)
|
|
757
|
+
ndefs = [k.ndef for k in nodes]
|
|
758
|
+
self.sorteq(ndefs, (
|
|
759
|
+
('it:sec:cpe', 'cpe:2.3:a:abinitio:control\\>center:-:*:*:*:*:*:*:*'),
|
|
760
|
+
('it:sec:cpe', 'cpe:2.3:a:1c:1c\\:enterprise:-:*:*:*:*:*:*:*'),
|
|
761
|
+
('it:sec:cpe', 'cpe:2.3:o:zyxel:nas542_firmware:5.21\\%28aazf.15\\%29co:*:*:*:*:*:*:*'),
|
|
762
|
+
))
|
|
763
|
+
|
|
764
|
+
nodes = await core.nodes('it:sec:cpe -> meta:seen -> it:sec:vuln:scan:result', opts=infork00)
|
|
765
|
+
self.len(3, nodes)
|
|
766
|
+
ndefs = [k.ndef for k in nodes]
|
|
767
|
+
self.sorteq(ndefs, (
|
|
768
|
+
('it:sec:vuln:scan:result', 'd5cd9c6f53ad552d7c84ad5791b80db0'),
|
|
769
|
+
('it:sec:vuln:scan:result', '144b8d8cb35c605dcd1f079250921c6d'),
|
|
770
|
+
('it:sec:vuln:scan:result', '7aae05f91c41dafbf01f2dec8fcf97cd'),
|
|
771
|
+
))
|
|
772
|
+
|
|
773
|
+
# Check that we correctly copied over the edges
|
|
774
|
+
nodes = await core.nodes('risk:vuln <(refs)- it:sec:cpe')
|
|
775
|
+
self.len(9, nodes)
|
|
776
|
+
|
|
777
|
+
# Check that we correctly copied over the tags
|
|
778
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:o:zyxel:nas326_firmware:5.21\(aazf.14\)c0:*:*:*:*:*:*:*"')
|
|
779
|
+
self.len(1, nodes)
|
|
780
|
+
self.isin('test.cpe.22valid', nodes[0].tags)
|
|
781
|
+
self.isin('test.cpe.23invalid', nodes[0].tags)
|
|
782
|
+
|
|
783
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:a:10web:social_feed_for_instagram:1.0.0:*:*:*:premium:wordpress:*:*"')
|
|
784
|
+
self.len(1, nodes)
|
|
785
|
+
self.isin('test.cpe.22valid', nodes[0].tags)
|
|
786
|
+
self.isin('test.cpe.23invalid', nodes[0].tags)
|
|
787
|
+
|
|
788
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:a:acurax:under_construction_\/_maintenance_mode:-:*:*:*:*:wordpress:*:*"')
|
|
789
|
+
self.len(1, nodes)
|
|
790
|
+
self.isin('test.cpe.22valid', nodes[0].tags)
|
|
791
|
+
self.isin('test.cpe.23invalid', nodes[0].tags)
|
|
792
|
+
|
|
793
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:h:d-link:dir-850l:*:*:*:*:*:*:*:*"')
|
|
794
|
+
self.len(1, nodes)
|
|
795
|
+
self.isin('test.cpe.22valid', nodes[0].tags)
|
|
796
|
+
self.isin('test.cpe.23invalid', nodes[0].tags)
|
|
797
|
+
|
|
798
|
+
# Check that we correctly copied over the node data
|
|
799
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:o:zyxel:nas326_firmware:5.21\(aazf.14\)c0:*:*:*:*:*:*:*"')
|
|
800
|
+
self.len(1, nodes)
|
|
801
|
+
data = await s_tests.alist(nodes[0].iterData())
|
|
802
|
+
self.sorteq(data, (('cpe23', 'invalid'), ('cpe22', 'valid')))
|
|
803
|
+
|
|
804
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:a:10web:social_feed_for_instagram:1.0.0:*:*:*:premium:wordpress:*:*"')
|
|
805
|
+
self.len(1, nodes)
|
|
806
|
+
data = await s_tests.alist(nodes[0].iterData())
|
|
807
|
+
self.sorteq(data, (('cpe23', 'invalid'), ('cpe22', 'valid')))
|
|
808
|
+
|
|
809
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:a:acurax:under_construction_\/_maintenance_mode:-:*:*:*:*:wordpress:*:*"')
|
|
810
|
+
self.len(1, nodes)
|
|
811
|
+
data = await s_tests.alist(nodes[0].iterData())
|
|
812
|
+
self.sorteq(data, (('cpe23', 'invalid'), ('cpe22', 'valid')))
|
|
813
|
+
|
|
814
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:h:d-link:dir-850l:*:*:*:*:*:*:*:*"')
|
|
815
|
+
self.len(1, nodes)
|
|
816
|
+
data = await s_tests.alist(nodes[0].iterData())
|
|
817
|
+
self.sorteq(data, (('cpe23', 'invalid'), ('cpe22', 'valid')))
|
|
818
|
+
|
|
819
|
+
# Check that we correctly copied over the extended props
|
|
820
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:o:zyxel:nas326_firmware:5.21\(aazf.14\)c0:*:*:*:*:*:*:*"')
|
|
821
|
+
self.len(1, nodes)
|
|
822
|
+
self.true(nodes[0].get('_cpe22valid'))
|
|
823
|
+
self.false(nodes[0].get('_cpe23valid'))
|
|
824
|
+
|
|
825
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:a:10web:social_feed_for_instagram:1.0.0:*:*:*:premium:wordpress:*:*"')
|
|
826
|
+
self.len(1, nodes)
|
|
827
|
+
self.true(nodes[0].get('_cpe22valid'))
|
|
828
|
+
self.false(nodes[0].get('_cpe23valid'))
|
|
829
|
+
|
|
830
|
+
nodes = await core.nodes(r'it:sec:cpe="cpe:2.3:a:acurax:under_construction_\/_maintenance_mode:-:*:*:*:*:wordpress:*:*"')
|
|
831
|
+
self.len(1, nodes)
|
|
832
|
+
self.true(nodes[0].get('_cpe22valid'))
|
|
833
|
+
self.false(nodes[0].get('_cpe23valid'))
|
|
834
|
+
|
|
835
|
+
nodes = await core.nodes('it:sec:cpe="cpe:2.3:h:d-link:dir-850l:*:*:*:*:*:*:*:*"')
|
|
836
|
+
self.len(1, nodes)
|
|
837
|
+
self.true(nodes[0].get('_cpe22valid'))
|
|
838
|
+
self.false(nodes[0].get('_cpe23valid'))
|
|
839
|
+
|
|
840
|
+
async with self.getRegrCore('model-0.2.28') as core:
|
|
841
|
+
|
|
842
|
+
views = await core.callStorm('return($lib.view.list(deporder=$lib.true))')
|
|
843
|
+
self.len(3, views)
|
|
844
|
+
|
|
845
|
+
fork00 = views[1].get('iden') # forked view
|
|
846
|
+
forklayr = views[1].get('layers')[0].get('iden')
|
|
847
|
+
|
|
848
|
+
view00 = views[0].get('iden') # default view
|
|
849
|
+
viewlayr = views[0].get('layers')[0].get('iden')
|
|
850
|
+
|
|
851
|
+
opts = {'view': fork00}
|
|
852
|
+
|
|
853
|
+
nodes = await core.nodes('meta:source:name="cpe.22.invalid"', opts=opts)
|
|
854
|
+
self.len(1, nodes)
|
|
855
|
+
source00 = nodes[0]
|
|
856
|
+
|
|
857
|
+
nodes = await core.nodes('meta:source:name="cpe.23.invalid"', opts=opts)
|
|
858
|
+
self.len(1, nodes)
|
|
859
|
+
source01 = nodes[0]
|
|
860
|
+
|
|
861
|
+
source22 = source00.ndef[1]
|
|
862
|
+
source22iden = source00.iden()
|
|
863
|
+
|
|
864
|
+
source23 = source01.ndef[1]
|
|
865
|
+
source23iden = source01.iden()
|
|
866
|
+
|
|
867
|
+
invcpe00 = 'cpe:2.3:a:10web:social_feed_for_instagram:1.0.0::~~premium~wordpress~~:*:*:*:*:*'
|
|
868
|
+
invcpe01 = 'cpe:2.3:a:acurax:under_construction_%2f_maintenance_mode:-::~~~wordpress~~:*:*:*:*:*'
|
|
869
|
+
invcpe02 = 'cpe:2.3:a:openbsd:openssh:7.4\r\n:*:*:*:*:*:*:*'
|
|
870
|
+
invcpe03 = 'cpe:2.3:a:openbsd:openssh:8.2p1 ubuntu-4ubuntu0.2:*:*:*:*:*:*:*'
|
|
871
|
+
invcpe04 = 'cpe:2.3:h:d\\-link:dir\\-850l:*:*:*:*:*:*:*:*'
|
|
872
|
+
invcpe05 = 'cpe:2.3:o:zyxel:nas326_firmware:5.21%28aazf.14%29c0:*:*:*:*:*:*:*'
|
|
873
|
+
|
|
874
|
+
metaseen00 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe00)))))
|
|
875
|
+
metaseen01 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe01)))))
|
|
876
|
+
metaseen02 = s_common.ehex(s_common.buid(('meta:seen', (source22, ('it:sec:cpe', invcpe02)))))
|
|
877
|
+
metaseen03 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe02)))))
|
|
878
|
+
metaseen04 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe03)))))
|
|
879
|
+
metaseen05 = s_common.ehex(s_common.buid(('meta:seen', (source22, ('it:sec:cpe', invcpe03)))))
|
|
880
|
+
metaseen06 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe04)))))
|
|
881
|
+
metaseen07 = s_common.ehex(s_common.buid(('meta:seen', (source23, ('it:sec:cpe', invcpe05)))))
|
|
882
|
+
|
|
883
|
+
badcpe00 = s_common.ehex(s_common.buid(('it:sec:cpe', invcpe02)))
|
|
884
|
+
badcpe01 = s_common.ehex(s_common.buid(('it:sec:cpe', invcpe03)))
|
|
885
|
+
|
|
886
|
+
'''
|
|
887
|
+
There are two CPEs that we couldn't migrate. They should be fully
|
|
888
|
+
represented in the following three queues for potentially being
|
|
889
|
+
rebuilt later.
|
|
890
|
+
|
|
891
|
+
badcpe00: it:sec:cpe="cpe:2.3:a:openbsd:openssh:7.4\r\n:*:*:*:*:*:*:*"
|
|
892
|
+
badcpe01: it:sec:cpe="cpe:2.3:a:openbsd:openssh:8.2p1 ubuntu-4ubuntu0.2:*:*:*:*:*:*:*"
|
|
893
|
+
'''
|
|
894
|
+
|
|
895
|
+
queues = await core.callStorm('return($lib.queue.list())')
|
|
896
|
+
[q.pop('meta') for q in queues]
|
|
897
|
+
self.len(3, queues)
|
|
898
|
+
self.eq(queues, (
|
|
899
|
+
{'name': 'model_0_2_28:nodes', 'size': 10, 'offs': 10},
|
|
900
|
+
{'name': 'model_0_2_28:nodes:refs', 'size': 14, 'offs': 14},
|
|
901
|
+
{'name': 'model_0_2_28:nodes:edges', 'size': 4, 'offs': 4},
|
|
902
|
+
))
|
|
903
|
+
|
|
904
|
+
q = '''
|
|
905
|
+
$ret = ([])
|
|
906
|
+
$q = $lib.queue.get('model_0_2_28:nodes')
|
|
907
|
+
for $ii in $lib.range(($q.size())) {
|
|
908
|
+
$ret.append($q.get($ii, cull=(false), wait=(false)))
|
|
909
|
+
}
|
|
910
|
+
fini { return($ret) }
|
|
911
|
+
'''
|
|
912
|
+
nodesq = await core.callStorm(q)
|
|
913
|
+
for item in nodesq:
|
|
914
|
+
self.nn(item[1]['props'].pop('.created'))
|
|
915
|
+
|
|
916
|
+
self.eq(nodesq, [
|
|
917
|
+
(0,
|
|
918
|
+
{'data': (),
|
|
919
|
+
'form': 'meta:seen',
|
|
920
|
+
'iden': metaseen00,
|
|
921
|
+
'layer': forklayr,
|
|
922
|
+
'props': {'node': ('it:sec:cpe', invcpe00),
|
|
923
|
+
'source': source23},
|
|
924
|
+
'repr': (source23, ('it:sec:cpe', invcpe00)),
|
|
925
|
+
'sources': (),
|
|
926
|
+
'tags': (),
|
|
927
|
+
'view': fork00}),
|
|
928
|
+
(1,
|
|
929
|
+
{'data': (),
|
|
930
|
+
'form': 'meta:seen',
|
|
931
|
+
'iden': metaseen01,
|
|
932
|
+
'layer': forklayr,
|
|
933
|
+
'props': {'node': ('it:sec:cpe', invcpe01),
|
|
934
|
+
'source': source23},
|
|
935
|
+
'repr': (source23, ('it:sec:cpe', invcpe01)),
|
|
936
|
+
'sources': (),
|
|
937
|
+
'tags': (),
|
|
938
|
+
'view': fork00}),
|
|
939
|
+
(2,
|
|
940
|
+
{'data': (),
|
|
941
|
+
'form': 'meta:seen',
|
|
942
|
+
'iden': metaseen02,
|
|
943
|
+
'layer': forklayr,
|
|
944
|
+
'props': {'node': ('it:sec:cpe', invcpe02),
|
|
945
|
+
'source': source22},
|
|
946
|
+
'repr': (source22, ('it:sec:cpe', invcpe02)),
|
|
947
|
+
'sources': (),
|
|
948
|
+
'tags': (),
|
|
949
|
+
'view': fork00}),
|
|
950
|
+
(3,
|
|
951
|
+
{'data': (),
|
|
952
|
+
'form': 'meta:seen',
|
|
953
|
+
'iden': metaseen03,
|
|
954
|
+
'layer': forklayr,
|
|
955
|
+
'props': {'node': ('it:sec:cpe', invcpe02),
|
|
956
|
+
'source': source23},
|
|
957
|
+
'repr': (source23, ('it:sec:cpe', invcpe02)),
|
|
958
|
+
'sources': (),
|
|
959
|
+
'tags': (),
|
|
960
|
+
'view': fork00}),
|
|
961
|
+
(4,
|
|
962
|
+
{'data': (('cpe22', 'invalid'), ('cpe23', 'invalid')),
|
|
963
|
+
'form': 'it:sec:cpe',
|
|
964
|
+
'iden': badcpe00,
|
|
965
|
+
'layer': viewlayr,
|
|
966
|
+
'props': {'.seen': (1577836800000, 1609459200000),
|
|
967
|
+
'edition': '*',
|
|
968
|
+
'language': '*',
|
|
969
|
+
'other': '*',
|
|
970
|
+
'part': 'a',
|
|
971
|
+
'product': 'openssh',
|
|
972
|
+
'sw_edition': '*',
|
|
973
|
+
'target_hw': '*',
|
|
974
|
+
'target_sw': '*',
|
|
975
|
+
'update': '*',
|
|
976
|
+
'v2_2': 'cpe:/a:openbsd:openssh:7.4\r\n',
|
|
977
|
+
'vendor': 'openbsd',
|
|
978
|
+
'version': '7.4',
|
|
979
|
+
'_cpe22valid': 0,
|
|
980
|
+
'_cpe23valid': 0},
|
|
981
|
+
'repr': invcpe02,
|
|
982
|
+
'sources': (source23,
|
|
983
|
+
source22),
|
|
984
|
+
'tags': ('test', 'test.cpe', 'test.cpe.23invalid', 'test.cpe.22invalid'),
|
|
985
|
+
'view': view00}),
|
|
986
|
+
(5,
|
|
987
|
+
{'data': (),
|
|
988
|
+
'form': 'meta:seen',
|
|
989
|
+
'iden': metaseen04,
|
|
990
|
+
'layer': forklayr,
|
|
991
|
+
'props': {'node': ('it:sec:cpe', invcpe03),
|
|
992
|
+
'source': source23},
|
|
993
|
+
'repr': (source23, ('it:sec:cpe', invcpe03)),
|
|
994
|
+
'sources': (),
|
|
995
|
+
'tags': (),
|
|
996
|
+
'view': fork00}),
|
|
997
|
+
(6,
|
|
998
|
+
{'data': (),
|
|
999
|
+
'form': 'meta:seen',
|
|
1000
|
+
'iden': metaseen05,
|
|
1001
|
+
'layer': forklayr,
|
|
1002
|
+
'props': {'node': ('it:sec:cpe', invcpe03),
|
|
1003
|
+
'source': source22},
|
|
1004
|
+
'repr': (source22, ('it:sec:cpe', invcpe03)),
|
|
1005
|
+
'sources': (),
|
|
1006
|
+
'tags': (),
|
|
1007
|
+
'view': fork00}),
|
|
1008
|
+
(7,
|
|
1009
|
+
{'data': (('cpe22', 'invalid'), ('cpe23', 'invalid')),
|
|
1010
|
+
'form': 'it:sec:cpe',
|
|
1011
|
+
'iden': badcpe01,
|
|
1012
|
+
'layer': viewlayr,
|
|
1013
|
+
'props': {'.seen': (1577836800000, 1609459200000),
|
|
1014
|
+
'edition': '*',
|
|
1015
|
+
'language': '*',
|
|
1016
|
+
'other': '*',
|
|
1017
|
+
'part': 'a',
|
|
1018
|
+
'product': 'openssh',
|
|
1019
|
+
'sw_edition': '*',
|
|
1020
|
+
'target_hw': '*',
|
|
1021
|
+
'target_sw': '*',
|
|
1022
|
+
'update': '*',
|
|
1023
|
+
'v2_2': 'cpe:/a:openbsd:openssh:8.2p1 ubuntu-4ubuntu0.2',
|
|
1024
|
+
'vendor': 'openbsd',
|
|
1025
|
+
'version': '8.2p1 ubuntu-4ubuntu0.2',
|
|
1026
|
+
'_cpe22valid': 0,
|
|
1027
|
+
'_cpe23valid': 0},
|
|
1028
|
+
'repr': invcpe03,
|
|
1029
|
+
'sources': (source23,
|
|
1030
|
+
source22),
|
|
1031
|
+
'tags': ('test', 'test.cpe', 'test.cpe.23invalid', 'test.cpe.22invalid'),
|
|
1032
|
+
'view': view00}),
|
|
1033
|
+
(8,
|
|
1034
|
+
{'data': (),
|
|
1035
|
+
'form': 'meta:seen',
|
|
1036
|
+
'iden': metaseen06,
|
|
1037
|
+
'layer': forklayr,
|
|
1038
|
+
'props': {'node': ('it:sec:cpe', invcpe04),
|
|
1039
|
+
'source': source23},
|
|
1040
|
+
'repr': (source23, ('it:sec:cpe', invcpe04)),
|
|
1041
|
+
'sources': (),
|
|
1042
|
+
'tags': (),
|
|
1043
|
+
'view': fork00}),
|
|
1044
|
+
(9,
|
|
1045
|
+
{'data': (),
|
|
1046
|
+
'form': 'meta:seen',
|
|
1047
|
+
'iden': metaseen07,
|
|
1048
|
+
'layer': forklayr,
|
|
1049
|
+
'props': {'node': ('it:sec:cpe', invcpe05),
|
|
1050
|
+
'source': source23},
|
|
1051
|
+
'repr': (source23, ('it:sec:cpe', invcpe05)),
|
|
1052
|
+
'sources': (),
|
|
1053
|
+
'tags': (),
|
|
1054
|
+
'view': fork00}),
|
|
1055
|
+
])
|
|
1056
|
+
|
|
1057
|
+
q = '''
|
|
1058
|
+
$ret = ([])
|
|
1059
|
+
$q = $lib.queue.get('model_0_2_28:nodes:refs')
|
|
1060
|
+
for $ii in $lib.range(($q.size())) {
|
|
1061
|
+
$ret.append($q.get($ii, cull=(false), wait=(false)))
|
|
1062
|
+
}
|
|
1063
|
+
fini { return($ret) }
|
|
1064
|
+
'''
|
|
1065
|
+
refsq = await core.callStorm(q)
|
|
1066
|
+
self.eq(refsq, [
|
|
1067
|
+
(0,
|
|
1068
|
+
{'iden': metaseen00,
|
|
1069
|
+
'refs': ({'iden': '86288a55af26e1314ae60e12c54c02f4af2e22ed1580166b39f5352762856335',
|
|
1070
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1071
|
+
'view': fork00}),
|
|
1072
|
+
(1,
|
|
1073
|
+
{'iden': metaseen01,
|
|
1074
|
+
'refs': ({'iden': '1e0ce923f3dbd57b11d5d95cc5d6d1ccd4de4aba9b6534d57eaa0a2433af9430',
|
|
1075
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1076
|
+
'view': fork00}),
|
|
1077
|
+
(2,
|
|
1078
|
+
{'iden': badcpe00,
|
|
1079
|
+
'refs': ({'iden': 'd2c0737b821ba0a699e1ff168e2bf1677590dbf677ce7e5c02894f8868ae080a',
|
|
1080
|
+
'refinfo': ('risk:vulnerable', 'node', 'ndef', False)},),
|
|
1081
|
+
'view': view00}),
|
|
1082
|
+
(3,
|
|
1083
|
+
{'iden': badcpe00,
|
|
1084
|
+
'refs': ({'iden': '7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7',
|
|
1085
|
+
'refinfo': ('inet:flow', 'src:cpes', 'it:sec:cpe', True)},),
|
|
1086
|
+
'view': fork00}),
|
|
1087
|
+
(4,
|
|
1088
|
+
{'iden': metaseen02,
|
|
1089
|
+
'refs': ({'iden': '11f7e64a8dd8aa5f2a9b52c0e95783da4b7486452aff74dfcf80814f72507f88',
|
|
1090
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1091
|
+
'view': fork00}),
|
|
1092
|
+
(5,
|
|
1093
|
+
{'iden': metaseen03,
|
|
1094
|
+
'refs': ({'iden': 'b209cfe6fb7167cc7dbae9df50894c2614cb9e179e5b3a4fd85fbcf7fa31a9dd',
|
|
1095
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1096
|
+
'view': fork00}),
|
|
1097
|
+
(6,
|
|
1098
|
+
{'iden': badcpe01,
|
|
1099
|
+
'refs': ({'iden': '5fddf1b5fa06aa8a39a1eb297712cecf9ca146764c4d6e5c79296b9e9978d2c3',
|
|
1100
|
+
'refinfo': ('risk:vulnerable', 'node', 'ndef', False)},),
|
|
1101
|
+
'view': view00}),
|
|
1102
|
+
(7,
|
|
1103
|
+
{'iden': badcpe01,
|
|
1104
|
+
'refs': ({'iden': '9742664e24fe1a3a37d871b1f62af27453c2945b98f421d753db8436e9a44cc9',
|
|
1105
|
+
'refinfo': ('it:prod:soft', 'cpe', 'it:sec:cpe', False)},),
|
|
1106
|
+
'view': fork00}),
|
|
1107
|
+
(8,
|
|
1108
|
+
{'iden': badcpe01,
|
|
1109
|
+
'refs': ({'iden': '16e3289346a258c3e3073affad490c1d6ebf1d01295aacc489cdb24658ebc6e7',
|
|
1110
|
+
'refinfo': ('_ext:model:form', 'cpe', 'it:sec:cpe', False)},),
|
|
1111
|
+
'view': fork00}),
|
|
1112
|
+
(9,
|
|
1113
|
+
{'iden': badcpe01,
|
|
1114
|
+
'refs': ({'iden': '7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7',
|
|
1115
|
+
'refinfo': ('inet:flow', 'src:cpes', 'it:sec:cpe', True)},),
|
|
1116
|
+
'view': fork00}),
|
|
1117
|
+
(10,
|
|
1118
|
+
{'iden': metaseen04,
|
|
1119
|
+
'refs': ({'iden': '6d09c45666b3a14bf9d298079344d01c079e474423307da553d65ad9917556ae',
|
|
1120
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1121
|
+
'view': fork00}),
|
|
1122
|
+
(11,
|
|
1123
|
+
{'iden': metaseen05,
|
|
1124
|
+
'refs': ({'iden': '208ea1b5593aff3c9cb51c19374616fcd103ea2f554f0dd2a13652aadabb82ae',
|
|
1125
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1126
|
+
'view': fork00}),
|
|
1127
|
+
(12,
|
|
1128
|
+
{'iden': metaseen06,
|
|
1129
|
+
'refs': ({'iden': 'e3c389c194609a57cde68c21cac8ae1cd18e6a642e332461a3acd19138904239',
|
|
1130
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1131
|
+
'view': fork00}),
|
|
1132
|
+
(13,
|
|
1133
|
+
{'iden': metaseen07,
|
|
1134
|
+
'refs': ({'iden': '53ad1502b6f6de3d9d4efe72cc101cd3889e47323ac8db5e3fd39ae68c72f141',
|
|
1135
|
+
'refinfo': ('it:sec:vuln:scan:result', 'asset', 'ndef', False)},),
|
|
1136
|
+
'view': fork00}),
|
|
1137
|
+
])
|
|
1138
|
+
|
|
1139
|
+
riskvuln00 = await core.callStorm('risk:vuln return($node.iden())')
|
|
1140
|
+
q = '''
|
|
1141
|
+
$ret = ([])
|
|
1142
|
+
$q = $lib.queue.get('model_0_2_28:nodes:edges')
|
|
1143
|
+
for $ii in $lib.range(($q.size())) {
|
|
1144
|
+
$ret.append($q.get($ii, cull=(false), wait=(false)))
|
|
1145
|
+
}
|
|
1146
|
+
fini { return($ret) }
|
|
1147
|
+
'''
|
|
1148
|
+
edgesq = await core.callStorm(q)
|
|
1149
|
+
self.eq(edgesq, [
|
|
1150
|
+
(0,
|
|
1151
|
+
{'direction': 'n1',
|
|
1152
|
+
'edges': (('refs', riskvuln00),),
|
|
1153
|
+
'iden': badcpe00,
|
|
1154
|
+
'view': view00}),
|
|
1155
|
+
(1,
|
|
1156
|
+
{'direction': 'n2',
|
|
1157
|
+
'edges': (('seen', source23iden), ('seen', source22iden)),
|
|
1158
|
+
'iden': badcpe00,
|
|
1159
|
+
'view': fork00}),
|
|
1160
|
+
(2,
|
|
1161
|
+
{'direction': 'n1',
|
|
1162
|
+
'edges': (('refs', riskvuln00),),
|
|
1163
|
+
'iden': badcpe01,
|
|
1164
|
+
'view': view00}),
|
|
1165
|
+
(3,
|
|
1166
|
+
{'direction': 'n2',
|
|
1167
|
+
'edges': (('seen', source23iden), ('seen', source22iden)),
|
|
1168
|
+
'iden': badcpe01,
|
|
1169
|
+
'view': fork00}),
|
|
1170
|
+
])
|
|
1171
|
+
|
|
1172
|
+
async def test_modelrev_0_2_29(self):
|
|
1173
|
+
async with self.getRegrCore('model-0.2.29') as core:
|
|
1174
|
+
self.len(2, await core.nodes('ou:industry:type:taxonomy'))
|
|
1175
|
+
|
|
1176
|
+
async def test_modelrev_0_2_30(self):
|
|
1177
|
+
async with self.getRegrCore('model-0.2.30') as core:
|
|
1178
|
+
q = '''
|
|
1179
|
+
inet:ipv4=192.0.0.0 inet:ipv4=192.0.0.8 inet:ipv4=192.0.0.9 inet:ipv4=192.0.0.10 inet:ipv4=192.0.0.255
|
|
1180
|
+
'''
|
|
1181
|
+
nodes = await core.nodes(q)
|
|
1182
|
+
typz = [node.get('type') for node in nodes]
|
|
1183
|
+
self.eq(typz, ['private', 'private', 'unicast', 'unicast', 'private'])
|
|
1184
|
+
|
|
1185
|
+
q = '''
|
|
1186
|
+
inet:ipv6="64:ff9b:1::" inet:ipv6="64:ff9b:1::1" inet:ipv6="64:ff9b:1::ffff" inet:ipv6="64:ff9b:1::ffff:1"
|
|
1187
|
+
'''
|
|
1188
|
+
nodes = await core.nodes(q)
|
|
1189
|
+
typz = [node.get('type') for node in nodes]
|
|
1190
|
+
self.eq(typz, ['private', 'private', 'private', 'private'])
|
|
1191
|
+
|
|
1192
|
+
q = '''
|
|
1193
|
+
inet:ipv6="2002::" inet:ipv6="2002::1" inet:ipv6="2002::fffe" inet:ipv6="2002::ffff"
|
|
1194
|
+
'''
|
|
1195
|
+
nodes = await core.nodes(q)
|
|
1196
|
+
typz = [node.get('type') for node in nodes]
|
|
1197
|
+
self.eq(typz, ['private', 'private', 'private', 'private'])
|
|
1198
|
+
|
|
1199
|
+
q = 'inet:ipv6="2001:1::1/128" inet:ipv6="2001:1::2/128"'
|
|
1200
|
+
nodes = await core.nodes(q)
|
|
1201
|
+
typz = [node.get('type') for node in nodes]
|
|
1202
|
+
self.eq(typz, ['unicast', 'unicast'])
|
|
1203
|
+
|
|
1204
|
+
q = 'inet:ipv6="2001:3::" inet:ipv6="2001:3::1" inet:ipv6="2001:3::ffff"'
|
|
1205
|
+
nodes = await core.nodes(q)
|
|
1206
|
+
typz = [node.get('type') for node in nodes]
|
|
1207
|
+
self.eq(typz, ['unicast', 'unicast', 'unicast'])
|
|
1208
|
+
|
|
1209
|
+
q = 'inet:ipv6="2001:4:112::" inet:ipv6="2001:4:112::1" inet:ipv6="2001:4:112::ffff"'
|
|
1210
|
+
nodes = await core.nodes(q)
|
|
1211
|
+
typz = [node.get('type') for node in nodes]
|
|
1212
|
+
self.eq(typz, ['unicast', 'unicast', 'unicast'])
|
|
1213
|
+
|
|
1214
|
+
q = 'inet:ipv6="2001:20::" inet:ipv6="2001:20::1" inet:ipv6="2001:20::ffff"'
|
|
1215
|
+
nodes = await core.nodes(q)
|
|
1216
|
+
typz = [node.get('type') for node in nodes]
|
|
1217
|
+
self.eq(typz, ['unicast', 'unicast', 'unicast'])
|
|
1218
|
+
|
|
1219
|
+
q = 'inet:ipv6="2001:30::" inet:ipv6="2001:30::1" inet:ipv6="2001:30::ffff"'
|
|
1220
|
+
nodes = await core.nodes(q)
|
|
1221
|
+
typz = [node.get('type') for node in nodes]
|
|
1222
|
+
self.eq(typz, ['unicast', 'unicast', 'unicast'])
|