add tests to cover the language aspect of the markings
parent
4bbabaecb2
commit
0c78acafd0
|
@ -31,6 +31,12 @@ MARKING_IDS = [
|
|||
"marking-definition--68520ae2-fefe-43a9-84ee-2c2a934d2c7d",
|
||||
"marking-definition--2802dfb1-1019-40a8-8848-68d0ec0e417f",
|
||||
]
|
||||
MARKING_LANGS = [
|
||||
"en",
|
||||
"es",
|
||||
"de",
|
||||
"ja",
|
||||
]
|
||||
RELATIONSHIP_IDS = [
|
||||
'relationship--06520621-5352-4e6a-b976-e8fa3d437ffd',
|
||||
'relationship--181c9c09-43e6-45dd-9374-3bec192f05ef',
|
||||
|
|
|
@ -5,7 +5,7 @@ from stix2.exceptions import MarkingNotFoundError
|
|||
from stix2.v21 import TLP_RED, Malware
|
||||
|
||||
from .constants import MALWARE_MORE_KWARGS as MALWARE_KWARGS_CONST
|
||||
from .constants import MARKING_IDS
|
||||
from .constants import MARKING_IDS, MARKING_LANGS
|
||||
|
||||
"""Tests for the Data Markings API."""
|
||||
|
||||
|
@ -111,6 +111,37 @@ def test_add_marking_mark_multiple_selector_multiple_refs():
|
|||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_add_marking_mark_multiple_selector_multiple_refs_mixed():
|
||||
before = Malware(
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
after = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description", "name"],
|
||||
"marking_ref": MARKING_IDS[0],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "name"],
|
||||
"marking_ref": MARKING_IDS[1],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "name"],
|
||||
"lang": MARKING_LANGS[0],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "name"],
|
||||
"lang": MARKING_LANGS[1],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
before = markings.add_markings(before, [MARKING_IDS[0], MARKING_IDS[1], MARKING_LANGS[0], MARKING_LANGS[1]], ["description", "name"])
|
||||
|
||||
for m in before["granular_markings"]:
|
||||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_add_marking_mark_another_property_same_marking():
|
||||
before = Malware(
|
||||
granular_markings=[
|
||||
|
@ -376,6 +407,98 @@ def test_get_markings_positional_arguments_combinations(data):
|
|||
assert set(markings.get_markings(data, "x.z.foo2", False, True)) == set(["10"])
|
||||
|
||||
|
||||
GET_MARKINGS_TEST_DATA_LANGS = {
|
||||
"a": 333,
|
||||
"b": "value",
|
||||
"c": [
|
||||
17,
|
||||
"list value",
|
||||
{
|
||||
"g": "nested",
|
||||
"h": 45,
|
||||
},
|
||||
],
|
||||
"x": {
|
||||
"y": [
|
||||
"hello",
|
||||
88,
|
||||
],
|
||||
"z": {
|
||||
"foo1": "bar",
|
||||
"foo2": 65,
|
||||
},
|
||||
},
|
||||
"granular_markings": [
|
||||
{
|
||||
"marking_ref": "m1",
|
||||
"selectors": ["a"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m2",
|
||||
"selectors": ["c"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m3",
|
||||
"selectors": ["c.[1]"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m4",
|
||||
"selectors": ["c.[2]"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m5",
|
||||
"selectors": ["c.[2].g"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m6",
|
||||
"selectors": ["x"],
|
||||
},
|
||||
{
|
||||
"lang": "l7",
|
||||
"selectors": ["x.y"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m8",
|
||||
"selectors": ["x.y.[1]"],
|
||||
},
|
||||
{
|
||||
"lang": "l9",
|
||||
"selectors": ["x.z"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m9",
|
||||
"selectors": ["x.z"],
|
||||
},
|
||||
{
|
||||
"marking_ref": "m10",
|
||||
"selectors": ["x.z.foo2"],
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("data", [GET_MARKINGS_TEST_DATA_LANGS])
|
||||
def test_get_markings_multiple_selectors(data):
|
||||
"""Test multiple selectors return combination of markings."""
|
||||
total = markings.get_markings(data, ["x.y", "x.z"])
|
||||
xy_markings = markings.get_markings(data, ["x.y"])
|
||||
xz_markings = markings.get_markings(data, ["x.z"])
|
||||
|
||||
assert set(xy_markings).issubset(total)
|
||||
assert set(xz_markings).issubset(total)
|
||||
assert set(xy_markings).union(xz_markings).issuperset(total)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("data", [GET_MARKINGS_TEST_DATA_LANGS])
|
||||
def test_get_markings_multiple_selectors_with_options(data):
|
||||
"""Test multiple selectors return combination of markings."""
|
||||
total = markings.get_markings(data, ["x.y", "x.z"], lang=False)
|
||||
xz_markings = markings.get_markings(data, ["x.z"], marking_ref=False)
|
||||
|
||||
assert len(total) == 1
|
||||
assert len(xz_markings) == 1
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"data", [
|
||||
(
|
||||
|
@ -455,6 +578,38 @@ def test_remove_marking_mark_one_selector_from_multiple_ones():
|
|||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_remove_marking_mark_one_selector_from_multiple_ones_mixed():
|
||||
after = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description"],
|
||||
"marking_ref": MARKING_IDS[0],
|
||||
},
|
||||
{
|
||||
"selectors": ["description"],
|
||||
"lang": MARKING_LANGS[0],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
before = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"marking_ref": MARKING_IDS[0],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"lang": MARKING_LANGS[0],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
before = markings.remove_markings(before, [MARKING_IDS[0], MARKING_LANGS[0]], ["modified"])
|
||||
for m in before["granular_markings"]:
|
||||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_remove_marking_mark_one_selector_markings_from_multiple_ones():
|
||||
after = Malware(
|
||||
granular_markings=[
|
||||
|
@ -592,6 +747,10 @@ IS_MARKED_TEST_DATA = [
|
|||
"selectors": ["malware_types", "description"],
|
||||
"marking_ref": MARKING_IDS[3],
|
||||
},
|
||||
{
|
||||
"selectors": ["name"],
|
||||
"lang": MARKING_LANGS[1],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
),
|
||||
|
@ -609,6 +768,10 @@ IS_MARKED_TEST_DATA = [
|
|||
"selectors": ["malware_types", "description"],
|
||||
"marking_ref": MARKING_IDS[3],
|
||||
},
|
||||
{
|
||||
"selectors": ["name"],
|
||||
"lang": MARKING_LANGS[1],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
),
|
||||
|
@ -620,6 +783,7 @@ def test_is_marked_smoke(data):
|
|||
"""Smoke test is_marked call does not fail."""
|
||||
assert markings.is_marked(data, selectors=["description"])
|
||||
assert markings.is_marked(data, selectors=["modified"]) is False
|
||||
assert markings.is_marked(data, selectors=["name"])
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
@ -666,6 +830,7 @@ def test_is_marked_valid_selector_and_refs(data):
|
|||
"""Test that a valid selector returns True when marking_refs match."""
|
||||
assert markings.is_marked(data, [MARKING_IDS[1]], ["description"])
|
||||
assert markings.is_marked(data, [MARKING_IDS[1]], ["modified"]) is False
|
||||
assert markings.is_marked(data, [MARKING_LANGS[1]], ["name"])
|
||||
|
||||
|
||||
@pytest.mark.parametrize("data", IS_MARKED_TEST_DATA)
|
||||
|
@ -870,6 +1035,28 @@ def test_set_marking_mark_one_selector_multiple_refs():
|
|||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_set_marking_mark_one_selector_multiple_lang_refs():
|
||||
before = Malware(
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
after = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description"],
|
||||
"lang": MARKING_LANGS[0],
|
||||
},
|
||||
{
|
||||
"selectors": ["description"],
|
||||
"lang": MARKING_LANGS[1],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
before = markings.set_markings(before, [MARKING_LANGS[0], MARKING_LANGS[1]], ["description"])
|
||||
for m in before["granular_markings"]:
|
||||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_set_marking_mark_multiple_selector_one_refs():
|
||||
before = Malware(
|
||||
granular_markings=[
|
||||
|
@ -894,6 +1081,38 @@ def test_set_marking_mark_multiple_selector_one_refs():
|
|||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_set_marking_mark_multiple_mixed_markings():
|
||||
before = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"marking_ref": MARKING_IDS[1],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"lang": MARKING_LANGS[2],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
after = Malware(
|
||||
granular_markings=[
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"marking_ref": MARKING_IDS[2],
|
||||
},
|
||||
{
|
||||
"selectors": ["description", "modified"],
|
||||
"lang": MARKING_LANGS[3],
|
||||
},
|
||||
],
|
||||
**MALWARE_KWARGS
|
||||
)
|
||||
before = markings.set_markings(before, [MARKING_IDS[2], MARKING_LANGS[3]], ["description", "modified"])
|
||||
for m in before["granular_markings"]:
|
||||
assert m in after["granular_markings"]
|
||||
|
||||
|
||||
def test_set_marking_mark_multiple_selector_multiple_refs_from_none():
|
||||
before = Malware(
|
||||
**MALWARE_KWARGS
|
||||
|
|
|
@ -54,7 +54,7 @@ EXPECTED_GRANULAR_MARKING = """{
|
|||
]
|
||||
}"""
|
||||
|
||||
EXPECTED_CAMPAIGN_WITH_GRANULAR_MARKINGS = """{
|
||||
EXPECTED_CAMPAIGN_WITH_GRANULAR_REF_MARKINGS = """{
|
||||
"type": "campaign",
|
||||
"spec_version": "2.1",
|
||||
"id": "campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
|
||||
|
@ -74,6 +74,27 @@ EXPECTED_CAMPAIGN_WITH_GRANULAR_MARKINGS = """{
|
|||
}"""
|
||||
|
||||
|
||||
EXPECTED_CAMPAIGN_WITH_GRANULAR_LANG_MARKINGS = """{
|
||||
"type": "campaign",
|
||||
"spec_version": "2.1",
|
||||
"id": "campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
|
||||
"created_by_ref": "identity--311b2d2d-f010-4473-83ec-1edf84858f4c",
|
||||
"created": "2016-04-06T20:03:00.000Z",
|
||||
"modified": "2016-04-06T20:03:00.000Z",
|
||||
"name": "Bank Attack",
|
||||
"description": "Weitere Informationen über Banküberfall",
|
||||
"lang": "en",
|
||||
"granular_markings": [
|
||||
{
|
||||
"lang": "de",
|
||||
"selectors": [
|
||||
"description"
|
||||
]
|
||||
}
|
||||
]
|
||||
}"""
|
||||
|
||||
|
||||
def test_marking_def_example_with_tlp():
|
||||
assert str(TLP_WHITE) == EXPECTED_TLP_MARKING_DEFINITION
|
||||
|
||||
|
@ -161,7 +182,7 @@ def test_campaign_with_granular_markings_example():
|
|||
),
|
||||
],
|
||||
)
|
||||
assert str(campaign) == EXPECTED_CAMPAIGN_WITH_GRANULAR_MARKINGS
|
||||
assert str(campaign) == EXPECTED_CAMPAIGN_WITH_GRANULAR_REF_MARKINGS
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
@ -273,3 +294,26 @@ def test_campaign_add_markings():
|
|||
)
|
||||
campaign = campaign.add_markings(TLP_WHITE)
|
||||
assert campaign.object_marking_refs[0] == TLP_WHITE.id
|
||||
|
||||
|
||||
def test_campaign_with_granular_lang_markings_example():
|
||||
campaign = stix2.v21.Campaign(
|
||||
id="campaign--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
|
||||
created_by_ref=IDENTITY_ID,
|
||||
created="2016-04-06T20:03:00Z",
|
||||
modified="2016-04-06T20:03:00Z",
|
||||
name="Bank Attack",
|
||||
lang="en",
|
||||
description="Weitere Informationen über Banküberfall",
|
||||
granular_markings=[
|
||||
stix2.v21.GranularMarking(
|
||||
lang="de",
|
||||
selectors=["description"],
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
# In order to provide the same representation, we need to disable escaping
|
||||
# in json.dumps(). https://docs.python.org/3/library/json.html#json.dumps
|
||||
# or https://docs.python.org/2/library/json.html#json.dumps
|
||||
assert campaign.serialize(pretty=True, ensure_ascii=False) == EXPECTED_CAMPAIGN_WITH_GRANULAR_LANG_MARKINGS
|
||||
|
|
Loading…
Reference in New Issue