def test_set_call_prefix_validator():
    mv = MetadataValidatorSet([
        MetadataValidator('p1',
                          prefix_validators=[
                              lambda p, k, v: (p, k, v, 1), lambda p, k, v:
                              (p, k, v, 2)
                          ]),
        MetadataValidator('p2',
                          prefix_validators=[lambda p, k, v: (p, k, v, 3)])
    ])
    assert mv.call_prefix_validator('p1', 0, 'key1',
                                    {'foo', 'bar'}) == ('p1', 'key1',
                                                        {'foo', 'bar'}, 1)
    assert mv.call_prefix_validator('p1', 1, 'key11',
                                    {'foo', 'bat'}) == ('p1', 'key11',
                                                        {'foo', 'bat'}, 2)
    assert mv.call_prefix_validator('p2', 0, 'key2',
                                    {'foo', 'baz'}) == ('p2', 'key2',
                                                        {'foo', 'baz'}, 3)
def _call_prefix_validator_fail(vals, prefix, index, key, expected):
    mv = MetadataValidatorSet(vals)
    with raises(Exception) as got:
        mv.call_prefix_validator(prefix, index, key, {})
    assert_exception_correct(got.value, expected)