liminix

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

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


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