summaryrefslogtreecommitdiffstats
path: root/tests/libopkg_test.c
blob: d9bd0ef10e60824466b66620bdca85220a2ff8a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <opkg.h>
#include <stdlib.h>
#include <stdio.h>

opkg_package_t *find_pkg = NULL;

char *errors[10] = {
  "No Error",
  "Unknown Eror",
  "Download failed",
  "Dependancies failed",
  "Package already installed",
  "Package not available",
  "Package not found",
  "Package not installed",
  "Signature check failed",
  "MD5 sum failed"
};


#define TEST_PACKAGE "aspell"

void
progress_callback (opkg_t *opkg, const opkg_progress_data_t *progress, void *data)
{
  printf ("\r%s %3d%%", (char*) data, progress->percentage);
  fflush (stdout);
}

void
package_list_callback (opkg_t *opkg, opkg_package_t *pkg, void *data)
{
  static install_count = 0;
  static total_count = 0;

  if (pkg->installed)
    install_count++;

  total_count++;

  printf ("\rPackage count: %d Installed, %d Total Available", install_count, total_count);
  fflush (stdout);

  if (!find_pkg)
  {
    /* store the first package to print out later */
    find_pkg = pkg;
  }
  else
    opkg_package_free (pkg);
}

void
package_list_upgradable_callback (opkg_t *opkg, opkg_package_t *pkg, void *data)
{
  printf ("%s - %s\n", pkg->name, pkg->version);
  opkg_package_free (pkg);
}

void
print_package (opkg_package_t *pkg)
{
  printf (
      "Name:         %s\n"
      "Version:      %s\n"
      "Repository:   %s\n"
      "Architecture: %s\n"
      "Description:  %s\n"
      "Tags:         %s\n"
      "URL:          %s\n"
      "Size:         %d\n"
      "Installed:    %s\n",
      pkg->name,
      pkg->version,
      pkg->repository,
      pkg->architecture,
      pkg->description,
      pkg->tags,
      pkg->url,
      pkg->size,
      (pkg->installed ? "True" : "False")
      );
}

int
main (int argc, char **argv)
{
  opkg_t *opkg;
  opkg_package_t *pkg;
  int err;
  
  opkg = opkg_new ();

  opkg_set_option (opkg, "offline_root", "/tmp/");

  opkg_re_read_config_files (opkg);

  err = opkg_update_package_lists (opkg, progress_callback, "Updating...");
  printf ("\nopkg_update_package_lists returned %d (%s)\n", err, errors[err]);

  opkg_list_packages (opkg, package_list_callback, NULL);
  printf ("\n");

  if (find_pkg)
  {
    printf ("Finding package \"%s\"\n", find_pkg->name);
    pkg = opkg_find_package (opkg, find_pkg->name, find_pkg->version, find_pkg->architecture, find_pkg->repository);
    if (pkg)
    {
      print_package (pkg);
      opkg_package_free (pkg);
    }
    else
      printf ("Package \"%s\" not found!\n", find_pkg->name);
    opkg_package_free (find_pkg);
  }
  else
    printf ("No package available to test find_package.\n");

  err = opkg_install_package (opkg, TEST_PACKAGE, progress_callback, "Installing...");
  printf ("\nopkg_install_package returned %d (%s)\n", err, errors[err]);

  err = opkg_upgrade_package (opkg, TEST_PACKAGE, progress_callback, "Upgrading...");
  printf ("\nopkg_upgrade_package returned %d (%s)\n", err, errors[err]);

  err = opkg_remove_package (opkg, TEST_PACKAGE, progress_callback, "Removing...");
  printf ("\nopkg_remove_package returned %d (%s)\n", err, errors[err]);

  printf ("Listing upgradable packages...\n");
  opkg_list_upgradable_packages (opkg, package_list_upgradable_callback, NULL);

  err = opkg_upgrade_all (opkg, progress_callback, "Upgrading all...");
  printf ("\nopkg_upgrade_all returned %d (%s)\n", err, errors[err]);

  opkg_free (opkg);

  return 0;
}