[PATCH weston v3 5/5] Converted the config parser test to the new framework.

Bryce Harrington bryce at osg.samsung.com
Fri May 29 13:48:19 PDT 2015


On Tue, May 26, 2015 at 04:06:41PM -0700, Jon A. Cruz wrote:
> Signed-off-by: Jon A. Cruz <jonc at osg.samsung.com>
> ---
>  Makefile.am                |   9 +-
>  tests/config-parser-test.c | 368 +++++++++++++++++++++++++++++++++++++--------
>  2 files changed, 310 insertions(+), 67 deletions(-)

Thanks for including some tests converted to the new format.  Looks
concise for all that it does behind the scenes.

In my first pass reviewing, I marked a bunch of suggested changes, but
I notice all the things I complained about where just inherited from the
original test.  Whether or not those issues need fixed, it's probably
best to do so in a separate followup anyway, so for this translation
patch:

Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
 
> diff --git a/Makefile.am b/Makefile.am
> index b1b7c20..5cbd4a0 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -1074,7 +1074,14 @@ libtest_runner_la_SOURCES =			\
>  libtest_runner_la_CFLAGS = $(GCC_CFLAGS) $(COMPOSITOR_CFLAGS)
>  
>  config_parser_test_SOURCES = tests/config-parser-test.c
> -config_parser_test_LDADD = libshared.la libtest-runner.la $(COMPOSITOR_LIBS)
> +config_parser_test_LDADD =	\
> +	libshared.la		\
> +	$(COMPOSITOR_LIBS)	\
> +	libzunitc.la		\
> +	libzunitcmain.la
> +config_parser_test_CFLAGS =			\
> +	-Wunused \
> +	-I$(top_srcdir)/tools/zunitc/inc
>  
>  vertex_clip_test_SOURCES =			\
>  	tests/vertex-clip-test.c		\
> diff --git a/tests/config-parser-test.c b/tests/config-parser-test.c
> index 4b255b7..237947f 100644
> --- a/tests/config-parser-test.c
> +++ b/tests/config-parser-test.c
> @@ -24,6 +24,7 @@
>  
>  #include <stdlib.h>
>  #include <stdint.h>
> +#include <stdio.h>
>  #include <string.h>
>  #include <assert.h>
>  #include <errno.h>
> @@ -31,28 +32,70 @@
>  
>  #include "config-parser.h"
>  
> -static struct weston_config *
> -run_test(const char *text)
> -{
> +#include "zunitc/zunitc.h"
> +
> +#define ARRAY_LENGTH(a) ((int) (sizeof (a) / sizeof (a)[0]))
> +
> +struct fixture_data {
> +	const char *text;
>  	struct weston_config *config;
> +};
> +
> +static struct weston_config *load_config(const char *text, bool good_content)
> +{
> +	struct weston_config *config = NULL;
>  	char file[] = "/tmp/weston-config-parser-test-XXXXXX";
> -	int fd, len;
>  
> -	fd = mkstemp(file);
> -	len = write(fd, text, strlen(text));
> -	assert(len == (int) strlen(text));
> +	ZUC_EXPECT_TRUE(text != NULL);
> +	if (text) {
> +		int len = 0;
> +		int fd = mkstemp(file);
> +
> +		len = write(fd, text, strlen(text));
> +		ZUC_EXPECT_EQ((int)strlen(text), len);
> +
> +		config = weston_config_parse(file);
> +		close(fd);
> +		unlink(file);
> +
> +		if (good_content)
> +			ZUC_EXPECT_TRUE(config != NULL);
> +		else
> +			ZUC_EXPECT_TRUE(config == NULL);
> +	}
> +	return config;
> +}
>  
> -	config = weston_config_parse(file);
> -	close(fd);
> -	unlink(file);
> +static void *setup_test_config(void *data)
> +{
> +	struct weston_config *config = load_config(data, true);
> +
> +	if (zuc_has_failure())
> +		ZUC_MARK_FATAL("Fixture setup failed.");
>  
>  	return config;
>  }
>  
> -static const char t0[] =
> -	"# nothing in this file...\n";
> +static void *setup_test_config_failing(void *data)
> +{
> +	return load_config(data, false);
> +}
> +
> +static void cleanup_test_config(void *data)
> +{
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config != NULL);
> +	weston_config_destroy(config);
> +}
> +
> +static struct zuc_fixture config_test_t0 = {
> +	.data = "# nothing in this file...\n",
> +	.set_up = setup_test_config,
> +	.tear_down = cleanup_test_config
> +};
>  
> -static const char t1[] =
> +static struct zuc_fixture config_test_t1 = {
> +	.data =
>  	"# comment line here...\n"
>  	"\n"
>  	"[foo]\n"
> @@ -76,130 +119,323 @@ static const char t1[] =
>  	"[bucket]\n"
>  	"material=plastic \n"
>  	"color=red\n"
> -	"contents=sand\n";
> +	"contents=sand\n",
> +	.set_up = setup_test_config,
> +	.tear_down = cleanup_test_config
> +};
>  
>  static const char *section_names[] = {
>  	"foo", "bar", "stuff", "bucket", "bucket"
>  };
>  
> -static const char t2[] =
> +/*
> + * Since these next few won't parse, we don't add the tear_down to
> + * attempt cleanup.
> + */
> +
> +static struct zuc_fixture config_test_t2 = {
> +	.data =
>  	"# invalid section...\n"
> -	"[this bracket isn't closed\n";
> +	"[this bracket isn't closed\n",
> +	.set_up = setup_test_config_failing,
> +};
>  
> -static const char t3[] =
> +static struct zuc_fixture config_test_t3 = {
> +	.data =
>  	"# line without = ...\n"
>  	"[bambam]\n"
> -	"this line isn't any kind of valid\n";
> +	"this line isn't any kind of valid\n",
> +	.set_up = setup_test_config_failing,
> +};
>  
> -static const char t4[] =
> +static struct zuc_fixture config_test_t4 = {
> +	.data =
>  	"# starting with = ...\n"
>  	"[bambam]\n"
> -	"=not valid at all\n";
> +	"=not valid at all\n",
> +	.set_up = setup_test_config_failing,
> +};
>  
> -int main(int argc, char *argv[])
> +ZUC_TEST_F(config_test_t0, comment_only)
>  {
> -	struct weston_config *config;
> -	struct weston_config_section *section;
> -	const char *name;
> -	char *s;
> -	int r, b, i;
> -	int32_t n;
> -	uint32_t u;
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config != NULL);
> +}
>  
> -	config = run_test(t0);
> -	assert(config);
> -	weston_config_destroy(config);
> +/** @todo individual t1 tests should have more descriptive names. */
>  
> -	config = run_test(t1);
> -	assert(config);
> -	section = weston_config_get_section(config, "mollusc", NULL, NULL);
> -	assert(section == NULL);
> +ZUC_TEST_F(config_test_t1, test001)
> +{
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config != NULL);
> +	section = weston_config_get_section(config,
> +					    "mollusc", NULL, NULL);
> +	ZUC_ASSERT_TRUE(section == NULL);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test002)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "foo", NULL, NULL);
>  	r = weston_config_section_get_string(section, "a", &s, NULL);
> -	assert(r == 0 && strcmp(s, "b") == 0);
> +	ZUC_EXPECT_EQ(0, r);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "b"));
>  	free(s);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test003)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "foo", NULL, NULL);
>  	r = weston_config_section_get_string(section, "b", &s, NULL);
> -	assert(r == -1 && errno == ENOENT && s == NULL);
> +
> +	ZUC_EXPECT_EQ(-1, r);
> +	ZUC_EXPECT_EQ(ENOENT, errno);
> +	ZUC_EXPECT_TRUE(s == NULL);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test004)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "foo", NULL, NULL);
>  	r = weston_config_section_get_string(section, "name", &s, NULL);
> -	assert(r == 0 && strcmp(s, "Roy Batty") == 0);
> +
> +	ZUC_EXPECT_EQ(0, r);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "Roy Batty"));
> +
>  	free(s);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test005)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_string(section, "a", &s, "boo");
> -	assert(r == -1 && errno == ENOENT && strcmp(s, "boo") == 0);
> +
> +	ZUC_EXPECT_EQ(-1, r);
> +	ZUC_EXPECT_EQ(ENOENT, errno);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "boo"));
> +
>  	free(s);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test006)
> +{
> +	int r;
> +	int32_t n;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_int(section, "number", &n, 600);
> -	assert(r == 0 && n == 5252);
> +
> +	ZUC_ASSERT_EQ(0, r);
> +	ZUC_ASSERT_EQ(5252, n);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test007)
> +{
> +	int r;
> +	int32_t n;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_int(section, "+++", &n, 700);
> -	assert(r == -1 && errno == ENOENT && n == 700);
> +
> +	ZUC_ASSERT_EQ(-1, r);
> +	ZUC_ASSERT_EQ(ENOENT, errno);
> +	ZUC_ASSERT_EQ(700, n);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test008)
> +{
> +	int r;
> +	uint32_t u;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_uint(section, "number", &u, 600);
> -	assert(r == 0 && u == 5252);
> +	ZUC_ASSERT_EQ(0, r);
> +	ZUC_ASSERT_EQ(5252, u);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test009)
> +{
> +	int r;
> +	uint32_t u;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_uint(section, "+++", &u, 600);
> -	assert(r == -1 && errno == ENOENT && u == 600);
> +	ZUC_ASSERT_EQ(-1, r);
> +	ZUC_ASSERT_EQ(ENOENT, errno);
> +	ZUC_ASSERT_EQ(600, u);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test010)
> +{
> +	int r, b;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "bar", NULL, NULL);
>  	r = weston_config_section_get_bool(section, "flag", &b, 600);
> -	assert(r == 0 && b == 0);
> +	ZUC_ASSERT_EQ(0, r);
> +	ZUC_ASSERT_EQ(0, b);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test011)
> +{
> +	int r, b;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
> +
> +	section = weston_config_get_section(config, "stuff", NULL, NULL);
> +	r = weston_config_section_get_bool(section, "flag", &b, -1);
> +	ZUC_ASSERT_EQ(0, r);
> +	ZUC_ASSERT_EQ(1, b);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test012)
> +{
> +	int r, b;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "stuff", NULL, NULL);
>  	r = weston_config_section_get_bool(section, "flag", &b, -1);
> -	assert(r == 0 && b == 1);
> +	ZUC_ASSERT_EQ(0, r);
> +	ZUC_ASSERT_EQ(1, b);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test013)
> +{
> +	int r, b;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = weston_config_get_section(config, "stuff", NULL, NULL);
>  	r = weston_config_section_get_bool(section, "bonk", &b, -1);
> -	assert(r == -1 && errno == ENOENT && b == -1);
> +	ZUC_ASSERT_EQ(-1, r);
> +	ZUC_ASSERT_EQ(ENOENT, errno);
> +	ZUC_ASSERT_EQ(-1, b);
> +}
>  
> -	section = weston_config_get_section(config, "bucket", "color", "blue");
> +ZUC_TEST_F(config_test_t1, test014)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
> +
> +	section = weston_config_get_section(config,
> +					    "bucket", "color", "blue");
>  	r = weston_config_section_get_string(section, "contents", &s, NULL);
> -	assert(r == 0 && strcmp(s, "live crabs") == 0);
> +
> +	ZUC_EXPECT_EQ(0, r);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "live crabs"));
> +
>  	free(s);
> +}
>  
> -	section = weston_config_get_section(config, "bucket", "color", "red");
> +ZUC_TEST_F(config_test_t1, test015)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
> +
> +	section = weston_config_get_section(config,
> +					    "bucket", "color", "red");
>  	r = weston_config_section_get_string(section, "contents", &s, NULL);
> -	assert(r == 0 && strcmp(s, "sand") == 0);
> +
> +	ZUC_EXPECT_EQ(0, r);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "sand"));
> +
>  	free(s);
> +}
>  
> -	section = weston_config_get_section(config, "bucket", "color", "pink");
> -	assert(section == NULL);
> +ZUC_TEST_F(config_test_t1, test016)
> +{
> +	char *s;
> +	int r;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
> +
> +	section = weston_config_get_section(config,
> +					    "bucket", "color", "pink");
> +	ZUC_ASSERT_TRUE(section == NULL);
>  	r = weston_config_section_get_string(section, "contents", &s, "eels");
> -	assert(r == -1 && errno == ENOENT && strcmp(s, "eels") == 0);
> +
> +	ZUC_EXPECT_EQ(-1, r);
> +	ZUC_EXPECT_EQ(ENOENT, errno);
> +	ZUC_EXPECT_EQ(0, strcmp(s, "eels"));
> +
>  	free(s);
> +}
> +
> +ZUC_TEST_F(config_test_t1, test017)
> +{
> +	const char *name;
> +	int i;
> +	struct weston_config_section *section;
> +	struct weston_config *config = data;
>  
>  	section = NULL;
>  	i = 0;
>  	while (weston_config_next_section(config, &section, &name))
> -		assert(strcmp(section_names[i++], name) == 0);
> -	assert(i == 5);
> +		ZUC_EXPECT_EQ(0, strcmp(section_names[i++], name));
>  
> -	weston_config_destroy(config);
> +	ZUC_EXPECT_EQ(5, i);
> +}
>  
> -	config = run_test(t2);
> -	assert(config == NULL);
> +ZUC_TEST_F(config_test_t2, doesnt_parse)
> +{
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config == NULL);
> +}
>  
> -	config = run_test(t3);
> -	assert(config == NULL);
> +ZUC_TEST_F(config_test_t3, doesnt_parse)
> +{
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config == NULL);
> +}
>  
> -	config = run_test(t4);
> -	assert(config == NULL);
> +ZUC_TEST_F(config_test_t4, doesnt_parse)
> +{
> +	struct weston_config *config = data;
> +	ZUC_ASSERT_TRUE(config == NULL);
> +}
>  
> +ZUC_TEST(config_test, destroy_null)
> +{
>  	weston_config_destroy(NULL);
> -	assert(weston_config_next_section(NULL, NULL, NULL) == 0);
> +	ZUC_ASSERT_EQ(0, weston_config_next_section(NULL, NULL, NULL));
> +}
>  
> +ZUC_TEST(config_test, section_from_null)
> +{
> +	struct weston_config_section *section;
>  	section = weston_config_get_section(NULL, "bucket", NULL, NULL);
> -	assert(section == NULL);
> -
> -	return 0;
> +	ZUC_ASSERT_TRUE(section == NULL);
>  }
> -- 
> 2.1.0



More information about the wayland-devel mailing list