From 510ff354c0f839cfe227e2c1a1a60ba183e1f24a Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sun, 17 Nov 2013 17:13:09 -0500 Subject: [PATCH] Add fail/test metadata tests from Alexandre Montplaisir Signed-off-by: Mathieu Desnoyers --- .../metadata/fail/array-redefinition/metadata | 19 +++++++++++++++ .../struct-inner-struct-undefined/metadata | 23 +++++++++++++++++++ .../metadata/fail/struct-recursive/metadata | 19 +++++++++++++++ .../fail/struct-reserved-keywords/metadata | 21 +++++++++++++++++ .../fail/typedef-redefinition/metadata | 17 ++++++++++++++ .../fail/typedef-reserved-keyword/metadata | 15 ++++++++++++ .../pass/struct-align-larger/metadata | 20 ++++++++++++++++ .../pass/struct-align-smaller/metadata | 23 +++++++++++++++++++ .../pass/struct-inner-struct/metadata | 23 +++++++++++++++++++ .../struct-unamed-struct-as-field/metadata | 22 ++++++++++++++++++ .../struct-underscores-in-fields/metadata | 20 ++++++++++++++++ .../pass/typealias-reserved-keyword/metadata | 20 ++++++++++++++++ .../metadata/pass/typealias-simple/metadata | 20 ++++++++++++++++ .../metadata/pass/typedef-simple/metadata | 15 ++++++++++++ 14 files changed, 277 insertions(+) create mode 100644 tests/1.8/regression/metadata/fail/array-redefinition/metadata create mode 100644 tests/1.8/regression/metadata/fail/struct-inner-struct-undefined/metadata create mode 100644 tests/1.8/regression/metadata/fail/struct-recursive/metadata create mode 100644 tests/1.8/regression/metadata/fail/struct-reserved-keywords/metadata create mode 100644 tests/1.8/regression/metadata/fail/typedef-redefinition/metadata create mode 100644 tests/1.8/regression/metadata/fail/typedef-reserved-keyword/metadata create mode 100644 tests/1.8/regression/metadata/pass/struct-align-larger/metadata create mode 100644 tests/1.8/regression/metadata/pass/struct-align-smaller/metadata create mode 100644 tests/1.8/regression/metadata/pass/struct-inner-struct/metadata create mode 100644 tests/1.8/regression/metadata/pass/struct-unamed-struct-as-field/metadata create mode 100644 tests/1.8/regression/metadata/pass/struct-underscores-in-fields/metadata create mode 100644 tests/1.8/regression/metadata/pass/typealias-reserved-keyword/metadata create mode 100644 tests/1.8/regression/metadata/pass/typealias-simple/metadata create mode 100644 tests/1.8/regression/metadata/pass/typedef-simple/metadata diff --git a/tests/1.8/regression/metadata/fail/array-redefinition/metadata b/tests/1.8/regression/metadata/fail/array-redefinition/metadata new file mode 100644 index 0000000..2d9a6e4 --- /dev/null +++ b/tests/1.8/regression/metadata/fail/array-redefinition/metadata @@ -0,0 +1,19 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; + +typedef uint32_t array_type[10]; + +/* FAIL: type 'array_type' is already defined */ +typedef uint64_t array_type[10]; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/fail/struct-inner-struct-undefined/metadata b/tests/1.8/regression/metadata/fail/struct-inner-struct-undefined/metadata new file mode 100644 index 0000000..cfd24b2 --- /dev/null +++ b/tests/1.8/regression/metadata/fail/struct-inner-struct-undefined/metadata @@ -0,0 +1,23 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* FAIL: structure 'dummy2' is not yet defined */ +struct dummy1 { + uint32_t field1; + struct dummy2 field2; +}; + +struct dummy2 { + uint32_t field3; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/fail/struct-recursive/metadata b/tests/1.8/regression/metadata/fail/struct-recursive/metadata new file mode 100644 index 0000000..067d70e --- /dev/null +++ b/tests/1.8/regression/metadata/fail/struct-recursive/metadata @@ -0,0 +1,19 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* FAIL: structure containing itself */ +struct dummy { + uint32_t field1; + struct dummy field2; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/fail/struct-reserved-keywords/metadata b/tests/1.8/regression/metadata/fail/struct-reserved-keywords/metadata new file mode 100644 index 0000000..4147c75 --- /dev/null +++ b/tests/1.8/regression/metadata/fail/struct-reserved-keywords/metadata @@ -0,0 +1,21 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* FAIL: reserved keywords used as fields */ +struct dummy { + uint32_t valid; + uint32_t callsite; + uint32_t env; + uint32_t stream; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/fail/typedef-redefinition/metadata b/tests/1.8/regression/metadata/fail/typedef-redefinition/metadata new file mode 100644 index 0000000..c8c6ffb --- /dev/null +++ b/tests/1.8/regression/metadata/fail/typedef-redefinition/metadata @@ -0,0 +1,17 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; + +/* Fail: duplicate typedef */ +typedef uint32_t myint; +typedef uint64_t myint; + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/fail/typedef-reserved-keyword/metadata b/tests/1.8/regression/metadata/fail/typedef-reserved-keyword/metadata new file mode 100644 index 0000000..b504ca5 --- /dev/null +++ b/tests/1.8/regression/metadata/fail/typedef-reserved-keyword/metadata @@ -0,0 +1,15 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* Fail: cannot typedef a reserved keyword */ +typedef uint32_t int; + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/struct-align-larger/metadata b/tests/1.8/regression/metadata/pass/struct-align-larger/metadata new file mode 100644 index 0000000..ccd510c --- /dev/null +++ b/tests/1.8/regression/metadata/pass/struct-align-larger/metadata @@ -0,0 +1,20 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* PASS: struct should be aligned to 16 bits (follows the specified value). */ +struct dummy { + uint32_t field1; + uint32_t field2; + uint32_t field3; +} align(16); + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/struct-align-smaller/metadata b/tests/1.8/regression/metadata/pass/struct-align-smaller/metadata new file mode 100644 index 0000000..6c5e280 --- /dev/null +++ b/tests/1.8/regression/metadata/pass/struct-align-smaller/metadata @@ -0,0 +1,23 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* + * PASS: struct should be aligned to 8 bits (fields' value is larger than the + * one specified by the struct). + */ +struct dummy { + uint32_t field1; + uint32_t field2; + uint32_t field3; +} align(4); + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/struct-inner-struct/metadata b/tests/1.8/regression/metadata/pass/struct-inner-struct/metadata new file mode 100644 index 0000000..8c5ce95 --- /dev/null +++ b/tests/1.8/regression/metadata/pass/struct-inner-struct/metadata @@ -0,0 +1,23 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +struct dummy1 { + uint32_t field1; +} + +/* PASS: Inner structure is defined earlier */ +struct dummy2 { + uint32_t field2; + struct dummy1 field3; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/struct-unamed-struct-as-field/metadata b/tests/1.8/regression/metadata/pass/struct-unamed-struct-as-field/metadata new file mode 100644 index 0000000..042e802 --- /dev/null +++ b/tests/1.8/regression/metadata/pass/struct-unamed-struct-as-field/metadata @@ -0,0 +1,22 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := int; + +/* PASS: unnamed struct type used as field */ +struct dummy { + int normal_field; + struct { + int sub_field1; + int sub_field2; + } x; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + int magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/struct-underscores-in-fields/metadata b/tests/1.8/regression/metadata/pass/struct-underscores-in-fields/metadata new file mode 100644 index 0000000..12e8c0d --- /dev/null +++ b/tests/1.8/regression/metadata/pass/struct-underscores-in-fields/metadata @@ -0,0 +1,20 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* PASS: 'field' and '_field' should be different fields */ +struct dummy { + uint32_t field; + uint32_t _field; + uint32_t __field; +}; + + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/typealias-reserved-keyword/metadata b/tests/1.8/regression/metadata/pass/typealias-reserved-keyword/metadata new file mode 100644 index 0000000..925685d --- /dev/null +++ b/tests/1.8/regression/metadata/pass/typealias-reserved-keyword/metadata @@ -0,0 +1,20 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* PASS: It's possible to typedef reserved keywords */ +typealias uint32_t := int; + +struct mystruct { + uint32_t field1; + int field2; +}; + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/typealias-simple/metadata b/tests/1.8/regression/metadata/pass/typealias-simple/metadata new file mode 100644 index 0000000..847cd31 --- /dev/null +++ b/tests/1.8/regression/metadata/pass/typealias-simple/metadata @@ -0,0 +1,20 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* PASS: straight typealias */ +typealias uint32_t := myint; + +struct mystruct { + uint32_t field1; + myint field2; +}; + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; diff --git a/tests/1.8/regression/metadata/pass/typedef-simple/metadata b/tests/1.8/regression/metadata/pass/typedef-simple/metadata new file mode 100644 index 0000000..45587ea --- /dev/null +++ b/tests/1.8/regression/metadata/pass/typedef-simple/metadata @@ -0,0 +1,15 @@ +/* CTF 1.8 */ + +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; + +/* PASS: straight typedef */ +typedef uint32_t myint; + +trace { + major = 2; + minor = 1; + byte_order = le; + packet.header := struct { + uint32_t magic; + }; +}; -- 2.34.1