78f68a6c41a59d9f7c77ce89f6a8ce02549dfd36
[project/opkg-lede.git] / tests / libopkg_test.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <libgen.h>
5
6 #include <opkg.h>
7
8 int opkg_state_changed;
9 pkg_t *find_pkg = NULL;
10
11 #define TEST_PACKAGE "aspell"
12
13 void progress_callback(const opkg_progress_data_t * progress, void *data)
14 {
15 printf("\r%s %3d%%\n", (char *)data, progress->percentage);
16 fflush(stdout);
17 }
18
19 static void list_pkg(pkg_t * pkg)
20 {
21 char *v = pkg_version_str_alloc(pkg);
22 printf("%s - %s\n", pkg->name, v);
23 free(v);
24 }
25
26 void package_list_installed_callback(pkg_t * pkg, void *data)
27 {
28 if (pkg->state_status == SS_INSTALLED)
29 list_pkg(pkg);
30 }
31
32 void package_list_callback(pkg_t * pkg, void *data)
33 {
34 static int install_count = 0;
35 static int total_count = 0;
36
37 if (pkg->state_status == SS_INSTALLED)
38 install_count++;
39
40 total_count++;
41
42 printf("\rPackage count: %d Installed, %d Total Available",
43 install_count, total_count);
44 fflush(stdout);
45
46 if (!find_pkg) {
47 /* store the first package to print out later */
48 find_pkg = pkg;
49 }
50 }
51
52 void package_list_upgradable_callback(pkg_t * pkg, void *data)
53 {
54 list_pkg(pkg);
55 }
56
57 void print_package(pkg_t * pkg)
58 {
59 char *v = pkg_version_str_alloc(pkg);
60 const char *tags = pkg_get_string(pkg, PKG_TAGS);
61
62 printf("Name: %s\n"
63 "Version: %s\n"
64 "Repository: %s\n"
65 "Architecture: %s\n"
66 "Description: %s\n"
67 "Tags: %s\n"
68 "Size: %ld\n"
69 "Status: %d\n",
70 pkg->name,
71 v,
72 pkg->src->name,
73 pkg_get_string(pkg, PKG_ARCHITECTURE),
74 pkg_get_string(pkg, PKG_DESCRIPTION),
75 tags ? tags : "", pkg->size, pkg->state_status);
76 free(v);
77 }
78
79 void opkg_test(void)
80 {
81 int err;
82 pkg_t *pkg;
83
84 err = opkg_update_package_lists(progress_callback, "Updating...");
85 printf("\nopkg_update_package_lists returned %d\n", err);
86
87 opkg_list_packages(package_list_callback, NULL);
88 printf("\n");
89
90 if (find_pkg) {
91 printf("Finding package \"%s\"\n", find_pkg->name);
92 pkg =
93 opkg_find_package(find_pkg->name,
94 pkg_get_string(find_pkg, PKG_VERSION),
95 pkg_get_string(find_pkg, PKG_ARCHITECTURE),
96 find_pkg->src->name);
97 if (pkg) {
98 print_package(pkg);
99 } else
100 printf("Package \"%s\" not found!\n", find_pkg->name);
101 } else
102 printf("No package available to test find_package.\n");
103
104 err =
105 opkg_install_package(TEST_PACKAGE, progress_callback,
106 "Installing...");
107 printf("\nopkg_install_package returned %d\n", err);
108
109 err =
110 opkg_upgrade_package(TEST_PACKAGE, progress_callback,
111 "Upgrading...");
112 printf("\nopkg_upgrade_package returned %d\n", err);
113
114 err =
115 opkg_remove_package(TEST_PACKAGE, progress_callback, "Removing...");
116 printf("\nopkg_remove_package returned %d\n", err);
117
118 printf("Listing upgradable packages...\n");
119 opkg_list_upgradable_packages(package_list_upgradable_callback, NULL);
120
121 err = opkg_upgrade_all(progress_callback, "Upgrading all...");
122 printf("\nopkg_upgrade_all returned %d\n", err);
123
124 }
125
126 int main(int argc, char **argv)
127 {
128 pkg_t *pkg;
129 int err;
130
131 if (argc < 2) {
132 printf("Usage: %s command\n"
133 "\nCommands:\n"
134 "\tupdate - Update package lists\n"
135 "\tfind [package] - Print details of the specified package\n"
136 "\tinstall [package] - Install the specified package\n"
137 "\tupgrade [package] - Upgrade the specified package\n"
138 "\tlist upgrades - List the available upgrades\n"
139 "\tlist all - List all available packages\n"
140 "\tlist installed - List all the installed packages\n"
141 "\tremove [package] - Remove the specified package\n"
142 "\trping - Reposiroties ping, check the accessibility of repositories\n"
143 "\ttest - Run test script\n", basename(argv[0]));
144 exit(0);
145 }
146
147 setenv("OFFLINE_ROOT", "/tmp", 0);
148
149 if (opkg_new()) {
150 printf("opkg_new() failed. This sucks.\n");
151 print_error_list();
152 return 1;
153 }
154
155 switch (argv[1][0]) {
156 case 'f':
157 pkg = opkg_find_package(argv[2], NULL, NULL, NULL);
158 if (pkg) {
159 print_package(pkg);
160 } else
161 printf("Package \"%s\" not found!\n", find_pkg->name);
162 break;
163 case 'i':
164 err =
165 opkg_install_package(argv[2], progress_callback,
166 "Installing...");
167 printf("\nopkg_install_package returned %d\n", err);
168 break;
169
170 case 'u':
171 if (argv[1][2] == 'd') {
172 err =
173 opkg_update_package_lists(progress_callback,
174 "Updating...");
175 printf("\nopkg_update_package_lists returned %d\n",
176 err);
177 break;
178 } else {
179 if (argc < 3) {
180 err =
181 opkg_upgrade_all(progress_callback,
182 "Upgrading all...");
183 printf("\nopkg_upgrade_all returned %d\n", err);
184 } else {
185 err =
186 opkg_upgrade_package(argv[2],
187 progress_callback,
188 "Upgrading...");
189 printf("\nopkg_upgrade_package returned %d\n",
190 err);
191 }
192 }
193 break;
194
195 case 'l':
196 if (argc < 3) {
197 printf
198 ("Please specify one either all, installed or upgrades\n");
199 } else {
200 switch (argv[2][0]) {
201 case 'u':
202 printf("Listing upgradable packages...\n");
203 opkg_list_upgradable_packages
204 (package_list_upgradable_callback, NULL);
205 break;
206 case 'a':
207 printf("Listing all packages...\n");
208 opkg_list_packages(package_list_callback, NULL);
209 printf("\n");
210 break;
211 case 'i':
212 printf("Listing installed packages...\n");
213 opkg_list_packages
214 (package_list_installed_callback, NULL);
215 break;
216 default:
217 printf("Unknown list option \"%s\"\n", argv[2]);
218 }
219 }
220 break;
221
222 case 'r':
223 if (argv[1][1] == 'e') {
224 err =
225 opkg_remove_package(argv[2], progress_callback,
226 "Removing...");
227 printf("\nopkg_remove_package returned %d\n", err);
228 break;
229 } else if (argv[1][1] == 'p') {
230 err = opkg_repository_accessibility_check();
231 printf
232 ("\nopkg_repository_accessibility_check returned (%d)\n",
233 err);
234 break;
235 }
236
237 default:
238 printf("Unknown command \"%s\"\n", argv[1]);
239 }
240
241 opkg_free();
242
243 return 0;
244 }