%% %% Licensed to the Apache Software Foundation (ASF) under one %% or more contributor license agreements. See the NOTICE file %% distributed with this work for additional information %% regarding copyright ownership. The ASF licenses this file %% to you under the Apache License, Version 2.0 (the %% "License"); you may not use this file except in compliance %% with the License. You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, %% software distributed under the License is distributed on an %% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY %% KIND, either express or implied. See the License for the %% specific language governing permissions and limitations %% under the License. %% % don't rename this thrift_test, it clobbers generated files -module(thrift_test_test). -compile(export_all). -include_lib("eunit/include/eunit.hrl"). -include("gen-erl/thrift_test_constants.hrl"). constant_test_() -> [ {"myNumberz equals 1", ?_assertEqual(1, ?THRIFT_TEST_MYNUMBERZ)} ]. record_generation_test_() -> [ {"Bonk record", ?_assertMatch( {'thrift.test.Bonk', _, _}, #'thrift.test.Bonk'{message=null,type=null} )}, {"Bools record", ?_assertMatch( {'thrift.test.Bools', _, _}, #'thrift.test.Bools'{im_true=null,im_false=null} )}, {"Xtruct record", ?_assertMatch( {'thrift.test.Xtruct', _, _, _, _}, #'thrift.test.Xtruct'{string_thing=null,byte_thing=null,i32_thing=null,i64_thing=null} )}, {"Xtruct2 record", ?_assertMatch( {'thrift.test.Xtruct2', _, _, _}, #'thrift.test.Xtruct2'{byte_thing=null,struct_thing=null,i32_thing=null} )}, {"Xtruct3 record", ?_assertMatch( {'thrift.test.Xtruct3', _, _, _, _}, #'thrift.test.Xtruct3'{string_thing=null,changed=null,i32_thing=null,i64_thing=null} )}, {"Insanity record", ?_assertMatch( {'thrift.test.Insanity', _, _}, #'thrift.test.Insanity'{userMap=null,xtructs=null} )}, {"CrazyNesting record", ?_assertMatch( {'thrift.test.CrazyNesting', _, _, _, _}, #'thrift.test.CrazyNesting'{ string_field=null, set_field=null, list_field=null, binary_field=null } )}, {"Xception record", ?_assertMatch( {'thrift.test.Xception', _, _}, #'thrift.test.Xception'{errorCode=null,message=null} )}, {"Xception2 record", ?_assertMatch( {'thrift.test.Xception2', _, _}, #'thrift.test.Xception2'{errorCode=null,struct_thing=null} )}, {"EmptyStruct record", ?_assertMatch({'thrift.test.EmptyStruct'}, #'thrift.test.EmptyStruct'{})}, {"OneField record", ?_assertMatch({'thrift.test.OneField', _}, #'thrift.test.OneField'{field=null})}, {"VersioningTestV1 record", ?_assertMatch( {'thrift.test.VersioningTestV1', _, _, _}, #'thrift.test.VersioningTestV1'{begin_in_both=null,old_string=null,end_in_both=null} )}, {"VersioningTestV2 record", ?_assertMatch( {'thrift.test.VersioningTestV2', _, _, _, _, _, _, _, _, _, _, _, _}, #'thrift.test.VersioningTestV2'{ begin_in_both=null, newint=null, newbyte=null, newshort=null, newlong=null, newdouble=null, newstruct=null, newlist=null, newset=null, newmap=null, newstring=null, end_in_both=null } )}, {"ListTypeVersioningV1 record", ?_assertMatch( {'thrift.test.ListTypeVersioningV1', _, _}, #'thrift.test.ListTypeVersioningV1'{myints=null,hello=null} )}, {"ListTypeVersioningV2 record", ?_assertMatch( {'thrift.test.ListTypeVersioningV2', _, _}, #'thrift.test.ListTypeVersioningV2'{strings=null,hello=null} )}, {"GuessProtocolStruct record", ?_assertMatch( {'thrift.test.GuessProtocolStruct', _}, #'thrift.test.GuessProtocolStruct'{map_field=null} )}, {"LargeDeltas record", ?_assertMatch( {'thrift.test.LargeDeltas', _, _, _, _, _, _, _, _, _, _}, #'thrift.test.LargeDeltas'{ b1=null, b10=null, b100=null, check_true=null, b1000=null, check_false=null, vertwo2000=null, a_set2500=null, vertwo3000=null, big_numbers=null } )}, {"NestedListsI32x2 record", ?_assertMatch( {'thrift.test.NestedListsI32x2', _}, #'thrift.test.NestedListsI32x2'{integerlist=null} )}, {"NestedListsI32x3 record", ?_assertMatch( {'thrift.test.NestedListsI32x3', _}, #'thrift.test.NestedListsI32x3'{integerlist=null} )}, {"NestedMixedx2 record", ?_assertMatch( {'thrift.test.NestedMixedx2', _, _, _}, #'thrift.test.NestedMixedx2'{ int_set_list=null, map_int_strset=null, map_int_strset_list=null } )}, {"ListBonks record", ?_assertMatch({'thrift.test.ListBonks', _}, #'thrift.test.ListBonks'{bonk=null})}, {"NestedListsBonk record", ?_assertMatch( {'thrift.test.NestedListsBonk', _}, #'thrift.test.NestedListsBonk'{bonk=null} )}, {"BoolTest record", ?_assertMatch( {'thrift.test.BoolTest', _, _}, #'thrift.test.BoolTest'{b=null,s=null} )}, {"StructA record", ?_assertMatch({'thrift.test.StructA', _}, #'thrift.test.StructA'{s=null})}, {"StructB record", ?_assertMatch( {'thrift.test.StructB', _, _}, #'thrift.test.StructB'{aa=null,ab=null} )} ]. struct_info_test_() -> [ {"Bonk definition (short version)", ?_assertEqual( {struct, [{1, string}, {2, i32}]}, thrift_test_types:struct_info('thrift.test.Bonk') )}, {"Bonk definition", ?_assertEqual( {struct, [ {1, undefined, string, message, undefined}, {2, undefined, i32, type, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Bonk') )}, {"Bools definition", ?_assertEqual( {struct, [ {1, undefined, bool, im_true, undefined}, {2, undefined, bool, im_false, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Bools') )}, {"Xtruct definition", ?_assertEqual( {struct, [ {1, undefined, string, string_thing, undefined}, {4, undefined, byte, byte_thing, undefined}, {9, undefined, i32, i32_thing, undefined}, {11, undefined, i64, i64_thing, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Xtruct') )}, {"Xtruct2 definition", ?_assertEqual( {struct, [ {1, undefined, byte, byte_thing, undefined}, {2, undefined, {struct, {'thrift_test_types', 'thrift.test.Xtruct'}}, struct_thing, #'thrift.test.Xtruct'{}}, {3, undefined, i32, i32_thing, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Xtruct2') )}, {"Xtruct3 definition", ?_assertEqual( {struct, [ {1, undefined, string, string_thing, undefined}, {4, undefined, i32, changed, undefined}, {9, undefined, i32, i32_thing, undefined}, {11, undefined, i64, i64_thing, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Xtruct3') )}, {"Insanity definition", ?_assertEqual( {struct, [ {1, undefined, {map, i32, i64}, userMap, dict:new()}, {2, undefined, {list, {struct, {'thrift_test_types', 'thrift.test.Xtruct'}}}, xtructs, []} ]}, thrift_test_types:struct_info_ext('thrift.test.Insanity') )}, {"CrazyNesting definition", ?_assertEqual( {struct, [ {1, undefined, string, string_field, undefined}, {2, optional, {set, {struct, {'thrift_test_types', 'thrift.test.Insanity'}}}, set_field, sets:new()}, {3, required, {list, {map, {set, i32}, {map, i32, {set, {list, {map, {struct, {'thrift_test_types', 'thrift.test.Insanity'}}, string}}}} }}, list_field, []}, {4, undefined, string, binary_field, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.CrazyNesting') )}, {"Xception definition", ?_assertEqual( {struct, [ {1, undefined, i32, errorCode, undefined}, {2, undefined, string, message, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.Xception') )}, {"Xception2 definition", ?_assertEqual( {struct, [ {1, undefined, i32, errorCode, undefined}, {2, undefined, {struct, {'thrift_test_types', 'thrift.test.Xtruct'}}, struct_thing, #'thrift.test.Xtruct'{}} ]}, thrift_test_types:struct_info_ext('thrift.test.Xception2') )}, {"EmptyStruct definition", ?_assertEqual( {struct, []}, thrift_test_types:struct_info_ext('thrift.test.EmptyStruct') )}, {"OneField definition", ?_assertEqual( {struct, [ {1, undefined, {struct, {'thrift_test_types', 'thrift.test.EmptyStruct'}}, field, #'thrift.test.EmptyStruct'{}} ]}, thrift_test_types:struct_info_ext('thrift.test.OneField') )}, {"VersioningTestV1 definition", ?_assertEqual( {struct, [ {1, undefined, i32, begin_in_both, undefined}, {3, undefined, string, old_string, undefined}, {12, undefined, i32, end_in_both, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.VersioningTestV1') )}, {"VersioningTestV2 definition", ?_assertEqual( {struct, [ {1, undefined, i32, begin_in_both, undefined}, {2, undefined, i32, newint, undefined}, {3, undefined, byte, newbyte, undefined}, {4, undefined, i16, newshort, undefined}, {5, undefined, i64, newlong, undefined}, {6, undefined, double, newdouble, undefined}, {7, undefined, {struct, {thrift_test_types, 'thrift.test.Bonk'}}, newstruct, #'thrift.test.Bonk'{}}, {8, undefined, {list, i32}, newlist, []}, {9, undefined, {set, i32}, newset, sets:new()}, {10, undefined, {map, i32, i32}, newmap, dict:new()}, {11, undefined, string, newstring, undefined}, {12, undefined, i32, end_in_both, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.VersioningTestV2') )}, {"ListTypeVersioningV1 definition", ?_assertEqual( {struct, [ {1, undefined, {list, i32}, myints, []}, {2, undefined, string, hello, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.ListTypeVersioningV1') )}, {"ListTypeVersioningV2 definition", ?_assertEqual( {struct, [ {1, undefined, {list, string}, strings, []}, {2, undefined, string, hello, undefined} ]}, thrift_test_types:struct_info_ext('thrift.test.ListTypeVersioningV2') )}, {"GuessProtocolStruct definition", ?_assertEqual( {struct, [ {7, undefined, {map, string, string}, map_field, dict:new()} ]}, thrift_test_types:struct_info_ext('thrift.test.GuessProtocolStruct') )}, {"LargeDeltas definition", ?_assertEqual( {struct, [ {1, undefined, {struct, {thrift_test_types, 'thrift.test.Bools'}}, b1, #'thrift.test.Bools'{}}, {10, undefined, {struct, {thrift_test_types, 'thrift.test.Bools'}}, b10, #'thrift.test.Bools'{}}, {100, undefined, {struct, {thrift_test_types, 'thrift.test.Bools'}}, b100, #'thrift.test.Bools'{}}, {500, undefined, bool, check_true, undefined}, {1000, undefined, {struct, {thrift_test_types, 'thrift.test.Bools'}}, b1000, #'thrift.test.Bools'{}}, {1500, undefined, bool, check_false, undefined}, {2000, undefined, {struct, {thrift_test_types, 'thrift.test.VersioningTestV2'}}, vertwo2000, #'thrift.test.VersioningTestV2'{}}, {2500, undefined, {set, string}, a_set2500, sets:new()}, {3000, undefined, {struct, {thrift_test_types, 'thrift.test.VersioningTestV2'}}, vertwo3000, #'thrift.test.VersioningTestV2'{}}, {4000, undefined, {list, i32}, big_numbers, []} ]}, thrift_test_types:struct_info_ext('thrift.test.LargeDeltas') )}, {"NestedListsI32x2 definition", ?_assertEqual( {struct, [ {1, undefined, {list, {list, i32}}, integerlist, []} ]}, thrift_test_types:struct_info_ext('thrift.test.NestedListsI32x2') )}, {"NestedListsI32x3 definition", ?_assertEqual( {struct, [ {1, undefined, {list, {list, {list, i32}}}, integerlist, []} ]}, thrift_test_types:struct_info_ext('thrift.test.NestedListsI32x3') )}, {"NestedMixedx2 definition", ?_assertEqual( {struct, [ {1, undefined, {list, {set, i32}}, int_set_list, []}, {2, undefined, {map, i32, {set, string}}, map_int_strset, dict:new()}, {3, undefined, {list, {map, i32, {set, string}}}, map_int_strset_list, []} ]}, thrift_test_types:struct_info_ext('thrift.test.NestedMixedx2') )}, {"ListBonks definition", ?_assertEqual( {struct, [ {1, undefined, {list, {struct, {thrift_test_types, 'thrift.test.Bonk'}}}, bonk, []} ]}, thrift_test_types:struct_info_ext('thrift.test.ListBonks') )}, {"NestedListsBonk definition", ?_assertEqual( {struct, [ {1, undefined, {list, {list, {list, {struct, {thrift_test_types, 'thrift.test.Bonk'}}}}}, bonk, []} ]}, thrift_test_types:struct_info_ext('thrift.test.NestedListsBonk') )}, {"BoolTest definition", ?_assertEqual( {struct, [ {1, optional, bool, b, true}, {2, optional, string, s, "true"} ]}, thrift_test_types:struct_info_ext('thrift.test.BoolTest') )}, {"StructA definition", ?_assertEqual( {struct, [{1, required, string, s, undefined}]}, thrift_test_types:struct_info_ext('thrift.test.StructA') )}, {"StructB definition", ?_assertEqual( {struct, [ {1, optional, {struct, {thrift_test_types, 'thrift.test.StructA'}}, aa, #'thrift.test.StructA'{}}, {2, required, {struct, {thrift_test_types, 'thrift.test.StructA'}}, ab, #'thrift.test.StructA'{}} ]}, thrift_test_types:struct_info_ext('thrift.test.StructB') )} ]. service_info_test_() -> [ {"testVoid params", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testVoid, params_type) )}, {"testVoid reply", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testVoid, reply_type) )}, {"testVoid exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testVoid, exceptions) )}, {"testString params", ?_assertEqual( {struct, [{1, string}]}, thrift_test_thrift:function_info(testString, params_type) )}, {"testString reply", ?_assertEqual( string, thrift_test_thrift:function_info(testString, reply_type) )}, {"testString exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testString, exceptions) )}, {"testByte params", ?_assertEqual( {struct, [{1, byte}]}, thrift_test_thrift:function_info(testByte, params_type) )}, {"testByte reply", ?_assertEqual( byte, thrift_test_thrift:function_info(testByte, reply_type) )}, {"testByte exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testByte, exceptions) )}, {"testI32 params", ?_assertEqual( {struct, [{1, i32}]}, thrift_test_thrift:function_info(testI32, params_type) )}, {"testI32 reply", ?_assertEqual( i32, thrift_test_thrift:function_info(testI32, reply_type) )}, {"testI32 exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testI32, exceptions) )}, {"testI64 params", ?_assertEqual( {struct, [{1, i64}]}, thrift_test_thrift:function_info(testI64, params_type) )}, {"testI64 reply", ?_assertEqual( i64, thrift_test_thrift:function_info(testI64, reply_type) )}, {"testI64 exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testI64, exceptions) )}, {"testDouble params", ?_assertEqual( {struct, [{1, double}]}, thrift_test_thrift:function_info(testDouble, params_type) )}, {"testDouble reply", ?_assertEqual( double, thrift_test_thrift:function_info(testDouble, reply_type) )}, {"testDouble exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testDouble, exceptions) )}, {"testStruct params", ?_assertEqual( {struct, [ {1, {struct, {thrift_test_types, 'thrift.test.Xtruct'}}} ]}, thrift_test_thrift:function_info(testStruct, params_type) )}, {"testStruct reply", ?_assertEqual( {struct, {thrift_test_types, 'thrift.test.Xtruct'}}, thrift_test_thrift:function_info(testStruct, reply_type) )}, {"testStruct exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testStruct, exceptions) )}, {"testNest params", ?_assertEqual( {struct, [ {1, {struct, {thrift_test_types, 'thrift.test.Xtruct2'}}} ]}, thrift_test_thrift:function_info(testNest, params_type) )}, {"testNest reply", ?_assertEqual( {struct, {thrift_test_types, 'thrift.test.Xtruct2'}}, thrift_test_thrift:function_info(testNest, reply_type) )}, {"testNest exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testNest, exceptions) )}, {"testMap params", ?_assertEqual( {struct, [ {1, {map, i32, i32}} ]}, thrift_test_thrift:function_info(testMap, params_type) )}, {"testMap reply", ?_assertEqual( {map, i32, i32}, thrift_test_thrift:function_info(testMap, reply_type) )}, {"testMap exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testMap, exceptions) )}, {"testStringMap params", ?_assertEqual( {struct, [ {1, {map, string, string}} ]}, thrift_test_thrift:function_info(testStringMap, params_type) )}, {"testStringMap reply", ?_assertEqual( {map, string, string}, thrift_test_thrift:function_info(testStringMap, reply_type) )}, {"testStringMap exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testStringMap, exceptions) )}, {"testSet params", ?_assertEqual( {struct, [ {1, {set, i32}} ]}, thrift_test_thrift:function_info(testSet, params_type) )}, {"testSet reply", ?_assertEqual( {set, i32}, thrift_test_thrift:function_info(testSet, reply_type) )}, {"testSet exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testSet, exceptions) )}, {"testList params", ?_assertEqual( {struct, [ {1, {list, i32}} ]}, thrift_test_thrift:function_info(testList, params_type) )}, {"testList reply", ?_assertEqual( {list, i32}, thrift_test_thrift:function_info(testList, reply_type) )}, {"testList exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testList, exceptions) )}, {"testEnum params", ?_assertEqual( {struct, [ {1, i32} ]}, thrift_test_thrift:function_info(testEnum, params_type) )}, {"testEnum reply", ?_assertEqual( i32, thrift_test_thrift:function_info(testEnum, reply_type) )}, {"testEnum exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testEnum, exceptions) )}, {"testTypedef params", ?_assertEqual( {struct, [{1, i64}]}, thrift_test_thrift:function_info(testTypedef, params_type) )}, {"testTypedef reply", ?_assertEqual( i64, thrift_test_thrift:function_info(testTypedef, reply_type) )}, {"testTypedef exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testTypedef, exceptions) )}, {"testMapMap params", ?_assertEqual( {struct, [ {1, i32} ]}, thrift_test_thrift:function_info(testMapMap, params_type) )}, {"testMapMap reply", ?_assertEqual( {map, i32, {map, i32,i32}}, thrift_test_thrift:function_info(testMapMap, reply_type) )}, {"testMapMap exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testMapMap, exceptions) )}, {"testInsanity params", ?_assertEqual( {struct, [ {1, {struct, {thrift_test_types, 'thrift.test.Insanity'}}} ]}, thrift_test_thrift:function_info(testInsanity, params_type) )}, {"testInsanity reply", ?_assertEqual( {map, i64, {map, i32, {struct, {'thrift_test_types', 'thrift.test.Insanity'}}}}, thrift_test_thrift:function_info(testInsanity, reply_type) )}, {"testInsanity exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testInsanity, exceptions) )}, {"testMulti params", ?_assertEqual( {struct, [ {1, byte}, {2, i32}, {3, i64}, {4, {map, i16, string}}, {5, i32}, {6, i64} ]}, thrift_test_thrift:function_info(testMulti, params_type) )}, {"testMulti reply", ?_assertEqual( {struct, {thrift_test_types, 'thrift.test.Xtruct'}}, thrift_test_thrift:function_info(testMulti, reply_type) )}, {"testMulti exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testMulti, exceptions) )}, {"testException params", ?_assertEqual( {struct, [{1, string}]}, thrift_test_thrift:function_info(testException, params_type) )}, {"testException reply", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testException, reply_type) )}, {"testException exceptions", ?_assertEqual( {struct, [ {1, {struct, {thrift_test_types, 'thrift.test.Xception'}}} ]}, thrift_test_thrift:function_info(testException, exceptions) )}, {"testMultiException params", ?_assertEqual( {struct, [{1, string}, {2, string}]}, thrift_test_thrift:function_info(testMultiException, params_type) )}, {"testMultiException reply", ?_assertEqual( {struct, {thrift_test_types, 'thrift.test.Xtruct'}}, thrift_test_thrift:function_info(testMultiException, reply_type) )}, {"testMultiException exceptions", ?_assertEqual( {struct, [ {1, {struct, {thrift_test_types, 'thrift.test.Xception'}}}, {2, {struct, {thrift_test_types, 'thrift.test.Xception2'}}} ]}, thrift_test_thrift:function_info(testMultiException, exceptions) )}, {"testOneway params", ?_assertEqual( {struct, [{1, i32}]}, thrift_test_thrift:function_info(testOneway, params_type) )}, {"testOneway reply", ?_assertEqual( oneway_void, thrift_test_thrift:function_info(testOneway, reply_type) )}, {"testOneway exceptions", ?_assertEqual( {struct, []}, thrift_test_thrift:function_info(testOneway, exceptions) )}, {"secondtestString params", ?_assertEqual( {struct, [{1, string}]}, second_service_thrift:function_info(secondtestString, params_type) )}, {"secondtestString reply", ?_assertEqual( string, second_service_thrift:function_info(secondtestString, reply_type) )}, {"secondtestString exceptions", ?_assertEqual( {struct, []}, second_service_thrift:function_info(secondtestString, exceptions) )} ].