github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/core/lsdrivers/lsdrivers_linux_test.go (about) 1 // Copyright 2012-2017 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "os" 9 "path/filepath" 10 "strings" 11 "testing" 12 ) 13 14 // Testdata describing a directory, file, or link. 15 // type t is one of d, l, or - 16 // n is the name, l the symlink if any. 17 type dfl struct { 18 t string 19 n string 20 l string 21 } 22 23 func makeDFL(d []dfl) error { 24 for _, f := range d { 25 switch f.t { 26 case "d": 27 if err := os.MkdirAll(f.n, 0o755); err != nil { 28 return err 29 } 30 case "l": 31 if err := os.Symlink(f.l, f.n); err != nil { 32 return err 33 } 34 case "-": 35 f, err := os.Create(f.n) 36 if err != nil { 37 return err 38 } 39 f.Close() 40 } 41 } 42 return nil 43 } 44 45 func allDone(dir string, t *testing.T) { 46 if err := os.RemoveAll(dir); err != nil { 47 t.Fatal(err) 48 } 49 } 50 51 // This tests one of the unused components, the alarm timer 52 func TestUnusedAlarmTimer(t *testing.T) { 53 dir := t.TempDir() 54 55 // generated by: tar cf - /sys/bus | tar tvf - | awk '{printf("{t:\"%s\", n: \"%s\", l: \"%s\"},\n", substr($1,1,1), $6, $8)}' 56 // Then filter what you need. 57 alarmtimer := []dfl{ 58 {t: "d", n: filepath.Join(dir, "sys/bus/platform/drivers/alarmtimer/"), l: ""}, 59 } 60 if err := makeDFL(alarmtimer); err != nil { 61 t.Fatal(err) 62 } 63 defer allDone(dir, t) 64 65 bus := filepath.Join(dir, "sys/bus") 66 out, err := lsdrivers(bus, false) 67 if err != nil { 68 t.Fatal(err) 69 } 70 o := strings.Join(out, "\n") 71 used := "" 72 if used != o { 73 t.Errorf("testing used: got %q, want %q", o, used) 74 } 75 out, err = lsdrivers(bus, true) 76 if err != nil { 77 t.Fatal(err) 78 } 79 unused := "platform.alarmtimer" 80 o = strings.Join(out, "\n") 81 if unused != o { 82 t.Errorf("testing unused: got %q, want %q", o, unused) 83 } 84 } 85 86 // This tests one of the unused components, acpi.button 87 func TestUsedPWRButton(t *testing.T) { 88 dir := t.TempDir() 89 90 // generated by: tar cf - /sys/bus | tar tvf - | awk '{printf("{t:\"%s\", n: \"%s\", l: \"%s\"},\n", substr($1,1,1), $6, $8)}' 91 alarmtimer := []dfl{ 92 {t: "d", n: filepath.Join(dir, "sys/bus/acpi/drivers/button/"), l: ""}, 93 {t: "l", n: filepath.Join(dir, "sys/bus/acpi/drivers/button/LNXPWRBN:00"), l: "../../../../devices/LNXSYSTM:00/LNXPWRBN:00"}, 94 } 95 if err := makeDFL(alarmtimer); err != nil { 96 t.Fatal(err) 97 } 98 defer allDone(dir, t) 99 100 bus := filepath.Join(dir, "sys/bus") 101 out, err := lsdrivers(bus, false) 102 if err != nil { 103 t.Fatal(err) 104 } 105 o := strings.Join(out, "\n") 106 used := "acpi.button" 107 if used != o { 108 t.Errorf("testing used: got %q, want %q", o, used) 109 } 110 out, err = lsdrivers(bus, true) 111 if err != nil { 112 t.Fatal(err) 113 } 114 unused := "" 115 o = strings.Join(out, "\n") 116 if unused != o { 117 t.Errorf("testing unused: got %q, want %q", o, unused) 118 } 119 }