github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/gpio/gpio_linux_test.go (about)

     1  // Copyright 2019 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 gpio
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/u-root/u-root/pkg/testutil"
    11  )
    12  
    13  // GPIO allocations so the tests don't conflict with each other:
    14  //
    15  //   TestExport - 9 and 10
    16  //   TestReadValue - 11
    17  //   TestGetPinID - 12
    18  
    19  func TestReadValue(t *testing.T) {
    20  	testutil.SkipIfNotRoot(t)
    21  
    22  	const gpioNum = 11
    23  
    24  	if err := Export(gpioNum); err != nil {
    25  		t.Fatal(err)
    26  	}
    27  
    28  	for _, want := range []Value{Low, High} {
    29  		if err := SetOutputValue(gpioNum, want); err != nil {
    30  			t.Fatal(err)
    31  		}
    32  
    33  		if val, err := ReadValue(gpioNum); err != nil {
    34  			t.Fatal(err)
    35  		} else if val != want {
    36  			t.Errorf("ReadValue(%d) = %v, want %v", gpioNum, val, want)
    37  		}
    38  	}
    39  }
    40  
    41  func TestExport(t *testing.T) {
    42  	testutil.SkipIfNotRoot(t)
    43  
    44  	if err := Export(10); err != nil {
    45  		t.Errorf("Could not export pin 10: %v", err)
    46  	}
    47  
    48  	// Only 10-20 are valid GPIOs in the mock chip.
    49  	if err := Export(9); err == nil {
    50  		t.Errorf("Export(pin 9) should have failed, got nil")
    51  	}
    52  }
    53  
    54  func TestGetPinID(t *testing.T) {
    55  	testutil.SkipIfNotRoot(t)
    56  
    57  	// Base is 10, so we expect 10+2.
    58  	if pin, err := GetPinID("gpio-mockup-A", 2); err != nil {
    59  		t.Errorf("GetPinID(gpio-mockup-A, 2) = %v, want nil", err)
    60  	} else if pin != 12 {
    61  		t.Errorf("GetPinID(gpio-mockup-A, 2) = %v, want 12", pin)
    62  	}
    63  
    64  	// There are only 10 GPIOs, so expect this to fail.
    65  	if _, err := GetPinID("gpio-mockup-A", 12); err == nil {
    66  		t.Errorf("GetPinID(gpio-mockup-A, 12) = nil, but wanted error")
    67  	}
    68  
    69  }