diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2016-12-20 09:44:16 +0100 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2017-03-14 13:58:18 +0000 |
commit | ba49a8526c2caf68b95511aa2f5235276796cf5d (patch) | |
tree | 9f92106c4535e8c3ce16d52b09f1156dc3f407fa /test | |
parent | 20d7669bbe9ca84597a371dd605385f5b9c88154 (diff) | |
download | wireshark-ba49a8526c2caf68b95511aa2f5235276796cf5d.tar.gz wireshark-ba49a8526c2caf68b95511aa2f5235276796cf5d.tar.bz2 wireshark-ba49a8526c2caf68b95511aa2f5235276796cf5d.zip |
Lua: Add some ProtoField tests.
Test usage of base.UNIT_STRING.
Change-Id: I9c97b58b3cc6db65713e83609900880e157237f2
Reviewed-on: https://code.wireshark.org/review/19357
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/lua/protofield.lua | 121 | ||||
-rwxr-xr-x | test/suite-wslua.sh | 25 |
2 files changed, 146 insertions, 0 deletions
diff --git a/test/lua/protofield.lua b/test/lua/protofield.lua new file mode 100644 index 0000000000..8f8e5d237b --- /dev/null +++ b/test/lua/protofield.lua @@ -0,0 +1,121 @@ +---------------------------------------- +-- script-name: protofield.lua +-- This is based on the dissector.lua example script, which is also used for testing. +-- Unlike that one, this one is purely for testing even more things, notably +-- the ProtoField API. +---------------------------------------- + +------------- general test helper funcs ------------ +local OTHER = "other" + +local total_tests = 0 +local function getTotal() + return total_tests +end + +local passed = {} +local function setPassed(name) + if not passed[name] then + passed[name] = 1 + else + passed[name] = passed[name] + 1 + end + total_tests = total_tests + 1 +end + +local fail_count = 0 +local function setFailed(name) + fail_count = fail_count + 1 + total_tests = total_tests + 1 +end + +-- expected number of runs +local taptests = { [OTHER]=16 } +local function getResults() + print("\n-----------------------------\n") + for k,v in pairs(taptests) do + if v ~= 0 and passed[k] ~= v then + print("Something didn't run or ran too much... tests failed!") + print("Dissector type "..k.." expected: "..v..", but got: "..tostring(passed[k])) + return false + end + end + print("All tests passed!\n\n") + return true +end + +local function test(type,name, ...) + io.stdout:write("test "..type.."-->"..name.."-"..getTotal().."...") + if (...) == true then + setPassed(type) + io.stdout:write("passed\n") + return true + else + setFailed(type) + io.stdout:write("failed!\n") + error(name.." test failed!") + end +end + +------------- test script ------------ + +---------------------------------- +-- modify original test function for now, kinda sorta +local orig_test = test +test = function (...) + return orig_test(OTHER,...) +end + +---------------------------------------- +local test_proto = Proto.new("test", "Test Proto") +test_proto.fields.time_field = ProtoField.uint16("test.time", "Time", base.UNIT_STRING, {" sec", " secs"}) +test_proto.fields.dist_field = ProtoField.uint16("test.dist", "Distance", base.UNIT_STRING, {" km"}) + +-- Passing no table should not work +success = pcall(ProtoField.uint16, "test.bad0", "Bad0", base.UNIT_STRING) +test("ProtoField-unitstring-no-table", not success) + +-- Passing an empty table should not work +success = pcall(ProtoField.uint16, "test.bad1", "Bad1", base.UNIT_STRING, {}) +test("ProtoField-unitstring-empty-table", not success) + +-- Passing userdata should not work +success = pcall(ProtoField.uint16, "test.bad2", "Bad2", base.UNIT_STRING, {test_proto}) +test("ProtoField-unitstring-userdata", not success) + +-- Too many items are not supported +success = pcall(ProtoField.uint16, "test.bad3", "Bad3", base.UNIT_STRING, {"too", "many", "items"}) +test("ProtoField-unitstring-too-many-items", not success) + +local numinits = 0 +function test_proto.init() + numinits = numinits + 1 + if numinits == 2 then + getResults() + end +end + +-- Test expected text with singular and plural forms +function test_proto.dissector(tvb, pinfo, tree) + local ti + + local tvb1 = ByteArray.new("00 00"):tvb("Tvb1") + ti = tree:add(test_proto.fields.time_field, tvb1()) + test("Time: 0 secs", ti.text == "Time: 0 secs") + ti = tree:add(test_proto.fields.dist_field, tvb1()) + test("Distance: 0 km", ti.text == "Distance: 0 km") + + local tvb2 = ByteArray.new("00 01"):tvb("Tvb2") + ti = tree:add(test_proto.fields.time_field, tvb2()) + test("Time: 1 sec", ti.text == "Time: 1 sec") + ti = tree:add(test_proto.fields.dist_field, tvb2()) + test("Distance: 1 km", ti.text == "Distance: 1 km") + + local tvb3 = ByteArray.new("ff ff"):tvb("Tvb3") + ti = tree:add(test_proto.fields.time_field, tvb3()) + test("Time: 65535 secs", ti.text == "Time: 65535 secs") + ti = tree:add(test_proto.fields.dist_field, tvb3()) + test("Distance: 65535 km", ti.text == "Distance: 65535 km") +end + +DissectorTable.get("udp.port"):add(65333, test_proto) diff --git a/test/suite-wslua.sh b/test/suite-wslua.sh index 8e7e22dcac..49803036eb 100755 --- a/test/suite-wslua.sh +++ b/test/suite-wslua.sh @@ -334,6 +334,30 @@ wslua_step_proto_test() { fi } +wslua_step_protofield_test() { + if [ $HAVE_LUA -ne 0 ]; then + test_step_skipped + return + fi + + # Tshark catches lua script failures, so we have to parse the output. + # perform this twice: once with a tree, once without + $TSHARK -r $CAPTURE_DIR/dns_port.pcap -X lua_script:$TESTS_DIR/lua/protofield.lua -V > testout.txt 2>&1 + grep -q "All tests passed!" testout.txt + if [ $? -ne 0 ]; then + cat testout.txt + test_step_failed "lua_args_test test 1 failed" + fi + + $TSHARK -r $CAPTURE_DIR/dns_port.pcap -X lua_script:$TESTS_DIR/lua/protofield.lua > testout.txt 2>&1 + if grep -q "All tests passed!" testout.txt; then + test_step_ok + else + cat testout.txt + test_step_failed "didn't find pass marker" + fi +} + wslua_step_int64_test() { if [ $HAVE_LUA -ne 0 ]; then test_step_skipped @@ -481,6 +505,7 @@ wslua_suite() { test_step_add "wslua nstime" wslua_step_nstime_test test_step_add "wslua pinfo" wslua_step_pinfo_test test_step_add "wslua proto/protofield" wslua_step_proto_test + test_step_add "wslua protofield" wslua_step_protofield_test test_step_add "wslua script arguments" wslua_step_args_test test_step_add "wslua struct" wslua_step_struct_test test_step_add "wslua tvb" wslua_step_tvb_test |