liminix

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

test-ifwait.fnl (3286B)


      1 (local { : view &as fennel } (require :fennel))
      2 (local anoia (require :anoia))
      3 (import-macros { : expect= } :anoia.assert)
      4 
      5 ;; nix-shell --run "cd pkgs/ifwait && fennelrepl test-ifwait.fnl"
      6 
      7 (var fake-system (fn [s] (print "executing " s)))
      8 (tset anoia :system #(fake-system $1))
      9 
     10 
     11 (fn event-generator [events]
     12   (coroutine.wrap
     13    (fn []
     14      (each [_ e (ipairs events)] (coroutine.yield e)))))
     15 
     16 (fn file-events [path]
     17   (let [data (with-open [e (io.open path "r")] (e:read "*a"))
     18         parse (fennel.parser data)]
     19     (icollect [_ ast parse]
     20       ast)))
     21 
     22 (set _G.arg (doto [] (tset 0 "test")))
     23 (local ifwait (require :ifwait))
     24 
     25 (let [gen (event-generator (file-events "events-fixture"))]
     26   (ifwait.run ["dummy0" "up"] #gen)
     27   (match (pcall gen)
     28     (true _) true
     29     (false msg) (error "didn't detect dummy0 up event")))
     30 
     31 (var upsies [])
     32 (set fake-system
     33      (fn [s]
     34        (if (s:match "-u change addmember")
     35            (table.insert upsies :u)
     36            (s:match "-d change addmember")
     37            (table.insert upsies :d))))
     38 
     39 (fn newlink [name up running]
     40   {:event "newlink"
     41    :hwaddr "b6:7d:5c:38:89:1d"
     42    :index (string.unpack ">i2" name)
     43    :mtu 1500
     44    : name
     45    : running
     46    :stamp 857161382
     47    : up })
     48 
     49 "when it gets events that don't match the interface, nothing happens"
     50 
     51 (let [gen (-> [(newlink "eth1" "no" "no")] event-generator)]
     52   (set upsies [])
     53   (ifwait.run [ "-s" "addmember" "dummy0" "up"] #gen)
     54   (expect= upsies []))
     55 
     56 "when it gets an event that should start the service, the service starts"
     57 
     58 (let [gen (->
     59            [(newlink "dummy0" "no" "no")
     60             (newlink "dummy0" "yes" "no")
     61             (newlink "eth1" "no" "no")]
     62            event-generator)]
     63   (set upsies [])
     64   (ifwait.run ["-s" "addmember" "dummy0" "up"] #gen)
     65   (expect= upsies [:d :u]))
     66 
     67 "when it gets an event that should stop the service, the service stops"
     68 
     69 (let [gen (->
     70            [(newlink "dummy0" "no" "no")
     71             (newlink "dummy0" "yes" "no")
     72             (newlink "dummy0" "no" "no")
     73             ]
     74            event-generator)]
     75   (set upsies [])
     76   (ifwait.run ["-s" "addmember" "dummy0" "up"] #gen)
     77   (expect= upsies [:d :u :d]))
     78 
     79 "it does not call s6-rc again if the service is already in required state"
     80 
     81 (let [gen (->
     82            [(newlink "dummy0" "no" "no")
     83             (newlink "dummy0" "yes" "no")
     84             (newlink "dummy0" "yes" "yes")
     85             (newlink "dummy0" "yes" "yes")
     86             (newlink "dummy0" "yes" "no")
     87             (newlink "dummy0" "no" "no")
     88             ]
     89            event-generator)]
     90   (set upsies [])
     91   (ifwait.run ["-s" "addmember" "dummy0" "up"] #gen)
     92   (expect= upsies [:d :u :d]))
     93 
     94 "it handles an error return from s6-rc"
     95 
     96 (set fake-system
     97      (fn [s]
     98        (if (s:match "-u change addmember")
     99            (table.insert upsies :u)
    100            (s:match "-d change addmember")
    101            (table.insert upsies :d))
    102        (error "false")
    103        ))
    104 
    105 (let [gen (->
    106            [(newlink "dummy0" "yes" "no")
    107             (newlink "dummy0" "yes" "yes")
    108             (newlink "dummy0" "yes" "yes")
    109             (newlink "dummy0" "yes" "no")
    110             (newlink "dummy0" "no" "no")
    111             ]
    112            event-generator)]
    113   (set upsies [])
    114   (ifwait.run ["-s" "addmember" "dummy0" "up"] #gen)
    115   (expect= upsies [:u :u :u :u]))
    116 
    117 (print "OK")