1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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)
|