]> git.ipfire.org Git - people/ms/libloc.git/blob - tests/lua/main.lua
lua: database: Implement fetching countries
[people/ms/libloc.git] / tests / lua / main.lua
1 #!/usr/bin/lua
2 --[[###########################################################################
3 # #
4 # libloc - A library to determine the location of someone on the Internet #
5 # #
6 # Copyright (C) 2024 IPFire Development Team <info@ipfire.org> #
7 # #
8 # This library is free software; you can redistribute it and/or #
9 # modify it under the terms of the GNU Lesser General Public #
10 # License as published by the Free Software Foundation; either #
11 # version 2.1 of the License, or (at your option) any later version. #
12 # #
13 # This library is distributed in the hope that it will be useful, #
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
16 # Lesser General Public License for more details. #
17 # #
18 ############################################################################--]]
19
20 luaunit = require("luaunit")
21
22 ENV_TEST_DATABASE = os.getenv("TEST_DATABASE")
23
24 function test_load()
25 -- Try loading the module
26 location = require("location")
27
28 -- Print the version
29 print(location.version())
30 end
31
32 function test_open_database()
33 location = require("location")
34
35 -- Open the database
36 db = location.Database.open(ENV_TEST_DATABASE)
37 end
38
39 function test_lookup()
40 location = require("location")
41
42 -- Open the database
43 db = location.Database.open(ENV_TEST_DATABASE)
44
45 -- Perform a lookup
46 network = db:lookup("81.3.27.32")
47
48 luaunit.assertEquals(network:get_family(), 2) -- AF_INET
49 luaunit.assertEquals(network:get_country_code(), "DE")
50 luaunit.assertEquals(network:get_asn(), 24679)
51 end
52
53 function test_network()
54 location = require("location")
55
56 n1 = location.Network.new("10.0.0.0/8")
57
58 -- The ASN should be nul
59 luaunit.assertNil(n1:get_asn())
60
61 -- The family should be IPv4
62 luaunit.assertEquals(n1:get_family(), 2) -- AF_INET
63
64 -- The country code should be empty
65 luaunit.assertNil(n1:get_country_code())
66 end
67
68 function test_as()
69 location = require("location")
70
71 -- Create a new AS
72 as = location.AS.new(12345)
73 luaunit.assertEquals(as:get_number(), 12345)
74 luaunit.assertNil(as:get_name())
75
76 -- Reset
77 as = nil
78 end
79
80 function test_fetch_as()
81 location = require("location")
82
83 -- Open the database
84 db = location.Database.open(ENV_TEST_DATABASE)
85
86 -- Fetch an AS
87 as = db:get_as(0)
88
89 -- This should not exist
90 luaunit.assertNil(as)
91
92 -- Fetch something that exists
93 as = db:get_as(204867)
94 luaunit.assertEquals(as:get_number(), 204867)
95 luaunit.assertEquals(as:get_name(), "Lightning Wire Labs GmbH")
96 end
97
98 function test_country()
99 location = require("location")
100
101 c1 = location.Country.new("DE")
102 luaunit.assertEquals(c1:get_code(), "DE")
103 luaunit.assertNil(c1:get_name())
104 luaunit.assertNil(c1:get_continent_code())
105
106 c2 = location.Country.new("GB")
107 luaunit.assertNotEquals(c1, c2)
108
109 c1 = nil
110 c2 = nil
111 end
112
113 function test_fetch_country()
114 location = require("location")
115
116 -- Open the database
117 db = location.Database.open(ENV_TEST_DATABASE)
118
119 -- Fetch an invalid country
120 c = db:get_country("XX")
121 luaunit.assertNil(c)
122
123 -- Fetch something that exists
124 c = db:get_country("DE")
125 luaunit.assertEquals(c:get_code(), "DE")
126 luaunit.assertEquals(c:get_name(), "Germany")
127 end
128
129 -- This test is not very deterministic but should help to test the GC methods
130 function test_gc()
131 print("GC: " .. collectgarbage("collect"))
132 end
133
134 os.exit(luaunit.LuaUnit.run())