wireshark/test/lua/field.lua
Gerald Combs ef01359849 Add support for protocol aliases. Switch BOOTP to DHCP.
Add support for aliasing one protocol name to another and for filtering
using aliased fields. Mark aliased fields as deprecated.

Rename the BOOTP dissector to DHCP and alias "bootp" to "dhcp". This
lets you use both "dhcp.type" and "bootp.type" as display filter fields
without having to duplicate all 500+ DHCP/BOOTP fields.

To do:
- Add checks to proto.c:check_valid_filter_name_or_fail?
- Transition SSL to TLS.
- Rename packet-bootp.c to packet-dhcp.c?

Change-Id: I29977859995e8347d80b8e83f1618db441b10279
Ping-Bug: 14922
Reviewed-on: https://code.wireshark.org/review/29327
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
2018-08-31 05:25:17 +00:00

175 lines
5.9 KiB
Lua

-- test script for wslua Field/FieldInfo functions
-- use with dhcp.pcap in test/captures directory
------------- helper funcs ------------
local packet_count = 0
local function incPktCount(name)
packet_count = packet_count + 1
end
local function testing(...)
print("---- Testing "..tostring(...).." for packet #"..packet_count.." ----")
end
local function test(name, ...)
io.stdout:write("test "..name.."-"..packet_count.."...")
if (...) == true then
io.stdout:write("passed\n")
else
io.stdout:write("failed!\n")
error(name.." test failed!")
end
end
local function toMacAddr(addrhex)
return addrhex:gsub("..","%0:"):sub(1,-2)
end
-- the following are so we can use pcall (which needs a function to call)
local function makeField(name)
local foo = Field.new(name)
return true
end
local function makeFieldInfo(field)
local foo = field()
return true
end
local function setFieldInfo(finfo,name,value)
finfo[name] = value
return true
end
local function getFieldInfo(finfo,name)
local foo = finfo[name]
return true
end
--------------------------
testing("Field")
test("Field.new-0",pcall(makeField,"ip.src"))
test("Field.new-1",not pcall(makeField,"FooBARhowdy"))
test("Field.new-2",not pcall(makeField))
test("Field.new-3",not pcall(makeField,""))
test("Field.new-4",not pcall(makeField,"IP.SRC"))
-- declare some field extractors
local f_frame_proto = Field.new("frame.protocols")
local f_eth_src = Field.new("eth.src")
local f_eth_dst = Field.new("eth.dst")
local f_eth_mac = Field.new("eth.addr")
local f_ip_src = Field.new("ip.src")
local f_ip_dst = Field.new("ip.dst")
local f_udp_srcport = Field.new("udp.srcport")
local f_udp_dstport = Field.new("udp.dstport")
local f_dhcp_hw = Field.new("dhcp.hw.mac_addr")
local f_dhcp_opt = Field.new("dhcp.option.type")
test("Field__tostring-1", tostring(f_frame_proto) == "frame.protocols")
test("Field.name-1", f_frame_proto.name == "frame.protocols")
test("Field.name-2", f_eth_src.name == "eth.src")
test("Field.display-1", f_frame_proto.display == "Protocols in frame")
test("Field.display-2", f_eth_src.display == "Source")
test("Field.type-1", f_frame_proto.type == ftypes.STRING)
test("Field.type-2", f_eth_src.type == ftypes.ETHER)
test("Field.type-3", f_ip_src.type == ftypes.IPv4)
test("Field.type-4", f_udp_srcport.type == ftypes.UINT16)
test("Field.type-5", f_dhcp_opt.type == ftypes.UINT8)
-- make sure can't create a FieldInfo outside tap
test("Field__call-1",not pcall(makeFieldInfo,f_eth_src))
local tap = Listener.new()
--------------------------
function tap.packet(pinfo,tvb)
incPktCount()
testing("Field")
test("Field__tostring-2", tostring(f_frame_proto) == "frame.protocols")
-- make sure can't create a Field inside tap
test("Field.new-5",not pcall(makeField,"ip.src"))
test("Field__call-2",pcall(makeFieldInfo,f_eth_src))
test("Field.name-3", f_frame_proto.name == "frame.protocols")
test("Field.name-4", f_eth_src.name == "eth.src")
test("Field.display-3", f_frame_proto.display == "Protocols in frame")
test("Field.display-4", f_eth_src.display == "Source")
test("Field.type-6", f_frame_proto.type == ftypes.STRING)
test("Field.type-7", f_eth_src.type == ftypes.ETHER)
test("Field.type-8", f_ip_src.type == ftypes.IPv4)
test("Field.type-9", f_udp_srcport.type == ftypes.UINT16)
test("Field.type-10", f_dhcp_opt.type == ftypes.UINT8)
testing("FieldInfo")
local finfo_udp_srcport = f_udp_srcport()
test("FieldInfo.name-1", finfo_udp_srcport.name == "udp.srcport")
test("FieldInfo.type-1", finfo_udp_srcport.type == ftypes.UINT16)
test("FieldInfo.little_endian-1", finfo_udp_srcport.little_endian == false)
-- the following should be true, but UDP doesn't set it right?
-- test("FieldInfo.big_endian-1", finfo_udp_srcport.big_endian == true)
test("FieldInfo.is_url-1", finfo_udp_srcport.is_url == false)
test("FieldInfo.offset-1", finfo_udp_srcport.offset == 34)
test("FieldInfo.source-1", finfo_udp_srcport.source == tvb)
-- check ether addr
local fi_eth_src = f_eth_src()
test("FieldInfo.type-2", fi_eth_src.type == ftypes.ETHER)
test("FieldInfo.range-0",pcall(getFieldInfo,fi_eth_src,"range"))
local eth_macs = { f_eth_mac() }
local eth_src1 = tostring(f_eth_src().range)
local eth_src2 = tostring(tvb:range(6,6))
local eth_src3 = tostring(eth_macs[2].tvb)
test("FieldInfo.range-1", eth_src1 == eth_src2)
test("FieldInfo.range-2", eth_src1 == eth_src3)
test("FieldInfo.range-3",not pcall(setFieldInfo,fi_eth_src,"range",3))
test("FieldInfo.generated-1", f_frame_proto().generated == true)
test("FieldInfo.generated-2", eth_macs[2].generated == false)
test("FieldInfo.generated-3",not pcall(setFieldInfo,fi_eth_src,"generated",3))
test("FieldInfo.name-1", fi_eth_src.name == "eth.src")
test("FieldInfo.name-2",not pcall(setFieldInfo,fi_eth_src,"name","3"))
test("FieldInfo.label-1", fi_eth_src.label == tostring(fi_eth_src))
test("FieldInfo.label-2", fi_eth_src.label == toMacAddr(eth_src1))
test("FieldInfo.label-3",not pcall(setFieldInfo,fi_eth_src,"label","3"))
test("FieldInfo.display-1", select(1, string.find(fi_eth_src.display, toMacAddr(eth_src1))) ~= nil)
test("FieldInfo.display-2",not pcall(setFieldInfo,fi_eth_src,"display","3"))
test("FieldInfo.eq-1", eth_macs[2] == select(2, f_eth_mac()))
test("FieldInfo.eq-2", eth_macs[1] ~= fi_eth_src)
test("FieldInfo.eq-3", eth_macs[1] == f_eth_dst())
test("FieldInfo.offset-1", eth_macs[1].offset == 0)
test("FieldInfo.offset-2", -fi_eth_src == 6)
test("FieldInfo.offset-3",not pcall(setFieldInfo,fi_eth_src,"offset","3"))
test("FieldInfo.len-1", fi_eth_src.len == 6)
test("FieldInfo.len-2",not pcall(setFieldInfo,fi_eth_src,"len",6))
if packet_count == 4 then
print("\n-----------------------------\n")
print("All tests passed!\n\n")
end
end