devout: add device

This commit is contained in:
Daniel Barlow 2024-04-20 18:24:10 +01:00
parent 349bfecbb8
commit 4df963996c

View file

@ -1,11 +1,23 @@
(local { : view } (require :fennel))
(import-macros { : expect= } :anoia.assert) (import-macros { : expect= } :anoia.assert)
(fn parse-uevent [s]
(let [(nl nxt) (string.find s "\0" 1 true)]
(doto
(collect [k v (string.gmatch
(string.sub s (+ 1 nxt))
"(%g-)=(%g+)")]
(k:lower) v)
(tset :path (string.sub s 1 (- nl 1))))))
(fn database [] (fn database []
{ (let [db {}]
:find (fn [terms] []) {
}) :find (fn [_ terms] [(. db (next db))])
:add (fn [_ event-string]
(let [e (parse-uevent event-string)]
(tset db e.path e)))
}))
(macro example [description & body] (macro example [description & body]
`(do ,body)) `(do ,body))
@ -15,6 +27,23 @@
(let [db (database)] (let [db (database)]
(expect= (db:find {:partname "boot"}) []))) (expect= (db:find {:partname "boot"}) [])))
(example
"when I add a device, I can find it"
(let [db (database)]
(db:add "add@/devices/pci0000:00/0000:00:13.0/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0/block/sda\0ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:13.0/usb1/1-1/1-1:1.0/host0/target0:0:0/0:0:0:0/block/sda
SUBSYSTEM=block
MAJOR=8
MINOR=0
DEVNAME=sda
DEVTYPE=disk
DISKSEQ=2
SEQNUM=1527")
(let [[m & more] (db:find {:devname "boot"})]
(expect= m.devname "sda")
(expect= m.major "8")
(expect= more []))))
(print "OK") (print "OK")