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")