]> git.ipfire.org Git - people/ms/libloc.git/blob - src/test-database.c
2dd052851c59da040a29d8c17b370c010fe69d45
[people/ms/libloc.git] / src / test-database.c
1 /*
2 libloc - A library to determine the location of someone on the Internet
3
4 Copyright (C) 2017 IPFire Development Team <info@ipfire.org>
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 */
16
17 #include <stdio.h>
18 #include <stddef.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <fcntl.h>
22 #include <ctype.h>
23 #include <errno.h>
24 #include <unistd.h>
25
26 #include <loc/libloc.h>
27 #include <loc/writer.h>
28 #include "database.h"
29
30 const char* DESCRIPTION =
31 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
32 "Proin ultrices pulvinar dolor, et sollicitudin eros ultricies "
33 "vitae. Nam in volutpat libero. Nulla facilisi. Pellentesque "
34 "tempor felis enim. Integer congue nisi in maximus pretium. "
35 "Pellentesque et turpis elementum, luctus mi at, interdum erat. "
36 "Maecenas ut venenatis nunc.";
37
38 int main(int argc, char** argv) {
39 int err;
40
41 struct loc_ctx* ctx;
42 err = loc_new(&ctx);
43 if (err < 0)
44 exit(EXIT_FAILURE);
45
46 // Create a database
47 struct loc_writer* writer;
48 err = loc_writer_new(ctx, &writer);
49 if (err < 0)
50 exit(EXIT_FAILURE);
51
52 // Set the vendor
53 err = loc_writer_set_vendor(writer, "Test Vendor");
54 if (err) {
55 fprintf(stderr, "Could not set vendor\n");
56 exit(EXIT_FAILURE);
57 }
58
59 // Retrieve vendor
60 const char* vendor1 = loc_writer_get_vendor(writer);
61 if (vendor1) {
62 printf("Vendor is: %s\n", vendor1);
63 } else {
64 fprintf(stderr, "Could not retrieve vendor\n");
65 exit(EXIT_FAILURE);
66 }
67
68 // Set a description
69 err = loc_writer_set_description(writer, DESCRIPTION);
70 if (err) {
71 fprintf(stderr, "Could not set description\n");
72 exit(EXIT_FAILURE);
73 }
74
75 // Retrieve description
76 const char* description = loc_writer_get_description(writer);
77 if (description) {
78 printf("Description is: %s\n", description);
79 } else {
80 fprintf(stderr, "Could not retrieve description\n");
81 exit(EXIT_FAILURE);
82 }
83
84 FILE* f = fopen("test.db", "w");
85 if (!f) {
86 fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));
87 exit(EXIT_FAILURE);
88 }
89
90 err = loc_writer_write(writer, f);
91 if (err) {
92 fprintf(stderr, "Could not write database: %s\n", strerror(err));
93 exit(EXIT_FAILURE);
94 }
95
96 // Close the file
97 fclose(f);
98
99 // And open it again from disk
100 f = fopen("test.db", "r");
101 if (!f) {
102 fprintf(stderr, "Could not open file for reading: %s\n", strerror(errno));
103 exit(EXIT_FAILURE);
104 }
105
106 struct loc_database* db;
107 err = loc_database_new(ctx, &db, f);
108 if (err) {
109 fprintf(stderr, "Could not open database: %s\n", strerror(-err));
110 exit(EXIT_FAILURE);
111 }
112
113 const char* vendor2 = loc_database_get_vendor(db);
114 if (!vendor2) {
115 fprintf(stderr, "Could not retrieve vendor\n");
116 exit(EXIT_FAILURE);
117 } else if (strcmp(vendor1, vendor2) != 0) {
118 fprintf(stderr, "Vendor doesn't match: %s != %s\n", vendor1, vendor2);
119 exit(EXIT_FAILURE);
120 }
121
122 // Close the database
123 loc_database_unref(db);
124
125 loc_writer_unref(writer);
126 loc_unref(ctx);
127
128 return EXIT_SUCCESS;
129 }