[Libosinfo] [PATCH 06/10] tests: Pass media to script generator

Christophe Fergeau cfergeau at redhat.com
Tue May 12 12:28:47 UTC 2015


On Thu, May 07, 2015 at 05:36:41PM +0100, Zeeshan Ali (Khattak) wrote:
> Now that we have an API to pass media to script generation methods, let's
> test that API instead since its not only the recommended API but also this
> way we get to test both passing of OS and media information to script
> template.
> 
> One of the test cases still uses the existing API on purpose to keep the
> case of 'no media available' covered as well.
> ---
>  .../dbdata/install-scripts/test-install-script.xml |  6 ++
>  test/dbdata/oses/test-os-data.xml                  | 23 +++++
>  test/install-script.xsl                            |  7 +-
>  test/test-install-script.c                         | 98 +++++++++++++++++-----
>  4 files changed, 110 insertions(+), 24 deletions(-)
>  create mode 100644 test/dbdata/oses/test-os-data.xml
> 
> diff --git a/test/dbdata/install-scripts/test-install-script.xml b/test/dbdata/install-scripts/test-install-script.xml
> index 48469ef..e3c05b7 100644
> --- a/test/dbdata/install-scripts/test-install-script.xml
> +++ b/test/dbdata/install-scripts/test-install-script.xml
> @@ -16,6 +16,12 @@
>          <xsl:output method="text"/>
>  
>          <xsl:template match="/install-script-config">
> +# OS id=<xsl:value-of select="os/id"/>
> +# <xsl:choose>
> +    <xsl:when test="media != ''">Media id=<xsl:value-of select="media/id"/></xsl:when>
> +    <xsl:otherwise>Unknown media</xsl:otherwise>
> +  </xsl:choose>
> +# Profile: <xsl:value-of select="script/profile"/>
>  keyboard <xsl:value-of select="config/l10n-keyboard"/>
>  lang <xsl:value-of select="config/l10n-language"/>
>  timezone --utc <xsl:value-of select="config/l10n-timezone"/>
> diff --git a/test/dbdata/oses/test-os-data.xml b/test/dbdata/oses/test-os-data.xml
> new file mode 100644
> index 0000000..88ef431
> --- /dev/null
> +++ b/test/dbdata/oses/test-os-data.xml
> @@ -0,0 +1,23 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<libosinfo version="0.0.1">
> +  <os id="http://fedoraproject.org/fedora/16">
> +    <short-id>fedora16</short-id>
> +    <name>Fedora 16</name>
> +    <version>16</version>
> +    <vendor>Fedora Project</vendor>
> +    <family>linux</family>
> +    <distro>fedora</distro>
> +    <codename>Verne</codename>
> +
> +    <media arch="i686">
> +      <url>http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/16/Fedora/i386/iso/Fedora-16-i386-DVD.iso</url>
> +      <iso>
> +        <volume-id>Fedora 16 i386 DVD</volume-id>
> +        <system-id>LINUX</system-id>
> +        <volume-size>3806375936</volume-size>
> +      </iso>
> +      <kernel>isolinux/vmlinuz</kernel>
> +      <initrd>isolinux/initrd.img</initrd>
> +    </media>
> +  </os>
> +</libosinfo>
> diff --git a/test/install-script.xsl b/test/install-script.xsl
> index f52e99f..f355152 100644
> --- a/test/install-script.xsl
> +++ b/test/install-script.xsl
> @@ -6,7 +6,12 @@
>    <xsl:output method="text"/>
>  
>    <xsl:template match="/install-script-config">
> -# OS id=<xsl:value-of select="os/id"/> profile <xsl:value-of select="script/profile"/>
> +# OS id=<xsl:value-of select="os/id"/>
> +# <xsl:choose>
> +    <xsl:when test="media != ''">Media id=<xsl:value-of select="media/id"/></xsl:when>
> +    <xsl:otherwise>Unknown media</xsl:otherwise>
> +  </xsl:choose>
> +# Profile: <xsl:value-of select="script/profile"/>
>  install
>  text
>  keyboard <xsl:value-of select="config/l10n-keyboard"/>
> diff --git a/test/test-install-script.c b/test/test-install-script.c
> index 4da3bb4..c067e9d 100644
> --- a/test/test-install-script.c
> +++ b/test/test-install-script.c
> @@ -30,7 +30,9 @@ static GError *error = NULL;
>  static gchar *actualData = NULL;
>  static const gchar *expectData =                                        \
>      "\n"                                                                \
> -    "# OS id=http://fedoraproject.org/fedora/16 profile jeos\n"         \
> +    "# OS id=http://fedoraproject.org/fedora/16\n"                      \
> +    "# Media id=http://fedoraproject.org/fedora/16:0\n"                 \
> +    "# Profile: jeos\n"                                                 \
>      "install\n"                                                         \
>      "text\n"                                                            \
>      "keyboard uk\n"                                                     \
> @@ -58,10 +60,26 @@ static const gchar *expectData =                                        \
>  
>  static const gchar *expectData2 =                                       \
>      "\n"                                                                \
> +    "# OS id=http://fedoraproject.org/fedora/16\n"                      \
> +    "# Unknown media\n"                                                 \
> +    "# Profile: jeos\n"                                                 \
>      "keyboard FOOBAR\n"                                                 \
>      "lang French\n"                                                     \
>      "timezone --utc Europe/Paris";
>  
> +static void test_generate_for_media_finish(GObject *src,
> +                                           GAsyncResult *res,
> +                                           gpointer user_data)
> +{
> +    GMainLoop *loop = user_data;
> +
> +    actualData = osinfo_install_script_generate_for_media_finish(OSINFO_INSTALL_SCRIPT(src),
> +                                                                 res,
> +                                                                 &error);
> +
> +    g_main_loop_quit(loop);
> +}
> +
>  static void test_generate_finish(GObject *src,
>                                   GAsyncResult *res,
>                                   gpointer user_data)
> @@ -100,23 +118,41 @@ START_TEST(test_script_file)
>  {
>      OsinfoInstallScript *script;
>      OsinfoInstallConfig *config = test_get_config();
> -    OsinfoOs *os;
> +    OsinfoLoader *loader = osinfo_loader_new();
> +    OsinfoDb *db;
> +    OsinfoMedia *media;
>      GMainLoop *loop;
>  
>      script = osinfo_install_script_new_uri("http://example.com",
>                                             "jeos",
>                                             "file://" SRCDIR "/test/install-script.xsl");
>  
> +    osinfo_loader_process_path(loader, SRCDIR "/test/dbdata", &error);
> +    fail_unless(error == NULL, error ? error->message : "none");
> +    db = g_object_ref(osinfo_loader_get_db(loader));
> +    g_object_unref(loader);
> +
>      loop = g_main_loop_new(g_main_context_get_thread_default(),
>                             TRUE);
>  
> -    os = osinfo_os_new("http://fedoraproject.org/fedora/16");
> -    osinfo_install_script_generate_async(script,
> -                                         os,
> -                                         config,
> -                                         NULL,
> -                                         test_generate_finish,
> -                                         loop);
> +    media = osinfo_media_new("http://fedoraproject.org/fedora/16:0", "i686");
> +    osinfo_entity_set_param(OSINFO_ENTITY (media),
> +                            OSINFO_MEDIA_PROP_VOLUME_ID,
> +                            "Fedora 16 i386 DVD");
> +    osinfo_entity_set_param(OSINFO_ENTITY (media),
> +                            OSINFO_MEDIA_PROP_SYSTEM_ID,
> +                            "LINUX");
> +    osinfo_entity_set_param_int64(OSINFO_ENTITY (media),
> +                                  OSINFO_MEDIA_PROP_VOLUME_SIZE,
> +                                  3806375936);
> +    fail_unless(osinfo_db_identify_media (db, media), "Failed to identify media");
> +

This bit seems duplicated below, I'd tend to have a small helper to
create the media/identify it.

ACK either way.

> +    osinfo_install_script_generate_for_media_async(script,
> +                                                   media,
> +                                                   config,
> +                                                   NULL,
> +                                                   test_generate_for_media_finish,
> +                                                   loop);
>  
>      if (g_main_loop_is_running(loop))
>          g_main_loop_run(loop);
> @@ -127,7 +163,8 @@ START_TEST(test_script_file)
>      fail_unless(strcmp(actualData, expectData) == 0, "Actual '%s' match expect '%s'",
>                  actualData, expectData);
>  
> -    g_object_unref(os);
> +    g_object_unref(media);
> +    g_object_unref(db);
>      g_object_unref(config);
>      g_object_unref(script);
>      g_main_loop_unref(loop);
> @@ -140,7 +177,9 @@ START_TEST(test_script_data)
>  {
>      OsinfoInstallScript *script;
>      OsinfoInstallConfig *config = test_get_config();
> -    OsinfoOs *os;
> +    OsinfoLoader *loader = osinfo_loader_new();
> +    OsinfoDb *db;
> +    OsinfoMedia *media;
>      GMainLoop *loop;
>      GFile *file = g_file_new_for_uri("file://" SRCDIR "/test/install-script.xsl");
>      gchar *data;
> @@ -148,10 +187,23 @@ START_TEST(test_script_data)
>      g_file_load_contents(file, NULL, &data, NULL, NULL, &error);
>      fail_unless(error == NULL, error ? error->message : "none");
>  
> -    os = osinfo_os_new("http://fedoraproject.org/fedora/16");
> -    osinfo_entity_set_param(OSINFO_ENTITY(os),
> -                            OSINFO_PRODUCT_PROP_SHORT_ID,
> -                            "fedora16");
> +    osinfo_loader_process_path(loader, SRCDIR "/test/dbdata", &error);
> +    fail_unless(error == NULL, error ? error->message : "none");
> +    db = g_object_ref(osinfo_loader_get_db(loader));
> +    g_object_unref(loader);
> +
> +    media = osinfo_media_new("http://fedoraproject.org/fedora/16:0", "i686");
> +    osinfo_entity_set_param(OSINFO_ENTITY (media),
> +                            OSINFO_MEDIA_PROP_VOLUME_ID,
> +                            "Fedora 16 i386 DVD");
> +    osinfo_entity_set_param(OSINFO_ENTITY (media),
> +                            OSINFO_MEDIA_PROP_SYSTEM_ID,
> +                            "LINUX");
> +    osinfo_entity_set_param_int64(OSINFO_ENTITY (media),
> +                                  OSINFO_MEDIA_PROP_VOLUME_SIZE,
> +                                  3806375936);
> +    fail_unless(osinfo_db_identify_media (db, media), "Failed to identify media");
> +
>      script = osinfo_install_script_new_data("http://example.com",
>                                              "jeos",
>                                              data);
> @@ -159,12 +211,12 @@ START_TEST(test_script_data)
>      loop = g_main_loop_new(g_main_context_get_thread_default(),
>                             TRUE);
>  
> -    osinfo_install_script_generate_async(script,
> -                                         os,
> -                                         config,
> -                                         NULL,
> -                                         test_generate_finish,
> -                                         loop);
> +    osinfo_install_script_generate_for_media_async(script,
> +                                                   media,
> +                                                   config,
> +                                                   NULL,
> +                                                   test_generate_for_media_finish,
> +                                                   loop);
>  
>      if (g_main_loop_is_running(loop))
>          g_main_loop_run(loop);
> @@ -172,7 +224,8 @@ START_TEST(test_script_data)
>      unlink(BUILDDIR "/test/install-script-actual.txt");
>      fail_unless(error == NULL, error ? error->message : "none");
>  
> -    g_object_unref(os);
> +    g_object_unref(media);
> +    g_object_unref(db);
>      g_object_unref(config);
>      g_object_unref(script);
>  }
> @@ -225,7 +278,6 @@ START_TEST(test_script_datamap)
>      osinfo_install_config_set_l10n_language(config, "fr_FR");
>      osinfo_install_config_set_l10n_timezone(config, "Europe/Paris");
>  
> -
>      os = osinfo_os_new("http://fedoraproject.org/fedora/16");
>      osinfo_entity_set_param(OSINFO_ENTITY(os),
>                              OSINFO_PRODUCT_PROP_SHORT_ID,
> -- 
> 2.1.0
> 
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libosinfo/attachments/20150512/77cc1e08/attachment.sig>


More information about the Libosinfo mailing list