liminix

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

test-ifwait.fnl (3374B)


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