liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

acquire-wan-address-test.fnl (3340B)


      1 (local subject (require :acquire-wan-address))
      2 (local { : view } (require :fennel))
      3 (local { : merge : dup } (require :anoia))
      4 
      5 
      6 (local a1
      7        {
      8         "2001-ab-cd-ef" {
      9                       	 :address "2001:ab:cd:ef"
     10                          :len "64"
     11                          :preferred "3600"
     12                          :valid "7200"
     13                          }
     14         }
     15        )
     16 
     17 (local a156
     18        {
     19         "2001-ab-cd-ef" {
     20                       	 :address "2001:ab:cd:ef"
     21                          :len "56"
     22                          :preferred "3600"
     23                          :valid "7200"
     24                          }
     25         }
     26        )
     27 
     28 (local a2
     29        {
     30         "2001-0-1-2-3" {
     31                         :address "2001:0:1:2:3"
     32                         :len "64"
     33                         :preferred "3600"
     34                         :valid "7200"
     35                         }
     36         }
     37        )
     38 
     39 (local a21
     40        {
     41         "2001-0-1-2-3" {
     42                         :address "2001:0:1:2:3"
     43                         :len "64"
     44                         :preferred "1800"
     45                         :valid "5400"
     46                         }
     47         }
     48        )
     49 
     50 (macro expect [assertion]
     51   (let [msg (.. "expectation failed: " (view assertion))]
     52     `(when (not ,assertion)
     53        (assert false ,msg))))
     54 
     55 (macro expect= [actual expected]
     56   `(let [ve# (view ,expected)
     57          va# (view ,actual)]
     58      (when (not (= ve# va#))
     59        (assert false
     60                (.. "\nexpected " ve# "\ngot " va#)
     61                ))))
     62 
     63 (fn first-address []
     64   (let [deleted
     65         (subject.deletions
     66          { }
     67          a1
     68          )]
     69     (expect= deleted [])))
     70 
     71 (fn second-address []
     72   (let [del
     73         (subject.deletions
     74          a1
     75          (merge (dup a1) a2)
     76          )]
     77     (expect= del [])))
     78 
     79 (fn old-address-is-deleted []
     80   (let [del
     81         (subject.deletions
     82          (merge (dup a1) a2)
     83          a1
     84          )]
     85     (expect= (. del 1) (. a2 "2001-0-1-2-3"))
     86     ))
     87 
     88 (fn changed-lifetime-not-deleted []
     89   (let [del
     90         (subject.deletions
     91          (merge (dup a1) a2)
     92          (merge (dup a1) a21)
     93          )]
     94     ;; when an address lifetime changes, "ip address change"
     95     ;; will update that so it need not (should not) be deleted
     96     (expect= del [])))
     97 
     98 (fn changed-prefix-is-deleted []
     99   (let [del
    100         (subject.deletions a1 a156)]
    101     ;; when an address prefix changes, "ip address change"
    102     ;; ignores that cjhange, so we have to remove the
    103     ;; address before reinstating it
    104     (expect= del [(. a1 "2001-ab-cd-ef")])))
    105 
    106 (first-address)
    107 (second-address)
    108 (old-address-is-deleted)
    109 (changed-lifetime-not-deleted)
    110 (changed-prefix-is-deleted)
    111 
    112 (let [cmds []]
    113   (subject.update-addresses
    114    "ppp0" a1 (merge (dup a1) a2)
    115    (fn [a] (table.insert cmds a)))
    116   (expect=
    117    (doto cmds table.sort)
    118    [
    119     ;; order of changes is unimportant
    120     "ip address change 2001:0:1:2:3/64 dev ppp0 valid_lft 7200 preferred_lft 3600"
    121     "ip address change 2001:ab:cd:ef/64 dev ppp0 valid_lft 7200 preferred_lft 3600"
    122     ]))
    123 
    124 (let [cmds []]
    125   (subject.update-addresses
    126    "ppp0" (merge (dup a1) a2) a1
    127    (fn [a] (table.insert cmds a)))
    128   (expect=
    129    cmds
    130    [
    131     ;; deletes are executed before changes
    132     "ip address del 2001:0:1:2:3/64 dev ppp0"
    133     "ip address change 2001:ab:cd:ef/64 dev ppp0 valid_lft 7200 preferred_lft 3600"
    134     ]))
    135 
    136 (print "OK")