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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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 == []