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