From 781eacd40a1b4ecb800234ec4fc759b2720dbdf6 Mon Sep 17 00:00:00 2001 From: deadprogram Date: Wed, 19 Apr 2017 12:59:50 +0200 Subject: [PATCH] edison: refactor read/write functions and increase test coverage Signed-off-by: deadprogram --- platforms/intel-iot/edison/edison_adaptor.go | 24 +++++++----- .../intel-iot/edison/edison_adaptor_test.go | 37 +++++++++++++++++++ 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/platforms/intel-iot/edison/edison_adaptor.go b/platforms/intel-iot/edison/edison_adaptor.go index 3af04911..c6634ec6 100644 --- a/platforms/intel-iot/edison/edison_adaptor.go +++ b/platforms/intel-iot/edison/edison_adaptor.go @@ -60,11 +60,13 @@ type Adaptor struct { pwmPins map[int]*pwmPin i2cBus sysfs.I2cDevice connect func(e *Adaptor) (err error) + writeFile func(path string, data []byte) (i int, err error) + readFile func(path string) ([]byte, error) } // changePinMode writes pin mode to current_pinmux file -func changePinMode(pin, mode string) (err error) { - _, err = writeFile( +func changePinMode(a *Adaptor, pin, mode string) (err error) { + _, err = a.writeFile( "/sys/kernel/debug/gpio_debug/gpio"+pin+"/current_pinmux", []byte("mode"+mode), ) @@ -74,9 +76,11 @@ func changePinMode(pin, mode string) (err error) { // NewAdaptor returns a new Edison Adaptor func NewAdaptor() *Adaptor { return &Adaptor{ - name: gobot.DefaultName("Edison"), - board: "arduino", - pinmap: arduinoPinMap, + name: gobot.DefaultName("Edison"), + board: "arduino", + pinmap: arduinoPinMap, + writeFile: writeFile, + readFile: readFile, } } @@ -172,7 +176,7 @@ func (e *Adaptor) PwmWrite(pin string, val byte) (err error) { if err = e.DigitalWrite(pin, 1); err != nil { return } - if err = changePinMode(strconv.Itoa(int(sysPin.pin)), "1"); err != nil { + if err = changePinMode(e, strconv.Itoa(int(sysPin.pin)), "1"); err != nil { return } e.pwmPins[sysPin.pwmPin] = newPwmPin(sysPin.pwmPin) @@ -199,7 +203,7 @@ func (e *Adaptor) PwmWrite(pin string, val byte) (err error) { // AnalogRead returns value from analog reading of specified pin func (e *Adaptor) AnalogRead(pin string) (val int, err error) { - buf, err := readFile( + buf, err := e.readFile( "/sys/bus/iio/devices/iio:device1/in_voltage" + pin + "_raw", ) if err != nil { @@ -262,13 +266,13 @@ func (e *Adaptor) arduinoSetup() (err error) { } for _, i := range []string{"111", "115", "114", "109"} { - if err = changePinMode(i, "1"); err != nil { + if err = changePinMode(e, i, "1"); err != nil { return err } } for _, i := range []string{"131", "129", "40"} { - if err = changePinMode(i, "0"); err != nil { + if err = changePinMode(e, i, "0"); err != nil { return err } } @@ -302,7 +306,7 @@ func (e *Adaptor) arduinoI2CSetup() (err error) { } for _, i := range []string{"28", "27"} { - if err = changePinMode(i, "1"); err != nil { + if err = changePinMode(e, i, "1"); err != nil { return } } diff --git a/platforms/intel-iot/edison/edison_adaptor_test.go b/platforms/intel-iot/edison/edison_adaptor_test.go index 4d4db2fa..055f63d2 100644 --- a/platforms/intel-iot/edison/edison_adaptor_test.go +++ b/platforms/intel-iot/edison/edison_adaptor_test.go @@ -115,6 +115,16 @@ func TestAdaptorConnect(t *testing.T) { gobottest.Refute(t, a.Connect(), nil) } +func TestAdaptorConnectArduinoError(t *testing.T) { + a, _ := initTestAdaptor() + a.writeFile = func(string, []byte) (int, error) { + return 0, errors.New("write error") + } + + err := a.Connect() + gobottest.Assert(t, strings.Contains(err.Error(), "write error"), true) +} + func TestAdaptorConnectSparkfun(t *testing.T) { a, _ := initTestAdaptor() a.SetBoard("sparkfun") @@ -176,6 +186,12 @@ func TestAdaptorI2c(t *testing.T) { gobottest.Assert(t, a.Finalize(), nil) } +func TestAdaptorI2cInvalidBus(t *testing.T) { + a, _ := initTestAdaptor() + _, err := a.GetConnection(0xff, 3) + gobottest.Assert(t, err, errors.New("Unsupported I2C bus")) +} + func TestAdaptorPwm(t *testing.T) { a, fs := initTestAdaptor() @@ -187,6 +203,17 @@ func TestAdaptorPwm(t *testing.T) { gobottest.Assert(t, err, errors.New("Not a PWM pin")) } +func TestAdaptorPwmError(t *testing.T) { + a, _ := initTestAdaptor() + + a.writeFile = func(string, []byte) (int, error) { + return 0, errors.New("write error") + } + + err := a.PwmWrite("5", 100) + gobottest.Assert(t, err, errors.New("write error")) +} + func TestAdaptorAnalog(t *testing.T) { a, fs := initTestAdaptor() @@ -194,3 +221,13 @@ func TestAdaptorAnalog(t *testing.T) { i, _ := a.AnalogRead("0") gobottest.Assert(t, i, 250) } + +func TestAdaptorAnalogError(t *testing.T) { + a, _ := initTestAdaptor() + + a.readFile = func(string) ([]byte, error) { + return nil, errors.New("read error") + } + _, err := a.AnalogRead("0") + gobottest.Assert(t, err, errors.New("read error")) +}