From 8606b0c341a9a3b13add67e7b42c57ef36ad3fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= Date: Tue, 12 Jan 2021 09:55:39 +0100 Subject: [PATCH 2/2] When adding obsoletes ensure index has stream mdversion at least 2 Signed-off-by: Stephen Gallagher --- modulemd/modulemd-module-index.c | 13 +++++ modulemd/tests/test-modulemd-merger.c | 83 +++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/modulemd/modulemd-module-index.c b/modulemd/modulemd-module-index.c index 82ae1e168d2443c7c54bb94d39b233ad62ef887b..dd5a777e0f30deec1c42e6e3eaaab661ba97ff92 100644 --- a/modulemd/modulemd-module-index.c +++ b/modulemd/modulemd-module-index.c @@ -1288,15 +1288,28 @@ modulemd_module_index_add_obsoletes (ModulemdModuleIndex *self, GError **error) { g_autoptr (GError) nested_error = NULL; g_return_val_if_fail (MODULEMD_IS_MODULE_INDEX (self), FALSE); + g_return_val_if_fail (MODULEMD_IS_OBSOLETES (obsoletes), FALSE); modulemd_module_add_obsoletes ( get_or_create_module (self, modulemd_obsoletes_get_module_name (obsoletes)), obsoletes); + + /* Obsoletes need at least MD_MODULESTREAM_VERSION_TWO */ + if (self->stream_mdversion < MD_MODULESTREAM_VERSION_TWO) + { + if (!modulemd_module_index_upgrade_streams ( + self, MD_MODULESTREAM_VERSION_TWO, &nested_error)) + { + g_propagate_error (error, g_steal_pointer (&nested_error)); + return FALSE; + } + } + return TRUE; } GHashTable * diff --git a/modulemd/tests/test-modulemd-merger.c b/modulemd/tests/test-modulemd-merger.c index 34b14e75ef60e037d9cef371e0ae033874e62a70..cd5379838832ec3c9d487e96b81b2259d97649fa 100644 --- a/modulemd/tests/test-modulemd-merger.c +++ b/modulemd/tests/test-modulemd-merger.c @@ -774,10 +774,90 @@ merger_test_obsoletes_incompatible (void) GPtrArray *obsoletes = NULL; obsoletes = modulemd_module_get_obsoletes (module); g_assert_cmpint (obsoletes->len, ==, 1); } +static void +merger_test_obsoletes_lone_obsolete (void) +{ + // clang-format off + g_autofree gchar *obsolete_str = g_strdup( +"---\n" +"document: modulemd-obsoletes\n" +"version: 1\n" +"data:\n" +" modified: 2020-05-01T00:00Z\n" +" module: nodejs\n" +" context: 6c81f848\n" +" stream: 5\n" +" message: \"obsoleting obsoletes\"\n" +" obsoleted_by:\n" +" module: nodejs\n" +" stream: 10\n" +"...\n"); + // clang-format on + + // clang-format off + g_autofree gchar *stream_str = g_strdup( +"---\n" +"document: modulemd\n" +"version: 2\n" +"data:\n" +" name: nodejs\n" +" stream: 5\n" +" version: 99\n" +" context: 6c81f848\n" +" arch: x86_64\n" +" summary: Javascript runtime\n" +" description: >-\n" +" Node.js is a platform built on Chrome''s JavaScript runtime.\n" +" license:\n" +" module:\n" +" - MIT\n" +"...\n"); + // clang-format on + + g_autoptr (GPtrArray) failures = NULL; + g_autoptr (GError) error = NULL; + g_autoptr (ModulemdModuleIndex) obsolete_idx = modulemd_module_index_new (); + g_autoptr (ModulemdModuleIndex) stream_idx = modulemd_module_index_new (); + g_autoptr (ModulemdModuleIndex) merged_idx = NULL; + g_autoptr (ModulemdModuleIndexMerger) merger = + modulemd_module_index_merger_new (); + gboolean ret; + + ret = modulemd_module_index_update_from_string ( + obsolete_idx, obsolete_str, TRUE, &failures, &error); + modulemd_subdocument_info_debug_dump_failures (failures); + g_assert_no_error (error); + g_assert_true (ret); + + ret = modulemd_module_index_update_from_string ( + stream_idx, stream_str, TRUE, &failures, &error); + modulemd_subdocument_info_debug_dump_failures (failures); + g_assert_no_error (error); + g_assert_true (ret); + + modulemd_module_index_merger_associate_index (merger, obsolete_idx, 0); + modulemd_module_index_merger_associate_index (merger, stream_idx, 0); + merged_idx = modulemd_module_index_merger_resolve (merger, &error); + + g_assert_nonnull (merged_idx); + g_assert_no_error (error); + + g_autoptr (ModulemdModuleStream) stream = NULL; + stream = g_object_ref (modulemd_module_get_stream_by_NSVCA ( + modulemd_module_index_get_module (merged_idx, "nodejs"), + "5", + 99, + NULL, + NULL, + &error)); + g_assert_nonnull (stream); + g_assert_no_error (error); +} + int main (int argc, char *argv[]) { setlocale (LC_ALL, ""); @@ -819,7 +899,10 @@ main (int argc, char *argv[]) merger_test_obsoletes_priority); g_test_add_func ("/modulemd/module/index/merger/obsoletes/incompatibility", merger_test_obsoletes_incompatible); + g_test_add_func ("/modulemd/module/index/merger/obsoletes/lone_obsolete", + merger_test_obsoletes_lone_obsolete); + return g_test_run (); } -- 2.29.2