From 2966efa4f0418ea605a5cdce6409032a45534d18 Mon Sep 17 00:00:00 2001 From: Chris Lenk Date: Mon, 7 Jan 2019 11:15:47 -0500 Subject: [PATCH 1/4] Remove dictionary/extension property non-empty req Only bundle.objects and observed-data.objects have a requirement to include at least one item. --- stix2/properties.py | 4 ---- stix2/test/v20/test_observed_data.py | 9 --------- stix2/test/v20/test_properties.py | 1 - stix2/test/v21/test_observed_data.py | 9 --------- stix2/test/v21/test_properties.py | 1 - 5 files changed, 24 deletions(-) diff --git a/stix2/properties.py b/stix2/properties.py index 24549aa..7202f9a 100644 --- a/stix2/properties.py +++ b/stix2/properties.py @@ -291,8 +291,6 @@ class DictionaryProperty(Property): dictified = _get_dict(value) except ValueError: raise ValueError("The dictionary property must contain a dictionary") - if dictified == {}: - raise ValueError("The dictionary property must contain a non-empty dictionary") for k in dictified.keys(): if self.spec_version == '2.0': if len(k) < 3: @@ -498,8 +496,6 @@ class ExtensionsProperty(DictionaryProperty): dictified = copy.deepcopy(dictified) except ValueError: raise ValueError("The extensions property must contain a dictionary") - if dictified == {}: - raise ValueError("The extensions property must contain a non-empty dictionary") v = 'v' + self.spec_version.replace('.', '') diff --git a/stix2/test/v20/test_observed_data.py b/stix2/test/v20/test_observed_data.py index 41a80d6..b922c81 100644 --- a/stix2/test/v20/test_observed_data.py +++ b/stix2/test/v20/test_observed_data.py @@ -1140,15 +1140,6 @@ def test_process_example_windows_process_ext_empty(): assert excinfo.value.properties == sorted(properties_of_extension) -def test_process_example_extensions_empty(): - with pytest.raises(stix2.exceptions.InvalidValueError) as excinfo: - stix2.v20.Process(extensions={}) - - assert excinfo.value.cls == stix2.v20.Process - assert excinfo.value.prop_name == 'extensions' - assert 'non-empty dictionary' in excinfo.value.reason - - def test_process_example_with_WindowsProcessExt_Object(): p = stix2.v20.Process(extensions={ "windows-process-ext": stix2.v20.WindowsProcessExt( diff --git a/stix2/test/v20/test_properties.py b/stix2/test/v20/test_properties.py index 24c1c99..e9a513e 100644 --- a/stix2/test/v20/test_properties.py +++ b/stix2/test/v20/test_properties.py @@ -360,7 +360,6 @@ def test_dictionary_property_invalid_key(d): @pytest.mark.parametrize( "d", [ - ({}, "The dictionary property must contain a non-empty dictionary"), # TODO: This error message could be made more helpful. The error is caused # because `json.loads()` doesn't like the *single* quotes around the key # name, even though they are valid in a Python dictionary. While technically diff --git a/stix2/test/v21/test_observed_data.py b/stix2/test/v21/test_observed_data.py index 5a5881a..c859aed 100644 --- a/stix2/test/v21/test_observed_data.py +++ b/stix2/test/v21/test_observed_data.py @@ -1114,15 +1114,6 @@ def test_process_example_windows_process_ext_empty(): assert excinfo.value.properties == sorted(properties_of_extension) -def test_process_example_extensions_empty(): - with pytest.raises(stix2.exceptions.InvalidValueError) as excinfo: - stix2.v21.Process(extensions={}) - - assert excinfo.value.cls == stix2.v21.Process - assert excinfo.value.prop_name == 'extensions' - assert 'non-empty dictionary' in excinfo.value.reason - - def test_process_example_with_WindowsProcessExt_Object(): p = stix2.v21.Process(extensions={ "windows-process-ext": stix2.v21.WindowsProcessExt( diff --git a/stix2/test/v21/test_properties.py b/stix2/test/v21/test_properties.py index 611ec5e..298a8df 100644 --- a/stix2/test/v21/test_properties.py +++ b/stix2/test/v21/test_properties.py @@ -369,7 +369,6 @@ def test_dictionary_property_invalid_key(d): @pytest.mark.parametrize( "d", [ - ({}, "The dictionary property must contain a non-empty dictionary"), # TODO: This error message could be made more helpful. The error is caused # because `json.loads()` doesn't like the *single* quotes around the key # name, even though they are valid in a Python dictionary. While technically From ab687d8d0e8e8acef86de1c0014bc7b28ae7bf10 Mon Sep 17 00:00:00 2001 From: Chris Lenk Date: Mon, 7 Jan 2019 15:22:08 -0500 Subject: [PATCH 2/4] Test empty extension property serialization --- stix2/test/v20/test_observed_data.py | 10 ++++++++++ stix2/test/v21/test_observed_data.py | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/stix2/test/v20/test_observed_data.py b/stix2/test/v20/test_observed_data.py index b922c81..17d732e 100644 --- a/stix2/test/v20/test_observed_data.py +++ b/stix2/test/v20/test_observed_data.py @@ -1140,6 +1140,16 @@ def test_process_example_windows_process_ext_empty(): assert excinfo.value.properties == sorted(properties_of_extension) +def test_process_example_extensions_empty(): + proc = stix2.v20.Process( + pid=314, + name="foobar.exe", + extensions={}, + ) + + assert '{}' in str(proc) + + def test_process_example_with_WindowsProcessExt_Object(): p = stix2.v20.Process(extensions={ "windows-process-ext": stix2.v20.WindowsProcessExt( diff --git a/stix2/test/v21/test_observed_data.py b/stix2/test/v21/test_observed_data.py index c859aed..d3ecde8 100644 --- a/stix2/test/v21/test_observed_data.py +++ b/stix2/test/v21/test_observed_data.py @@ -1114,6 +1114,16 @@ def test_process_example_windows_process_ext_empty(): assert excinfo.value.properties == sorted(properties_of_extension) +def test_process_example_extensions_empty(): + proc = stix2.v20.Process( + pid=314, + name="foobar.exe", + extensions={}, + ) + + assert '{}' in str(proc) + + def test_process_example_with_WindowsProcessExt_Object(): p = stix2.v21.Process(extensions={ "windows-process-ext": stix2.v21.WindowsProcessExt( From 67d3970a507a578aacfdac166028189d5fc9178f Mon Sep 17 00:00:00 2001 From: Emmanuelle Vargas-Gonzalez Date: Tue, 8 Jan 2019 09:35:01 -0500 Subject: [PATCH 3/4] Update test_observed_data.py Change to correct version --- stix2/test/v21/test_observed_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stix2/test/v21/test_observed_data.py b/stix2/test/v21/test_observed_data.py index d3ecde8..69b170a 100644 --- a/stix2/test/v21/test_observed_data.py +++ b/stix2/test/v21/test_observed_data.py @@ -1115,7 +1115,7 @@ def test_process_example_windows_process_ext_empty(): def test_process_example_extensions_empty(): - proc = stix2.v20.Process( + proc = stix2.v21.Process( pid=314, name="foobar.exe", extensions={}, From 26a658b7899aa857cdc10e9b3b3ee67c1ed819bd Mon Sep 17 00:00:00 2001 From: Emmanuelle Vargas-Gonzalez Date: Tue, 8 Jan 2019 09:41:53 -0500 Subject: [PATCH 4/4] Update test to v21 --- stix2/test/v21/test_observed_data.py | 1 - 1 file changed, 1 deletion(-) diff --git a/stix2/test/v21/test_observed_data.py b/stix2/test/v21/test_observed_data.py index 69b170a..d2aaf52 100644 --- a/stix2/test/v21/test_observed_data.py +++ b/stix2/test/v21/test_observed_data.py @@ -1117,7 +1117,6 @@ def test_process_example_windows_process_ext_empty(): def test_process_example_extensions_empty(): proc = stix2.v21.Process( pid=314, - name="foobar.exe", extensions={}, )