Source code for stix2generator.test.test_object_generator_misc
import pytest
import stix2generator.exceptions
import stix2generator.generation.object_generator
[docs]def test_one_of(object_generator, num_trials):
for _ in range(num_trials):
value = object_generator.generate_from_spec({
"type": "integer",
"oneOf": [1, 2]
})
assert value == 1 or value == 2
[docs]def test_ref():
registry = {
"spec1": {
"type": "integer",
"ref": "spec2"
},
"spec2": 1
}
generator = stix2generator.generation.object_generator.ObjectGenerator(
registry
)
value = generator.generate("spec1")
assert value == 1
[docs]def test_ref_type_error():
with pytest.raises(stix2generator.exceptions.TypeMismatchError):
registry = {
"spec1": {
"type": "string",
# refs to an int spec instead of a string!
"ref": "spec2"
},
"spec2": 1
}
generator = stix2generator.generation.object_generator.ObjectGenerator(
registry
)
generator.generate("spec1")
[docs]def test_ref_loop_error():
with pytest.raises(
stix2generator.exceptions.CyclicSpecificationReferenceError
):
registry = {
"spec1": {
"type": "string",
"ref": "spec2"
},
"spec2": {
"type": "string",
"ref": "spec1"
}
}
generator = stix2generator.generation.object_generator.ObjectGenerator(
registry
)
generator.generate("spec1")
[docs]def test_unrecognized_spec_error(object_generator):
with pytest.raises(stix2generator.exceptions.SpecificationNotFoundError):
object_generator.generate("foo")
[docs]def test_const_spec_1(object_generator):
# Any non-dict spec generates itself
value = object_generator.generate_from_spec(1)
assert value == 1
[docs]def test_const_spec_2(object_generator):
# A "const" property is another way to generate a constant value
value = object_generator.generate_from_spec({
"const": {
"a": 1,
"b": 2
}
})
assert value == {"a": 1, "b": 2}
[docs]def test_const_bad_type_1(object_generator):
with pytest.raises(stix2generator.exceptions.ObjectGenerationError):
# const specs must be a JSON type
object_generator.generate_from_spec(object())
[docs]def test_const_bad_type_2(object_generator):
with pytest.raises(stix2generator.exceptions.ObjectGenerationError):
# const specs must be a JSON type
object_generator.generate_from_spec({
"const": object()
})
[docs]def test_bad_type_property(object_generator):
with pytest.raises(stix2generator.exceptions.UnrecognizedJSONTypeError):
object_generator.generate_from_spec({
"type": "foo"
})
[docs]def test_missing_type_property(object_generator):
with pytest.raises(stix2generator.exceptions.ObjectGenerationError):
object_generator.generate_from_spec({
"a": 1
})