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