def test_compile_oneway_with_return_type(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile(parse(''' service Foo { oneway string foo(); } ''')) assert 'Function "Foo.foo" is oneway' in str(exc_info) assert 'It cannot return a value' in str(exc_info)
def test_compile_oneway_with_exceptions(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile(parse(''' service Foo { oneway void foo() throws (1: SomeException exc); } ''')) assert 'Function "Foo.foo" is oneway' in str(exc_info) assert 'It cannot raise exceptions' in str(exc_info)
def test_compile_dupe_func(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile(parse(''' service Foo { void foo(); i32 foo(); } ''')) assert 'Function "Foo.foo" cannot be defined' in str(exc_info) assert 'name is already taken' in str(exc_info)
def test_compile_oneway_with_exceptions(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile( parse(''' service Foo { oneway void foo() throws (1: SomeException exc); } ''')) assert 'Function "Foo.foo" is oneway' in str(exc_info) assert 'It cannot raise exceptions' in str(exc_info)
def test_compile_oneway_with_return_type(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile( parse(''' service Foo { oneway string foo(); } ''')) assert 'Function "Foo.foo" is oneway' in str(exc_info) assert 'It cannot return a value' in str(exc_info)
def test_compile_dupe_func(parse): with pytest.raises(ThriftCompilerError) as exc_info: ServiceSpec.compile( parse(''' service Foo { void foo(); i32 foo(); } ''')) assert 'Function "Foo.foo" cannot be defined' in str(exc_info) assert 'name is already taken' in str(exc_info)
def test_compile(parse): spec = ServiceSpec.compile( parse(''' service KeyValue extends BaseService { void putItem( 1: string key, 2: Item item ) throws (1: ItemAlreadyExists alreadyExists); Item getItem( 1: string key ) throws (1: KeyDoesNotExist doesNotExist); bool healthy(); // Does not accept or return anything void noop(); } ''')) assert spec.name == 'KeyValue' assert spec.parent == ServiceReference('BaseService', 2) put_item_spec = spec.functions[0] get_item_spec = spec.functions[1] healthy_spec = spec.functions[2] noop_spec = spec.functions[3] assert put_item_spec.name == 'putItem' assert put_item_spec.args_spec.fields == [ FieldSpec(1, 'key', prim_spec.TextTypeSpec, False), FieldSpec(2, 'item', TypeReference('Item', 5), False), ] assert put_item_spec.result_spec.fields == [ FieldSpec(1, 'alreadyExists', TypeReference('ItemAlreadyExists', 6), False), ] assert put_item_spec.result_spec.return_spec is None assert get_item_spec.name == 'getItem' assert get_item_spec.args_spec.fields == [ FieldSpec(1, 'key', prim_spec.TextTypeSpec, False), ] assert get_item_spec.result_spec.fields == [ FieldSpec(0, 'success', TypeReference('Item', 8), False), FieldSpec(1, 'doesNotExist', TypeReference('KeyDoesNotExist', 10), False), ] assert get_item_spec.result_spec.return_spec == TypeReference('Item', 8) assert healthy_spec.name == 'healthy' assert healthy_spec.args_spec.fields == [] assert healthy_spec.result_spec.fields == [ FieldSpec(0, 'success', prim_spec.BoolTypeSpec, False) ] assert noop_spec.name == 'noop' assert noop_spec.args_spec.fields == [] assert noop_spec.result_spec.fields == []
def test_compile(parse): spec = ServiceSpec.compile(parse(''' service KeyValue extends BaseService { void putItem( 1: string key, 2: Item item ) throws (1: ItemAlreadyExists alreadyExists); Item getItem( 1: string key ) throws (1: KeyDoesNotExist doesNotExist); bool healthy(); // Does not accept or return anything void noop(); } ''')) assert spec.name == 'KeyValue' assert spec.parent == ServiceReference('BaseService', 2) put_item_spec = spec.functions[0] get_item_spec = spec.functions[1] healthy_spec = spec.functions[2] noop_spec = spec.functions[3] assert put_item_spec.name == 'putItem' assert put_item_spec.args_spec.fields == [ FieldSpec(1, 'key', prim_spec.TextTypeSpec, False), FieldSpec(2, 'item', TypeReference('Item', 5), False), ] assert put_item_spec.result_spec.fields == [ FieldSpec(1, 'alreadyExists', TypeReference('ItemAlreadyExists', 6), False), ] assert put_item_spec.result_spec.return_spec is None assert get_item_spec.name == 'getItem' assert get_item_spec.args_spec.fields == [ FieldSpec(1, 'key', prim_spec.TextTypeSpec, False), ] assert get_item_spec.result_spec.fields == [ FieldSpec(0, 'success', TypeReference('Item', 8), False), FieldSpec(1, 'doesNotExist', TypeReference('KeyDoesNotExist', 10), False), ] assert get_item_spec.result_spec.return_spec == TypeReference('Item', 8) assert healthy_spec.name == 'healthy' assert healthy_spec.args_spec.fields == [] assert healthy_spec.result_spec.fields == [ FieldSpec(0, 'success', prim_spec.BoolTypeSpec, False) ] assert noop_spec.name == 'noop' assert noop_spec.args_spec.fields == [] assert noop_spec.result_spec.fields == []