diff options
Diffstat (limited to 'test/functional/api/compatibility_spec.lua')
-rw-r--r-- | test/functional/api/compatibility_spec.lua | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/functional/api/compatibility_spec.lua b/test/functional/api/compatibility_spec.lua new file mode 100644 index 0000000000..e0fc625b46 --- /dev/null +++ b/test/functional/api/compatibility_spec.lua @@ -0,0 +1,65 @@ + +local helpers = require('test.functional.helpers')(after_each) +local lfs = require('lfs') +local mpack = require('mpack') +local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq + +local read_mpack_file = function(fname) + local fd = io.open(fname, 'rb') + local data = fd:read('*a') + fd:close() + local unpack = mpack.Unpacker() + return unpack(data) +end + +-- ignore metadata in API function spec +local remove_function_metadata = function(fspec) + fspec['can_fail'] = nil + fspec['async'] = nil + fspec['method'] = nil + fspec['since'] = nil + fspec['deprecated_since'] = nil + fspec['receives_channel_id'] = nil + for idx,_ in ipairs(fspec['parameters']) do + fspec['parameters'][idx][2] = '' + end +end + +clear() +local api_level = helpers.call('api_info')['api_level'] + +describe('api compatibility', function() + before_each(clear) + + it("version metadata is sane", function() + local info = helpers.call('api_info') + local current = info['api_level']['current'] + local compatibility = info['api_level']['compatibility'] + neq(current, nil) + neq(compatibility, nil) + assert(current >= compatibility) + end) + + for ver = api_level['compatibility'], api_level['current'] do + local path = 'test/functional/fixtures/api-info/' .. tostring(ver) .. '.mpack' + it('are backwards compatible with api level '..ver, function() + if lfs.attributes(path,"mode") ~= "file" then + pending("No fixture found, skipping test") + return + end + + local old_api = read_mpack_file(path) + local api = helpers.call('api_info') + + for _, fspec in ipairs(old_api['functions']) do + remove_function_metadata(fspec) + for _, fspec_new in ipairs(api['functions']) do + if fspec['name'] == fspec_new['name'] then + remove_function_metadata(fspec_new) + eq(fspec, fspec_new) + end + end + end + end) + end +end) |