tests/plover/test-repository.c
author J. Ali Harlow <ali@juiblex.co.uk>
Tue Apr 24 18:49:55 2018 +0100 (2018-04-24)
changeset 67 c9eb7aa21ff4
parent 38 a29623b68ca2
permissions -rw-r--r--
Release 0.5.3
     1 /*
     2  * Copyright (C) 2016  J. Ali Harlow <ali@juiblex.co.uk>
     3  *
     4  * This program is free software; you can redistribute it and/or modify
     5  * it under the terms of the GNU General Public License as published by
     6  * the Free Software Foundation; either version 2 of the License, or
     7  * (at your option) any later version.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License along
    15  * with this program; if not, write to the Free Software Foundation, Inc.,
    16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    17  */
    18 
    19 #include <stdlib.h>
    20 #include <glib.h>
    21 #include <razor.h>
    22 #include <plover/repository.h>
    23 
    24 const char *test_repo_packages[]={
    25     "zsh","zsh2","zip","zap","filesystem","zappy","zappy-tools","zappy2",
    26     "unsatisfiable","uninstallable","badpostun"
    27 };
    28 
    29 static void test_from_files(void)
    30 {
    31     int i;
    32     struct razor_set *set;
    33     struct razor_package_iterator *iter;
    34     struct razor_package *package;
    35     PloverRepository *repository;
    36     PloverPackageSet *package_set;
    37     char **filenames;
    38     const char *name;
    39     GList *expected=NULL,*lnk;
    40     GError *err=NULL;
    41     filenames=g_new(char *,G_N_ELEMENTS(test_repo_packages)+1);
    42     for(i=0;i<G_N_ELEMENTS(test_repo_packages);i++)
    43 	filenames[i]=g_strconcat("../yum-repo-test-dir/Packages/",
    44 	  test_repo_packages[i],"-1-1.noarch.rpm",NULL);
    45     filenames[i]=NULL;
    46     repository=plover_repository_new_from_files((const char **)filenames,&err);
    47     g_strfreev(filenames);
    48     if (!repository && err)
    49 	g_error("../yum-repo-test-dir: %s",err->message);
    50     g_assert(repository != NULL);
    51     g_assert(err == NULL);
    52     package_set=plover_repository_get_package_set(repository);
    53     g_assert(package_set != NULL);
    54     set=plover_package_set_get_razor(package_set);
    55     g_assert(set != NULL);
    56     for(i=0;i<G_N_ELEMENTS(test_repo_packages);i++)
    57 	expected=g_list_prepend(expected,
    58 	  (gpointer)g_intern_string(test_repo_packages[i]));
    59     iter=razor_package_iterator_create(set);
    60     while(razor_package_iterator_next(iter,&package,RAZOR_DETAIL_NAME,&name,
    61       RAZOR_DETAIL_LAST))
    62     {
    63 	lnk=g_list_find(expected,g_intern_string(name));
    64 	if (!lnk)
    65 	    g_warning("Unexpected package in set: %s",name);
    66 	else
    67 	    expected=g_list_delete_link(expected,lnk);
    68     }
    69     razor_package_iterator_destroy(iter);
    70     if (expected)
    71 	g_warning("%d missing package%s in set, including %s",
    72 	  g_list_length(expected),g_list_length(expected)==1?"":"s",
    73 	  expected->data);
    74     g_object_unref(repository);
    75 }
    76 
    77 static void test_from_yum(void)
    78 {
    79     int i;
    80     struct razor_set *set;
    81     struct razor_package_iterator *iter;
    82     struct razor_package *package;
    83     PloverRepository *repository;
    84     PloverPackageSet *package_set;
    85     const char *name;
    86     GList *expected=NULL,*lnk;
    87     GError *err=NULL;
    88     repository=plover_repository_new_from_yum("../yum-repo-test-dir",&err);
    89     if (!repository && err)
    90 	g_error("../yum-repo-test-dir: %s",err->message);
    91     g_assert(repository != NULL);
    92     g_assert(err == NULL);
    93     package_set=plover_repository_get_package_set(repository);
    94     g_assert(package_set != NULL);
    95     set=plover_package_set_get_razor(package_set);
    96     g_assert(set != NULL);
    97     for(i=0;i<G_N_ELEMENTS(test_repo_packages);i++)
    98 	expected=g_list_prepend(expected,
    99 	  (gpointer)g_intern_string(test_repo_packages[i]));
   100     iter=razor_package_iterator_create(set);
   101     while(razor_package_iterator_next(iter,&package,RAZOR_DETAIL_NAME,&name,
   102       RAZOR_DETAIL_LAST))
   103     {
   104 	lnk=g_list_find(expected,g_intern_string(name));
   105 	if (!lnk)
   106 	    g_warning("Unexpected package in set: %s",name);
   107 	else
   108 	    expected=g_list_delete_link(expected,lnk);
   109     }
   110     razor_package_iterator_destroy(iter);
   111     if (expected)
   112 	g_warning("%d missing package%s in set, including %s",
   113 	  g_list_length(expected),g_list_length(expected)==1?"":"s",
   114 	  expected->data);
   115     g_object_unref(repository);
   116 }
   117 
   118 static void test_open_rpm(void)
   119 {
   120     struct razor_rpm *rpm;
   121     PloverRepository *repository;
   122     PloverPackageSet *package_set;
   123     PloverPackage *package;
   124     const char *name;
   125     GSList *packages,*lnk;
   126     GError *err=NULL;
   127     repository=plover_repository_new_from_yum("../yum-repo-test-dir",&err);
   128     if (!repository)
   129 	g_error("../yum-repo-test-dir: %s",err->message);
   130     package_set=plover_repository_get_package_set(repository);
   131     packages=plover_package_set_get_packages(package_set);
   132     for(lnk=packages;lnk;lnk=lnk->next)
   133     {
   134 	package=PLOVER_PACKAGE(lnk->data);
   135 	rpm=plover_repository_open_rpm(repository,package,&err);
   136 	if (!rpm && err)
   137 	    g_error("%s: %s",plover_package_get_name(package),err->message);
   138 	g_assert(rpm != NULL);
   139 	g_assert(err == NULL);
   140 	razor_rpm_get_details(rpm,RAZOR_DETAIL_NAME,&name,RAZOR_DETAIL_LAST);
   141 	g_assert_cmpstr(plover_package_get_name(package),==,name);
   142 	razor_rpm_close(rpm);
   143     }
   144     g_object_unref(repository);
   145 }
   146 
   147 int main(int argc,char **argv)
   148 {
   149     g_test_init(&argc,&argv,NULL);
   150     g_test_bug_base("mailto:ali@juiblex.co.uk");
   151     g_test_add_func("/repository/from-files",test_from_files);
   152     g_test_add_func("/repository/from-yum",test_from_yum);
   153     g_test_add_func("/repository/open-rpm",test_open_rpm);
   154     return g_test_run();
   155 }