Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Copy Python tests for Modulemd.ModuleStream.tracker into C #410

Merged
merged 1 commit into from
Jan 8, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 145 additions & 0 deletions modulemd/tests/test-modulemd-modulestream.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#define MMD_TEST_DOC_UNICODE_TEXT \
"À϶¥🌭∮⇒⇔¬β∀₂⌀ıəˈ⍳⍴V)" \
"═€ίζησθლბშიнстемองจึองታሽ።ደለᚢᛞᚦᚹ⠳⠞⠊⠎▉▒▒▓😃"
#define MMD_TEST_TRACKER_PROP "tracker"

typedef struct _ModuleStreamFixture
{
Expand Down Expand Up @@ -477,6 +478,136 @@ module_stream_v2_test_documentation (ModuleStreamFixture *fixture,
g_clear_object (&stream);
}

static void
module_stream_v1_test_tracker (ModuleStreamFixture *fixture,
gconstpointer user_data)
{
g_autoptr (ModulemdModuleStreamV1) stream = NULL;
g_autofree gchar *tracker_prop = NULL;
const gchar *tracker = NULL;

stream = modulemd_module_stream_v1_new (NULL, NULL);

// Check the defaults
g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v1_get_tracker (stream);

g_assert_null (tracker);
g_assert_null (tracker_prop);

g_clear_pointer (&tracker_prop, g_free);

// Test property setting
g_object_set (stream, MMD_TEST_TRACKER_PROP, MMD_TEST_DOC_TEXT, NULL);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v1_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_TEXT);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_TEXT);

g_clear_pointer (&tracker_prop, g_free);

// Test set_tracker
modulemd_module_stream_v1_set_tracker (stream, MMD_TEST_DOC_TEXT2);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v1_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_TEXT2);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_TEXT2);

g_clear_pointer (&tracker_prop, g_free);

// Test setting it to NULL
g_object_set (stream, MMD_TEST_TRACKER_PROP, NULL, NULL);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v1_get_tracker (stream);

g_assert_null (tracker);
g_assert_null (tracker_prop);

g_clear_pointer (&tracker_prop, g_free);

// Test Unicode values
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to the docs, the tracker is:
The website address of the upstream bug tracker for this module.

So it doesn't really make sense to have Unicode characters in a website URL. Now we should either remove this test assuming no one is ever going to add a URL containing Unicode or handle this case in the main function by returning NULL whenever we encounter an invalid URL.

@sgallagher What do you suggest?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leave it as-is for now. There's nothing stopping someone right now from putting unicode into the metadata here. We should probably look at using http-parser or llhttp to validate that we have validly-formatted URLs though. Mind opening a ticket to track that?

modulemd_module_stream_v1_set_tracker (stream, MMD_TEST_DOC_UNICODE_TEXT);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v1_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_UNICODE_TEXT);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_UNICODE_TEXT);

g_clear_pointer (&tracker_prop, g_free);
g_clear_object (&stream);
}

static void
module_stream_v2_test_tracker (ModuleStreamFixture *fixture,
gconstpointer user_data)
{
g_autoptr (ModulemdModuleStreamV2) stream = NULL;
g_autofree gchar *tracker_prop = NULL;
const gchar *tracker = NULL;

stream = modulemd_module_stream_v2_new (NULL, NULL);

// Check the defaults
g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v2_get_tracker (stream);

g_assert_null (tracker);
g_assert_null (tracker_prop);

g_clear_pointer (&tracker_prop, g_free);

// Test property setting
g_object_set (stream, MMD_TEST_TRACKER_PROP, MMD_TEST_DOC_TEXT, NULL);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v2_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_TEXT);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_TEXT);

g_clear_pointer (&tracker_prop, g_free);

// Test set_tracker
modulemd_module_stream_v2_set_tracker (stream, MMD_TEST_DOC_TEXT2);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v2_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_TEXT2);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_TEXT2);

g_clear_pointer (&tracker_prop, g_free);

// Test setting it to NULL
g_object_set (stream, MMD_TEST_TRACKER_PROP, NULL, NULL);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v2_get_tracker (stream);

g_assert_null (tracker);
g_assert_null (tracker_prop);

g_clear_pointer (&tracker_prop, g_free);

// Test Unicode values
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above.

modulemd_module_stream_v2_set_tracker (stream, MMD_TEST_DOC_UNICODE_TEXT);

g_object_get (stream, MMD_TEST_TRACKER_PROP, &tracker_prop, NULL);
tracker = modulemd_module_stream_v2_get_tracker (stream);

g_assert_cmpstr (tracker, ==, MMD_TEST_DOC_UNICODE_TEXT);
g_assert_cmpstr (tracker_prop, ==, MMD_TEST_DOC_UNICODE_TEXT);

g_clear_pointer (&tracker_prop, g_free);
g_clear_object (&stream);
}

static void
module_stream_v1_test_components (ModuleStreamFixture *fixture,
gconstpointer user_data)
Expand Down Expand Up @@ -2165,6 +2296,20 @@ main (int argc, char *argv[])
module_stream_v2_test_licenses,
NULL);

g_test_add ("/modulemd/v2/modulestream/v1/tracker",
ModuleStreamFixture,
NULL,
NULL,
module_stream_v1_test_tracker,
NULL);

g_test_add ("/modulemd/v2/modulestream/v2/tracker",
ModuleStreamFixture,
NULL,
NULL,
module_stream_v2_test_tracker,
NULL);

g_test_add ("/modulemd/v2/modulestream/v1/profiles",
ModuleStreamFixture,
NULL,
Expand Down