poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] testsuite: add test for BTF pickle


From: Jose E. Marchesi
Subject: Re: [PATCH] testsuite: add test for BTF pickle
Date: Tue, 04 Jan 2022 23:49:03 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi David.

> 2022-01-04  David Faust  <david.faust@oracle.com>
>
>       * testsuite/poke.pickles/btf-test.pk: New test.

OK for both master and maint/poke-1.
Thanks!

> ---
>  ChangeLog                          |   4 +
>  testsuite/poke.pickles/btf-test.pk | 200 +++++++++++++++++++++++++++++
>  2 files changed, 204 insertions(+)
>  create mode 100644 testsuite/poke.pickles/btf-test.pk
>
> diff --git a/ChangeLog b/ChangeLog
> index b889ab5e..461c0ef1 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,7 @@
> +2022-01-04  David Faust  <david.faust@oracle.com>
> +
> +     * testsuite/poke.pickles/btf-test.pk: New test.
> +
>  2022-01-04  David Faust  <david.faust@oracle.com>
>  
>       * pickles/btf.pk (BTF_Header): Adjust constraint on magic number
> diff --git a/testsuite/poke.pickles/btf-test.pk 
> b/testsuite/poke.pickles/btf-test.pk
> new file mode 100644
> index 00000000..e2d0fe9d
> --- /dev/null
> +++ b/testsuite/poke.pickles/btf-test.pk
> @@ -0,0 +1,200 @@
> +/* btf-test.pk - Tests for the BTF pickle.  */
> +
> +/* Copyright (C) 2022 Oracle, Inc.  */
> +
> +/* This program is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +load pktest;
> +load btf;
> +
> +var data = open ("*data*");
> +
> +uint<8>[622] @ data : 0#B = [
> +  0x9fUB, 0xebUB, 0x01UB, 0x00UB, 0x18UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x9cUB, 0x01UB, 0x00UB, 0x00UB, 0x9cUB, 0x01UB,
> +  0x00UB, 0x00UB, 0xbaUB, 0x00UB, 0x00UB, 0x00UB, 0x01UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x04UB, 0x00UB, 0x00UB, 0x84UB, 0x08UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x0bUB, 0x00UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x1aUB, 0x00UB, 0x00UB, 0x00UB, 0x03UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x20UB, 0x00UB, 0x00UB, 0x07UB, 0x1fUB, 0x00UB, 0x00UB,
> +  0x00UB, 0x03UB, 0x00UB, 0x00UB, 0x00UB, 0x27UB, 0x00UB, 0x00UB, 0x0dUB,
> +  0x24UB, 0x00UB, 0x00UB, 0x00UB, 0x03UB, 0x00UB, 0x00UB, 0x00UB, 0x34UB,
> +  0x00UB, 0x00UB, 0x02UB, 0x07UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x01UB, 0x04UB, 0x00UB, 0x00UB, 0x00UB, 0x20UB, 0x00UB, 0x00UB,
> +  0x01UB, 0x0dUB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x01UB,
> +  0x04UB, 0x00UB, 0x00UB, 0x00UB, 0x20UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x0aUB, 0x01UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x35UB, 0x00UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB, 0x00UB,
> +  0x04UB, 0x10UB, 0x00UB, 0x00UB, 0x00UB, 0x4bUB, 0x00UB, 0x00UB, 0x00UB,
> +  0x06UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x5bUB,
> +  0x00UB, 0x00UB, 0x00UB, 0x08UB, 0x00UB, 0x00UB, 0x00UB, 0x40UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x39UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x01UB, 0x08UB, 0x00UB, 0x00UB, 0x00UB, 0x40UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x4dUB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x01UB, 0x01UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x08UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x03UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x07UB, 0x00UB, 0x00UB, 0x00UB, 0x06UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x08UB, 0x00UB, 0x00UB, 0x00UB, 0x60UB, 0x00UB, 0x00UB, 0x00UB, 0x03UB,
> +  0x00UB, 0x00UB, 0x04UB, 0x0cUB, 0x00UB, 0x00UB, 0x00UB, 0x6aUB, 0x00UB,
> +  0x00UB, 0x00UB, 0x0aUB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x6cUB, 0x00UB, 0x00UB, 0x00UB, 0x0aUB, 0x00UB, 0x00UB, 0x00UB,
> +  0x20UB, 0x00UB, 0x00UB, 0x00UB, 0x6eUB, 0x00UB, 0x00UB, 0x00UB, 0x0aUB,
> +  0x00UB, 0x00UB, 0x00UB, 0x40UB, 0x00UB, 0x00UB, 0x00UB, 0x64UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x10UB, 0x04UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x70UB, 0x00UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB, 0x00UB, 0x05UB,
> +  0x10UB, 0x00UB, 0x00UB, 0x00UB, 0x72UB, 0x00UB, 0x00UB, 0x00UB, 0x05UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x74UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x09UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB, 0x00UB, 0x0dUB,
> +  0x02UB, 0x00UB, 0x00UB, 0x00UB, 0xa9UB, 0x00UB, 0x00UB, 0x00UB, 0x02UB,
> +  0x00UB, 0x00UB, 0x00UB, 0xabUB, 0x00UB, 0x00UB, 0x00UB, 0x02UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x29UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x0eUB, 0x04UB, 0x00UB, 0x00UB, 0x00UB, 0x01UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x76UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x0eUB, 0x0bUB,
> +  0x00UB, 0x00UB, 0x00UB, 0x01UB, 0x00UB, 0x00UB, 0x00UB, 0x7bUB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x0cUB, 0x0cUB, 0x00UB, 0x00UB,
> +  0x00UB, 0xadUB, 0x00UB, 0x00UB, 0x00UB, 0x01UB, 0x00UB, 0x00UB, 0x0fUB,
> +  0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x0eUB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x00UB, 0x10UB, 0x00UB, 0x00UB, 0x00UB, 0xb2UB, 0x00UB,
> +  0x00UB, 0x00UB, 0x01UB, 0x00UB, 0x00UB, 0x0fUB, 0x00UB, 0x00UB, 0x00UB,
> +  0x00UB, 0x0dUB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB,
> +  0x08UB, 0x00UB, 0x00UB, 0x00UB, 0x00UB, 0x62UB, 0x69UB, 0x74UB, 0x74UB,
> +  0x79UB, 0x00UB, 0x69UB, 0x6eUB, 0x74UB, 0x00UB, 0x61UB, 0x00UB, 0x75UB,
> +  0x6eUB, 0x73UB, 0x69UB, 0x67UB, 0x6eUB, 0x65UB, 0x64UB, 0x20UB, 0x69UB,
> +  0x6eUB, 0x74UB, 0x00UB, 0x62UB, 0x66UB, 0x5fUB, 0x61UB, 0x00UB, 0x62UB,
> +  0x66UB, 0x5fUB, 0x62UB, 0x00UB, 0x62UB, 0x66UB, 0x5fUB, 0x63UB, 0x00UB,
> +  0x63UB, 0x6fUB, 0x6eUB, 0x73UB, 0x74UB, 0x5fUB, 0x62UB, 0x69UB, 0x74UB,
> +  0x74UB, 0x79UB, 0x00UB, 0x66UB, 0x6fUB, 0x6fUB, 0x00UB, 0x6cUB, 0x6fUB,
> +  0x6eUB, 0x67UB, 0x20UB, 0x75UB, 0x6eUB, 0x73UB, 0x69UB, 0x67UB, 0x6eUB,
> +  0x65UB, 0x64UB, 0x20UB, 0x69UB, 0x6eUB, 0x74UB, 0x00UB, 0x6cUB, 0x00UB,
> +  0x75UB, 0x6eUB, 0x73UB, 0x69UB, 0x67UB, 0x6eUB, 0x65UB, 0x64UB, 0x20UB,
> +  0x63UB, 0x68UB, 0x61UB, 0x72UB, 0x00UB, 0x64UB, 0x61UB, 0x74UB, 0x61UB,
> +  0x00UB, 0x62UB, 0x61UB, 0x72UB, 0x00UB, 0x66UB, 0x6cUB, 0x6fUB, 0x61UB,
> +  0x74UB, 0x00UB, 0x78UB, 0x00UB, 0x79UB, 0x00UB, 0x7aUB, 0x00UB, 0x75UB,
> +  0x00UB, 0x66UB, 0x00UB, 0x62UB, 0x00UB, 0x6dUB, 0x79UB, 0x5fUB, 0x75UB,
> +  0x00UB, 0x61UB, 0x63UB, 0x74UB, 0x00UB, 0x2fUB, 0x68UB, 0x6fUB, 0x6dUB,
> +  0x65UB, 0x2fUB, 0x64UB, 0x66UB, 0x61UB, 0x75UB, 0x73UB, 0x74UB, 0x2fUB,
> +  0x70UB, 0x6cUB, 0x61UB, 0x79UB, 0x70UB, 0x65UB, 0x6eUB, 0x2fUB, 0x62UB,
> +  0x74UB, 0x66UB, 0x2fUB, 0x62UB, 0x74UB, 0x66UB, 0x2dUB, 0x74UB, 0x65UB,
> +  0x73UB, 0x74UB, 0x2dUB, 0x70UB, 0x6fUB, 0x6bUB, 0x65UB, 0x2eUB, 0x63UB,
> +  0x00UB, 0x00UB, 0x61UB, 0x00UB, 0x62UB, 0x00UB, 0x2eUB, 0x62UB, 0x73UB,
> +  0x73UB, 0x00UB, 0x2eUB, 0x72UB, 0x6fUB, 0x64UB, 0x61UB, 0x74UB, 0x61UB,
> +  0x00UB
> +];
> +
> +var tests = [
> +  PkTest {
> +    name = "read header info",
> +    func = lambda (string name) void:
> +      {
> +        var hdr = BTF_Header @ data : 0#B;
> +
> +        assert (hdr.magic == 0xeb9f);
> +        assert (hdr.type_off == 0U#B);
> +        assert (hdr.type_len == 412U#B);
> +        assert (hdr.str_off  == hdr.type_len);
> +        assert (hdr.str_len  == 186U#B);
> +      },
> +  },
> +  PkTest {
> +    name = "read types",
> +    func = lambda (string name) void:
> +      {
> +        var btf = BTF_Section @ data : 0#B;
> +
> +        assert (btf.types'size == btf.header.type_len);
> +        assert (btf.types'length == 17);
> +
> +        assert (btf.types[0].info.kind == BTF_KIND_STRUCT);
> +        assert (btf.types[0].info.kind_flag == 1);
> +        assert (btf.types[0].info.vlen == 4);
> +        assert (btf.types[0].attrs.size == 8#B);
> +        assert (btf.types[0].data.members'length == btf.types[0].info.vlen);
> +        assert (btf.types[0].data.members[1].type_id == 3);
> +        assert (btf.types[0].data.members[1].offset.bitfield.bitfield_size ==
> +                    7#b);
> +        assert (btf.types[0].data.members[1].offset.bitfield.bit_offset ==
> +                    32#b);
> +
> +        assert (btf.types[1].info.kind == BTF_KIND_INT);
> +        assert (btf.types[1].attrs.size == 4#B);
> +
> +        assert (btf.types[3].info.kind == BTF_KIND_CONST);
> +        assert (btf.types[3].attrs.type_id == 1);
> +
> +        assert (btf.types[7].info.kind == BTF_KIND_ARRAY);
> +        assert (btf.types[7].data.array.elem_type == 7);
> +        assert (btf.types[7].data.array.index_type == 6);
> +        assert (btf.types[7].data.array.nelems == 8);
> +
> +        assert (btf.types[8].info.kind == BTF_KIND_STRUCT);
> +        assert (btf.types[8].info.kind_flag == 0);
> +
> +        assert (btf.types[9].info.kind == BTF_KIND_FLOAT);
> +
> +        assert (btf.types[10].info.kind == BTF_KIND_UNION);
> +        assert (btf.types[10].info.vlen == 2);
> +        assert (btf.types[10].attrs.size == 16#B);
> +        assert (btf.types[10].data.members[0].type_id == 5);
> +
> +        assert (btf.types[11].info.kind == BTF_KIND_FUNC_PROTO);
> +        assert (btf.types[11].info.vlen == 2);
> +        assert (btf.types[11].attrs.type_id == 2);
> +        assert (btf.types[11].data.func_proto.params[0].param_type == 2);
> +
> +        assert (btf.types[12].info.kind == BTF_KIND_VAR);
> +        assert (btf.types[12].name == 41#B);
> +        assert (btf.types[12].attrs.type_id == 4);
> +        assert (btf.types[12].data.variable.linkage == 1);
> +
> +        assert (btf.types[14].info.kind == BTF_KIND_FUNC);
> +        assert (btf.types[14].name == 123#B);
> +        assert (btf.types[14].attrs.type_id == 12);
> +
> +        assert (btf.types[15].info.kind == BTF_KIND_DATASEC);
> +        assert (btf.types[15].info.vlen == 1);
> +        assert (btf.types[15].attrs.size == 0#B);
> +        assert (btf.types[15].data.datasec[0].var_type == 14);
> +        assert (btf.types[15].data.datasec[0].size == 16#B);
> +      },
> +  },
> +  PkTest {
> +    name = "read strings",
> +    func = lambda (string name) void:
> +      {
> +        var btf = BTF_Section @ data : 0#B;
> +
> +        assert (btf.strings'size == btf.header.str_len);
> +        assert (btf.strings'length == 30);
> +
> +        assert (btf.get_string (btf.types[0].name) == "bitty");
> +        assert (btf.get_string (btf.types[0].data.members[1].name) == 
> "bf_a");
> +        assert (btf.get_string (btf.types[3].name) == "");
> +        assert (btf.get_string (btf.types[5].name) == "long unsigned int");
> +        assert (btf.get_string (btf.types[11].data.func_proto.params[0].name)
> +                   == "a");
> +        assert (btf.get_string (btf.types[14].name) == "act");
> +        assert (btf.get_string (btf.types[15].name) == ".bss");
> +
> +        assert (btf.strings[0] == "");
> +        assert (btf.strings[29] == ".rodata");
> +      },
> +  },
> +];
> +
> +var ok = pktest_run (tests);
> +
> +close (data);
> +exit (ok ? 0 : 1);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]