aboutsummaryrefslogtreecommitdiffstats
path: root/geoip/tests.lisp
blob: b7cd0bee3ad1db99ea1709ef19d663a72dbf7a32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(defpackage geoip/tests
  (:use :cl :cffi :fiveam :alexandria :geoip))
(in-package :geoip/tests)

(test ipv4
  (is (= (geoip::parse-ipv4 "8.8.8.8") 134744072))
  (is (= (geoip::parse-ipv6 "::1") 1)))

(test reader
  (with-foreign-array (a #(0 0 1 23 126 195 159 195 156) '(:array :uint8 9))
    (let ((r (geoip::make-db-reader :db-ptr a)))
      (is (= 279 (geoip::mread-unsigned r 4)))
      (is (equal "~ßÜ" (geoip::mread-uft8 r 5))))))

(test selector
  (let ((data '((a . b) (q . 6) (l (:p . q) (r . s)))))
    (is (eq (get-in data 'a) 'b))
    (is (eq (get-in data 'q) 6))
    (is (eq (get-in data 'l 'r) 's))
    (is (eq (get-in data 'l :p) 'q))))

(test integer-to-bits-conversion
  "Test integer to bits conversion"
  (is (equal (geoip::integer-to-bits 0 8) '(0 0 0 0 0 0 0 0)))
  (is (equal (geoip::integer-to-bits 255 8) '(1 1 1 1 1 1 1 1)))
  (is (equal (geoip::integer-to-bits 170 8) '(1 0 1 0 1 0 1 0)))
  (is (equal (geoip::integer-to-bits 1 4) '(0 0 0 1)))
  (is (equal (geoip::integer-to-bits 15 4) '(1 1 1 1))))

(test specific
  (let ((data #(#x44 #x54 #x65 #x73 #x74 ;; string: Test
                #xA1 #x0F
                #xC2 #xAF #x6C
                #xE2 ;; map of 2 elements
                #x20 0 ;; key: pointer to first string
                #x20 5 ;; val: pointer to int
                #x43 107 101 121 ;; key: key
                #x20 7 ;; val: pointer to the uint16
                1 7 ;; true
                4 1 #xFF #xFF #xFF #xF0 ;; int32: -16
                2 4 #x42 65 79 #x48 195 160 195 188 195 159 195 177 ;; list
                #x68 #x40 #x45 #x28 #x36 #x5C #xB3 #x5F #x3D
                )))
    (with-foreign-array (a data `(:array :uint8 ,(length data)))
      (let ((r (geoip::make-db-reader :db-ptr a :head-ptr a)))
        (is (string= "Test" (geoip::mread-data r)))
        (is (= #x0F (geoip::mread-data r)))
        (is (= #xAF6C (geoip::mread-data r)))
        (is (equalp '((:test . #x0F) (:key . #xAF6C))
                    (geoip::mread-data r)))
        (is (eq t (geoip::mread-data r)))
        (is (= -16 (geoip::mread-data r)))
        (is (equalp '("AO" "àüßñ") (geoip::mread-data r)))
        (is (= 42.314159d0 (geoip::mread-data r))) ))))