gobot.io/x/gobot@v1.16.0/sysfs/digital_pin_test.go (about) 1 package sysfs 2 3 import ( 4 "errors" 5 "os" 6 "syscall" 7 "testing" 8 9 "gobot.io/x/gobot/gobottest" 10 ) 11 12 func TestDigitalPin(t *testing.T) { 13 fs := NewMockFilesystem([]string{ 14 "/sys/class/gpio/export", 15 "/sys/class/gpio/unexport", 16 "/sys/class/gpio/gpio10/value", 17 "/sys/class/gpio/gpio10/direction", 18 }) 19 20 SetFilesystem(fs) 21 22 pin := NewDigitalPin(10, "custom") 23 gobottest.Assert(t, pin.pin, "10") 24 gobottest.Assert(t, pin.label, "custom") 25 26 pin = NewDigitalPin(10) 27 gobottest.Assert(t, pin.pin, "10") 28 gobottest.Assert(t, pin.label, "gpio10") 29 gobottest.Assert(t, pin.value, nil) 30 31 err := pin.Unexport() 32 gobottest.Assert(t, err, nil) 33 gobottest.Assert(t, fs.Files["/sys/class/gpio/unexport"].Contents, "10") 34 35 err = pin.Export() 36 gobottest.Assert(t, err, nil) 37 gobottest.Assert(t, fs.Files["/sys/class/gpio/export"].Contents, "10") 38 gobottest.Refute(t, pin.value, nil) 39 40 err = pin.Write(1) 41 gobottest.Assert(t, err, nil) 42 gobottest.Assert(t, fs.Files["/sys/class/gpio/gpio10/value"].Contents, "1") 43 44 err = pin.Direction(IN) 45 gobottest.Assert(t, err, nil) 46 gobottest.Assert(t, fs.Files["/sys/class/gpio/gpio10/direction"].Contents, "in") 47 48 data, _ := pin.Read() 49 gobottest.Assert(t, 1, data) 50 51 pin2 := NewDigitalPin(30, "custom") 52 err = pin2.Write(1) 53 gobottest.Refute(t, err, nil) 54 55 data, err = pin2.Read() 56 gobottest.Refute(t, err, nil) 57 gobottest.Assert(t, data, 0) 58 59 writeFile = func(File, []byte) (int, error) { 60 return 0, &os.PathError{Err: syscall.EINVAL} 61 } 62 63 err = pin.Unexport() 64 gobottest.Assert(t, err, nil) 65 66 writeFile = func(File, []byte) (int, error) { 67 return 0, &os.PathError{Err: errors.New("write error")} 68 } 69 70 err = pin.Unexport() 71 gobottest.Assert(t, err.(*os.PathError).Err, errors.New("write error")) 72 73 writeFile = func(File, []byte) (int, error) { 74 return 0, &os.PathError{Err: syscall.EBUSY} 75 } 76 77 err = pin.Export() 78 gobottest.Assert(t, err, nil) 79 80 writeFile = func(File, []byte) (int, error) { 81 return 0, &os.PathError{Err: errors.New("write error")} 82 } 83 84 err = pin.Export() 85 gobottest.Assert(t, err.(*os.PathError).Err, errors.New("write error")) 86 } 87 88 func TestDigitalPinExportError(t *testing.T) { 89 fs := NewMockFilesystem([]string{ 90 "/sys/class/gpio/export", 91 "/sys/class/gpio/unexport", 92 "/sys/class/gpio/gpio10/value", 93 "/sys/class/gpio/gpio10/direction", 94 }) 95 96 SetFilesystem(fs) 97 98 pin := NewDigitalPin(10, "custom") 99 writeFile = func(File, []byte) (int, error) { 100 return 0, &os.PathError{Err: syscall.EBUSY} 101 } 102 103 err := pin.Export() 104 gobottest.Refute(t, err, nil) 105 } 106 107 func TestDigitalPinUnexportError(t *testing.T) { 108 fs := NewMockFilesystem([]string{ 109 "/sys/class/gpio/export", 110 "/sys/class/gpio/unexport", 111 "/sys/class/gpio/gpio10/value", 112 "/sys/class/gpio/gpio10/direction", 113 }) 114 115 SetFilesystem(fs) 116 117 pin := NewDigitalPin(10, "custom") 118 writeFile = func(File, []byte) (int, error) { 119 return 0, &os.PathError{Err: syscall.EBUSY} 120 } 121 122 err := pin.Unexport() 123 gobottest.Refute(t, err, nil) 124 }