schema: Allow objects registering their own schema types
Change-Id: I998c8674a55531909bfeac420064c3f238cea126
diff --git a/selftest/schema_test/schema_case_06.conf b/selftest/schema_test/schema_case_06.conf
new file mode 100644
index 0000000..ea7f45f
--- /dev/null
+++ b/selftest/schema_test/schema_case_06.conf
@@ -0,0 +1,29 @@
+schema:
+ handover:
+ threshold: 'uint'
+ myvar: 'test_type'
+ anothervar: 'another_type'
+
+tests:
+ - foobar:
+ prefix:
+ handover:
+ myvar: 'valid_value1'
+ anothervar: 'unique_val_ok'
+ threshold: 2
+ - foobar:
+ prefix:
+ handover:
+ myvar: 'valid_value2'
+ - foobar:
+ prefix:
+ handover:
+ threshold: 0
+ - foobar:
+ prefix:
+ handover:
+ myvar: 'invalid_val'
+ - foobar:
+ prefix:
+ handover:
+ anothervar: 'another_invalid_val'
diff --git a/selftest/schema_test/schema_test.ok b/selftest/schema_test/schema_test.ok
index 2c4cd6a..846caae 100644
--- a/selftest/schema_test/schema_test.ok
+++ b/selftest/schema_test/schema_test.ok
@@ -61,3 +61,20 @@
--- -: ERR: ValueError: config item is a list, should be 'str': 'foobar.prefix.hey.ho.letsgo[]'
Validation: Error
----------------------
+schema_case_06.conf:
+{'foobar.prefix.handover.anothervar': 'another_type',
+ 'foobar.prefix.handover.myvar': 'test_type',
+ 'foobar.prefix.handover.threshold': 'uint'}
+validating tests[0]
+Validation: OK
+validating tests[1]
+Validation: OK
+validating tests[2]
+Validation: OK
+validating tests[3]
+--- foobar.prefix.handover.myvar: ERR: ValueError: Invalid value 'invalid_val' for schema type 'test_type' (validator: test_validator)
+Validation: Error
+validating tests[4]
+--- foobar.prefix.handover.anothervar: ERR: ValueError: Invalid value 'another_invalid_val' for schema type 'another_type' (validator: <lambda>)
+Validation: Error
+----------------------
diff --git a/selftest/schema_test/schema_test.py b/selftest/schema_test/schema_test.py
index 3cf2799..bffa601 100755
--- a/selftest/schema_test/schema_test.py
+++ b/selftest/schema_test/schema_test.py
@@ -25,6 +25,13 @@
li.append(f)
return sorted(li)
+def test_validator(val):
+ return val in ('valid_value1', 'valid_value2')
+
+schema.register_schema_types({'test_type': test_validator,
+ 'another_type': lambda val: val == 'unique_val_ok'})
+
+
print('==== Testing dynamically generated schemas ====')
for f in get_case_list(_prep.script_dir):
print('%s:' % f)