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  }