From 48db0458c00d12d2a81704b945f239c37bc43faf Mon Sep 17 00:00:00 2001 From: William Petit Date: Wed, 19 Sep 2018 16:30:37 +0200 Subject: [PATCH] Add OPKGUpdate() API --- reach/opkg_update.go | 55 +++++++++++++++++++++++++++++++++++++++ reach/opkg_update_test.go | 28 ++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 reach/opkg_update.go create mode 100644 reach/opkg_update_test.go diff --git a/reach/opkg_update.go b/reach/opkg_update.go new file mode 100644 index 0000000..c264c2c --- /dev/null +++ b/reach/opkg_update.go @@ -0,0 +1,55 @@ +package reach + +import ( + "sync" + + "forge.cadoles.com/Pyxis/golang-socketio" + "github.com/pkg/errors" +) + +const ( + eventUpdate = "update" + eventOPKGUpdateResult = "opkg update result" +) + +// OPKGUpdateStatus embeds informations about OPKG update status +type OPKGUpdateStatus struct { + Active bool `json:"active"` + State string `json:"state"` + Locked bool `json:"locked"` +} + +// OPKGUpdate asks the ReachRS module to start an OPKG update +func (c *Client) OPKGUpdate() (*OPKGUpdateStatus, error) { + + var err error + var status *OPKGUpdateStatus + var wg sync.WaitGroup + + wg.Add(1) + + err = c.conn.On(eventOPKGUpdateResult, func(h *gosocketio.Channel, st *OPKGUpdateStatus) { + status = st + c.conn.Off(eventOPKGUpdateResult) + wg.Done() + }) + if err != nil { + return nil, errors.Wrapf(err, "error while binding to '%s' event", eventOPKGUpdateResult) + } + + c.logf("sending '%s' event", eventUpdate) + if err = c.conn.Emit(eventUpdate, nil); err != nil { + return nil, errors.Wrapf(err, "error while emitting '%s' event", eventUpdate) + } + c.logf("'%s' event sent", eventUpdate) + + wg.Wait() + + c.logf( + "opkg update result: active: %v, state: %v, locked: %v", + status.Active, status.State, status.Locked, + ) + + return status, err + +} diff --git a/reach/opkg_update_test.go b/reach/opkg_update_test.go new file mode 100644 index 0000000..a843dd6 --- /dev/null +++ b/reach/opkg_update_test.go @@ -0,0 +1,28 @@ +package reach + +import ( + "testing" +) + +func TestClientOPKGUpdate(t *testing.T) { + + if !*runIntegrationTests { + t.Skip("To run this test, use: go test -integration") + } + + client := NewClient( + WithStandardLogger(), + WithEndpoint(*reachHost, 80), + ) + if err := client.Connect(); err != nil { + t.Fatal(err) + } + + _, err := client.OPKGUpdate() + if err != nil { + t.Error(err) + } + + defer client.Close() + +}