> On 06-Nov-2023, at 8:43 PM, Ani Sinha <anisi...@redhat.com> wrote:
>
>
>
>> On 06-Nov-2023, at 7:45 PM, Igor Mammedov <imamm...@redhat.com> wrote:
>>
>> On Thu, 2 Nov 2023 13:46:24 +0530
>> Ani Sinha <anisi...@redhat.com> wrote:
>>
>>> When dumping table blobs using rebuild-expected-aml.sh, table blobs from all
>>> test variants are dumped regardless of whether there are any actual changes
>>> to
>>> the tables or not. This creates lot of new files for various test variants
>>> that
>>> are not part of the git repository. This is because we do not check in all
>>> table
>>> blobs for all test variants into the repository. Only those blobs for those
>>> variants that are different from the generic test-variant agnostic blob are
>>> checked in.
>>>
>>> This change makes the test smarter by checking if at all there are any
>>> changes
>>> in the tables from the checked-in gold master blobs.
>>
>>> If there are no changes, no new files are written for test variants.
>>> However, existing files continue to be overwritten regardless of whether
>>> there are changes.
>>> Hence, new files will be generated only when there are actual changes in
>>> the tables.
>>
>> You lost me in those 3 sentences. Perhaps rephrasing and adding examples
>> wold make it readable. (aka what's (not)writen and when)
>
> OK I will try in v2.
>
>>
>>
>>> This would make analyzing changes to tables less confusing and there would
>>> be no need to clean useless untracked files when there are no table changes.
>>
>> what happens if an absolutely new table has been introduced which
>> is not mentioned in tests yet (will it be dumped or not)?
>
> When a new table is introduced, there is no existing data to compare the
> tables with. In this case, it will result in assertion in the following line:
>
>> g_assert(exp_sdt.aml_file);
>
> I am not sure what to do in this case except to unconditionally dump all
> tables. Maybe introduce another flag? Not sure.
Oh wait, this patch works as is since we have said in bios-tables-test.c:
> add empty files for new tables, if any, under tests/data/acpi
So for new tables the lengths will not match and the table should be dumped. I
need to test this case once.
>
>>
>>>
>>> CC: peter.mayd...@linaro.org
>>> Signed-off-by: Ani Sinha <anisi...@redhat.com>
>>> ---
>>> tests/qtest/bios-tables-test.c | 14 +++++++++++++-
>>> 1 file changed, 13 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
>>> index 9f4bc15aab..743b509e93 100644
>>> --- a/tests/qtest/bios-tables-test.c
>>> +++ b/tests/qtest/bios-tables-test.c
>>> @@ -109,6 +109,7 @@ static const char *iasl;
>>> #endif
>>>
>>> static int verbosity_level;
>>> +static GArray *load_expected_aml(test_data *data);
>>>
>>> static bool compare_signature(const AcpiSdtTable *sdt, const char
>>> *signature)
>>> {
>>> @@ -241,21 +242,32 @@ static void test_acpi_fadt_table(test_data *data)
>>>
>>> static void dump_aml_files(test_data *data, bool rebuild)
>>> {
>>> - AcpiSdtTable *sdt;
>>> + AcpiSdtTable *sdt, *exp_sdt;
>>> GError *error = NULL;
>>> gchar *aml_file = NULL;
>>> + test_data exp_data = {};
>>> gint fd;
>>> ssize_t ret;
>>> int i;
>>>
>>> + exp_data.tables = load_expected_aml(data);
>>> for (i = 0; i < data->tables->len; ++i) {
>>> const char *ext = data->variant ? data->variant : "";
>>> sdt = &g_array_index(data->tables, AcpiSdtTable, i);
>>> + exp_sdt = &g_array_index(exp_data.tables, AcpiSdtTable, i);
>>> g_assert(sdt->aml);
>>> + g_assert(exp_sdt->aml);
>>>
>>> if (rebuild) {
>>> aml_file = g_strdup_printf("%s/%s/%.4s%s", data_dir,
>>> data->machine,
>>> sdt->aml, ext);
>>> + if (!g_file_test(aml_file, G_FILE_TEST_EXISTS) &&
>>> + sdt->aml_len == exp_sdt->aml_len &&
>>> + !memcmp(sdt->aml, exp_sdt->aml, sdt->aml_len)) {
>>> + /* identical tables, no need to write new files */
>>> + g_free(aml_file);
>>> + continue;
>>> + }
>>> fd = g_open(aml_file, O_WRONLY|O_TRUNC|O_CREAT,
>>> S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
>>> if (fd < 0) {