]> git.ipfire.org Git - location/libloc.git/blobdiff - src/test-network.c
database: Implement lookup
[location/libloc.git] / src / test-network.c
index 665b33836fb291f31a0584fe067b65b450cc1142..b7b51201231b31630b431903f06ffc06cdbeebad 100644 (file)
@@ -21,6 +21,7 @@
 #include <string.h>
 
 #include <loc/libloc.h>
+#include <loc/database.h>
 #include <loc/network.h>
 #include <loc/writer.h>
 
@@ -60,6 +61,26 @@ int main(int argc, char** argv) {
                exit(EXIT_FAILURE);
        }
 
+       struct loc_network* network2;
+       err = loc_network_new_from_string(ctx, &network2, "2001:db8:ffff::/48");
+       if (err) {
+               fprintf(stderr, "Could not create the network\n");
+               exit(EXIT_FAILURE);
+       }
+
+       err = loc_network_set_country_code(network2, "XY");
+       if (err) {
+               fprintf(stderr, "Could not set country code\n");
+               exit(EXIT_FAILURE);
+       }
+
+       // Adding network to the tree
+       err = loc_network_tree_add_network(tree, network2);
+       if (err) {
+               fprintf(stderr, "Could not add network to the tree\n");
+               exit(EXIT_FAILURE);
+       }
+
        // Dump the tree
        err = loc_network_tree_dump(tree);
        if (err) {
@@ -76,15 +97,28 @@ int main(int argc, char** argv) {
        if (err < 0)
                exit(EXIT_FAILURE);
 
-       struct loc_network* network2;
-       err = loc_writer_add_network(writer, &network2, "2001:db8:1::/48");
+       struct loc_network* network3;
+       err = loc_writer_add_network(writer, &network3, "2001:db8::/64");
        if (err) {
                fprintf(stderr, "Could not add network\n");
                exit(EXIT_FAILURE);
        }
 
        // Set country code
-       loc_network_set_country_code(network2, "XX");
+       loc_network_set_country_code(network3, "XX");
+
+       struct loc_network* network4;
+       err = loc_writer_add_network(writer, &network4, "2001:db8:ffff::/64");
+       if (err) {
+               fprintf(stderr, "Could not add network\n");
+               exit(EXIT_FAILURE);
+       }
+
+       // Set country code
+       loc_network_set_country_code(network4, "XY");
+
+       // Set ASN
+       loc_network_set_asn(network4, 1024);
 
        FILE* f = fopen("test.db", "w");
        if (!f) {
@@ -102,7 +136,41 @@ int main(int argc, char** argv) {
        loc_writer_unref(writer);
 
        loc_network_unref(network1);
+       loc_network_unref(network2);
+       loc_network_unref(network3);
+       loc_network_unref(network4);
        loc_network_tree_unref(tree);
+
+       // And open it again from disk
+       f = fopen("test.db", "r");
+       if (!f) {
+               fprintf(stderr, "Could not open file for reading: %s\n", strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       struct loc_database* db;
+       err = loc_database_new(ctx, &db, f);
+       if (err) {
+               fprintf(stderr, "Could not open database: %s\n", strerror(-err));
+               exit(EXIT_FAILURE);
+       }
+
+       // Lookup an exact match
+       err = loc_database_lookup_from_string(db, "2001:db8::", &network1);
+       if (err) {
+               fprintf(stderr, "Could not look up the given IP address\n");
+               exit(EXIT_FAILURE);
+       }
+       loc_network_unref(network1);
+
+       // Lookup a non-exact match
+       err = loc_database_lookup_from_string(db, "2001:db8:fffe:1::", &network1);
+       if (err) {
+               fprintf(stderr, "Could not look up the given IP address\n");
+               exit(EXIT_FAILURE);
+       }
+       loc_network_unref(network1);
+
        loc_unref(ctx);
 
        return EXIT_SUCCESS;