This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master in repository gfs2-utils.
commit 3f1b63ed932636ed1232a652fe2e40574b798ad7 Author: Andrew Price anprice@redhat.com AuthorDate: Mon Mar 22 16:01:26 2021 +0000
libgfs2: Implement meta.c checks as unit tests
Move the "self-tests" from meta.c into check_meta.c.
Signed-off-by: Andrew Price anprice@redhat.com --- gfs2/libgfs2/check_meta.c | 57 +++++++++++++++++++++++++++++--- gfs2/libgfs2/meta.c | 83 ----------------------------------------------- 2 files changed, 53 insertions(+), 87 deletions(-)
diff --git a/gfs2/libgfs2/check_meta.c b/gfs2/libgfs2/check_meta.c index 4f4546f2..340d3c8d 100644 --- a/gfs2/libgfs2/check_meta.c +++ b/gfs2/libgfs2/check_meta.c @@ -3,9 +3,56 @@
Suite *suite_meta(void);
-START_TEST(test_lgfs2_meta) +START_TEST(check_metadata_sizes) { - ck_assert(lgfs2_selfcheck() == 0); + unsigned offset; + int i, j; + + for (i = 0; i < lgfs2_metadata_size; i++) { + const struct lgfs2_metadata *m = &lgfs2_metadata[i]; + offset = 0; + for (j = 0; j < m->nfields; j++) { + const struct lgfs2_metafield *f = &m->fields[j]; + ck_assert(f->offset == offset); + offset += f->length; + } + ck_assert(offset == m->size); + } +} +END_TEST + +START_TEST(check_symtab) +{ + int i, j; + + for (i = 0; i < lgfs2_metadata_size; i++) { + const struct lgfs2_metadata *m = &lgfs2_metadata[i]; + for (j = 0; j < m->nfields; j++) { + const struct lgfs2_metafield *f = &m->fields[j]; + if (f->flags & (LGFS2_MFF_MASK|LGFS2_MFF_ENUM)) + ck_assert(f->symtab != NULL); + if (f->symtab) + ck_assert(f->flags & (LGFS2_MFF_MASK|LGFS2_MFF_ENUM)); + } + } +} +END_TEST + +START_TEST(check_ptrs) +{ + int i, j; + + for (i = 0; i < lgfs2_metadata_size; i++) { + const struct lgfs2_metadata *m = &lgfs2_metadata[i]; + for (j = 0; j < m->nfields; j++) { + const struct lgfs2_metafield *f = &m->fields[j]; + if (f->flags & LGFS2_MFF_POINTER) { + ck_assert(f->points_to != 0); + } else { + ck_assert(f->points_to == 0); + } + } + } } END_TEST
@@ -13,8 +60,10 @@ Suite *suite_meta(void) { Suite *s = suite_create("meta.c");
- TCase *tc_meta = tcase_create("Metadata description self-check"); - tcase_add_test(tc_meta, test_lgfs2_meta); + TCase *tc_meta = tcase_create("Metadata description checks"); + tcase_add_test(tc_meta, check_metadata_sizes); + tcase_add_test(tc_meta, check_symtab); + tcase_add_test(tc_meta, check_ptrs); suite_add_tcase(s, tc_meta);
return s; diff --git a/gfs2/libgfs2/meta.c b/gfs2/libgfs2/meta.c index 5ac808c2..6e338d27 100644 --- a/gfs2/libgfs2/meta.c +++ b/gfs2/libgfs2/meta.c @@ -843,89 +843,6 @@ const struct lgfs2_metafield *lgfs2_find_mfield_name(const char *name, const str return NULL; }
-static int check_metadata_sizes(void) -{ - unsigned offset; - int i, j; - int ret = 0; - - for (i = 0; i < lgfs2_metadata_size; i++) { - const struct lgfs2_metadata *m = &lgfs2_metadata[i]; - offset = 0; - for (j = 0; j < m->nfields; j++) { - const struct lgfs2_metafield *f = &m->fields[j]; - if (f->offset != offset) { - fprintf(stderr, "%s: %s: offset is %u, expected %u\n", m->name, f->name, f->offset, offset); - ret = -1; - } - offset += f->length; - } - if (offset != m->size) { - fprintf(stderr, "%s: size mismatch between struct %u and fields %u\n", m->name, m->size, offset); - ret = -1; - } - } - - return ret; -} - -static int check_symtab(void) -{ - int i, j; - int ret = 0; - - for (i = 0; i < lgfs2_metadata_size; i++) { - const struct lgfs2_metadata *m = &lgfs2_metadata[i]; - for (j = 0; j < m->nfields; j++) { - const struct lgfs2_metafield *f = &m->fields[j]; - if (f->flags & (LGFS2_MFF_MASK|LGFS2_MFF_ENUM)) { - if (f->symtab == NULL) { - fprintf(stderr, "%s: Missing symtab for %s\n", m->name, f->name); - ret = -1; - } - } - if (f->symtab) { - if (!(f->flags & (LGFS2_MFF_MASK|LGFS2_MFF_ENUM))) { - fprintf(stderr, "%s: Symtab for non-enum and non-mask field %s\n", m->name, f->name); - ret = -1; - } - } - } - } - - return ret; -} - -static int check_ptrs(void) -{ - int i, j; - int ret = 0; - - for (i = 0; i < lgfs2_metadata_size; i++) { - const struct lgfs2_metadata *m = &lgfs2_metadata[i]; - for (j = 0; j < m->nfields; j++) { - const struct lgfs2_metafield *f = &m->fields[j]; - if ((f->flags & LGFS2_MFF_POINTER) && !f->points_to) { - fprintf(stderr, "%s: Pointer entry %s has no destination\n", m->name, f->name); - ret = -1; - } - } - } - - return ret; -} - -int lgfs2_selfcheck(void) -{ - int ret = 0; - - ret |= check_metadata_sizes(); - ret |= check_symtab(); - ret |= check_ptrs(); - - return ret; -} - const struct lgfs2_metadata *lgfs2_find_mtype(uint32_t mh_type, const unsigned versions) { const struct lgfs2_metadata *m = lgfs2_metadata;