static void compare_dirs()

in test.c [2580:2648]


static void compare_dirs(struct kunit *test, struct tb_property_dir *d1,
			 struct tb_property_dir *d2)
{
	struct tb_property *p1, *p2, *tmp;
	int n1, n2, i;

	if (d1->uuid) {
		KUNIT_ASSERT_TRUE(test, d2->uuid != NULL);
		KUNIT_ASSERT_TRUE(test, uuid_equal(d1->uuid, d2->uuid));
	} else {
		KUNIT_ASSERT_TRUE(test, d2->uuid == NULL);
	}

	n1 = 0;
	tb_property_for_each(d1, tmp)
		n1++;
	KUNIT_ASSERT_NE(test, n1, 0);

	n2 = 0;
	tb_property_for_each(d2, tmp)
		n2++;
	KUNIT_ASSERT_NE(test, n2, 0);

	KUNIT_ASSERT_EQ(test, n1, n2);

	p1 = NULL;
	p2 = NULL;
	for (i = 0; i < n1; i++) {
		p1 = tb_property_get_next(d1, p1);
		KUNIT_ASSERT_TRUE(test, p1 != NULL);
		p2 = tb_property_get_next(d2, p2);
		KUNIT_ASSERT_TRUE(test, p2 != NULL);

		KUNIT_ASSERT_STREQ(test, &p1->key[0], &p2->key[0]);
		KUNIT_ASSERT_EQ(test, p1->type, p2->type);
		KUNIT_ASSERT_EQ(test, p1->length, p2->length);

		switch (p1->type) {
		case TB_PROPERTY_TYPE_DIRECTORY:
			KUNIT_ASSERT_TRUE(test, p1->value.dir != NULL);
			KUNIT_ASSERT_TRUE(test, p2->value.dir != NULL);
			compare_dirs(test, p1->value.dir, p2->value.dir);
			break;

		case TB_PROPERTY_TYPE_DATA:
			KUNIT_ASSERT_TRUE(test, p1->value.data != NULL);
			KUNIT_ASSERT_TRUE(test, p2->value.data != NULL);
			KUNIT_ASSERT_TRUE(test,
				!memcmp(p1->value.data, p2->value.data,
					p1->length * 4)
			);
			break;

		case TB_PROPERTY_TYPE_TEXT:
			KUNIT_ASSERT_TRUE(test, p1->value.text != NULL);
			KUNIT_ASSERT_TRUE(test, p2->value.text != NULL);
			KUNIT_ASSERT_STREQ(test, p1->value.text, p2->value.text);
			break;

		case TB_PROPERTY_TYPE_VALUE:
			KUNIT_ASSERT_EQ(test, p1->value.immediate,
					p2->value.immediate);
			break;
		default:
			KUNIT_FAIL(test, "unexpected property type");
			break;
		}
	}
}