summaryrefslogtreecommitdiffstats
path: root/test/lua/verify_globals.lua
blob: dbed8ceb916b2b4fda643f0a238e749d433a47e7 (plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-- verify_globals.lua

-- ignore things that change on different machines or every release
-- the following items still have to exist, but their values don't have to match
local filter = {
    -- differences by machine
    "DATA_DIR",
    "USER_DIR",
    "package.cpath",
    "package.path",
    "package.loaded",
    "run_user_scripts_when_superuser",
    "running_superuser",

    -- differences in Lua versions
    "_VERSION",
    "package.config",

    -- differences caused by changes in wireshark 1.11
    "NSTime",
    "Proto",
    'Listener["<metatable>"].__index',
    ".__index"
 }

-- the following items don't have to exist
local ignore = {
    -- not sure why this was removed in wireshark 1.11, but it was
    "TreeItem.set_expert_flags",

    -- in Lua 5.1 only
    "debug.getfenv",
    "debug.setfenv",
    "gcinfo",
    "getfenv",
    "io.gfind",
    "setfenv",
    "math.mod",
    "newproxy",
    "string.gfind",
    "table.foreach",
    "table.foreachi",
    "table.getn",
    "table.setn",

    -- in Lua 5.2+ only
    "bit32",
    "debug.getuservalu",
    "debug.setuservalu",
    "debug.upvalueid",
    "debug.upvaluejoin",
    "package.searchers",
    "package.searchpath",
    "rawlen",
    "table.pack",
    "table.unpack",

}


local arg={...} -- get passed-in args

-- arg1 = path to find inspect
-- arg2 = filename to read in (optional, unless 'verify' is set)
-- arg3 = 'verify' to verify all of read-in file is in _G (default); 'new' to output all items in _G that are not in read-in file
-- arg4 = 'nometa' to ignore metatables; 'meta' otherwise (default)

local add_path = "lua/?.lua;"
if #arg > 0 then
    add_path = arg[1].."?.lua;"
end

print("package.path = " .. package.path)

-- need the path to find inspect.lua
local old_path = package.path
package.path = add_path .. package.path

local inspect = require("inspect")

package.path = old_path -- return path to original

print("-- Wireshark version: " .. get_version())

if #arg == 1 then
    -- no more args, so just output globals
    print(inspect(_G, { serialize = true, filter = inspect.makeFilter(filter) }))
    return
end

local file = assert(io.open(arg[2], "r"))
local input = file:read("*all")
input = inspect.marshal(input)

local nometa = false
if #arg > 3 and arg[4] == "nometa" then
    nometa = true
end

if #arg == 2 or arg[3] == "verify" then
    print(string.rep("\n", 2))
    print("Verifying input file '"..arg[2].."' is contained within the global table")
    local ret, diff = inspect.compare(input, _G, {
        ['filter'] = inspect.makeFilter(filter),
        ['ignore'] = inspect.makeFilter(ignore),
        ['nonumber'] = true,
        ['nometa'] = nometa
        })
    if not ret then
        print("Comparison failed - global table does not have all the items in the input file!")
        print(string.rep("\n", 2))
        print(string.rep("-", 80))
        print("Differences are:")
        print(inspect(diff))
    else
        print("\n-----------------------------\n")
        print("All tests passed!\n\n")
    end
    return
elseif #arg > 2 and arg[3] == "new" then
    local ret, diff = inspect.compare(_G, input, {
        ['filter'] = inspect.makeFilter(filter),
        ['ignore'] = inspect.makeFilter(ignore),
        ['nonumber'] = true,
        ['keep'] = true,
        ['nometa'] = nometa
        })
    if not ret then
        print(inspect(diff))
    else
        print("\n-----------------------------\n")
        print("No new items!\n\n")
    end
end