48c5ab727582c564271de9c8a0bba22d29e7ac01
[people/ms/libloc.git] / src / test-as.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 <errno.h>
18 #include <stdlib.h>
19 #include <string.h>
20
21 #include <loc/libloc.h>
22 #include <loc/writer.h>
23 #include "database.h"
24
25 #define TEST_AS_COUNT 100
26
27 int main(int argc, char** argv) {
28 int err;
29
30 struct loc_ctx* ctx;
31 err = loc_new(&ctx);
32 if (err < 0)
33 exit(EXIT_FAILURE);
34
35 // Create a database
36 struct loc_writer* writer;
37 err = loc_writer_new(ctx, &writer);
38 if (err < 0)
39 exit(EXIT_FAILURE);
40
41 char name[256];
42 for (unsigned int i = 1; i <= TEST_AS_COUNT; i++) {
43 struct loc_as* as;
44 loc_writer_add_as(writer, &as, i);
45
46 sprintf(name, "Test AS%u", i);
47 loc_as_set_name(as, name);
48
49 loc_as_unref(as);
50 }
51
52 FILE* f = fopen("test.db", "w");
53 if (!f) {
54 fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));
55 exit(EXIT_FAILURE);
56 }
57
58 err = loc_writer_write(writer, f);
59 if (err) {
60 fprintf(stderr, "Could not write database: %s\n", strerror(-err));
61 exit(EXIT_FAILURE);
62 }
63 fclose(f);
64
65 loc_writer_unref(writer);
66
67 // And open it again from disk
68 f = fopen("test.db", "r");
69 if (!f) {
70 fprintf(stderr, "Could not open file for reading: %s\n", strerror(errno));
71 exit(EXIT_FAILURE);
72 }
73
74 struct loc_database* db;
75 err = loc_database_new(ctx, &db, f);
76 if (err) {
77 fprintf(stderr, "Could not open database: %s\n", strerror(-err));
78 exit(EXIT_FAILURE);
79 }
80
81 size_t as_count = loc_database_count_as(db);
82 if (as_count != TEST_AS_COUNT) {
83 fprintf(stderr, "Could not read all ASes\n");
84 exit(EXIT_FAILURE);
85 }
86
87 struct loc_as* as;
88 err = loc_database_get_as(db, &as, 99);
89 if (err) {
90 fprintf(stderr, "Could not find AS99\n");
91 exit(EXIT_FAILURE);
92 }
93
94 loc_database_unref(db);
95 loc_unref(ctx);
96
97 return EXIT_SUCCESS;
98 }