From e06aa5129af9f0817a5da4d61eae35092e7b47ea Mon Sep 17 00:00:00 2001 From: William Petit Date: Mon, 23 Nov 2020 11:15:30 +0100 Subject: [PATCH] Upgrade to ReachView v2.24.0 --- .gitignore | 3 +- Makefile | 3 + cmd/configurator/main.go | 137 +++++++++--------- cmd/updater/main.go | 2 +- emlid/client.go | 13 +- emlid/common/client.go | 17 +++ emlid/common/handle_version.go | 51 +++++++ .../{updater => common}/reachview_version.go | 15 +- .../reachview_version_test.go | 8 +- emlid/common/util_test.go | 13 ++ emlid/reachview/client.go | 12 +- emlid/reachview/configuration.go | 50 +++++-- emlid/reachview/configuration_model.go | 2 +- emlid/updater/client.go | 9 +- go.mod | 11 +- go.sum | 17 +++ 16 files changed, 260 insertions(+), 103 deletions(-) create mode 100644 emlid/common/client.go create mode 100644 emlid/common/handle_version.go rename emlid/{updater => common}/reachview_version.go (72%) rename emlid/{updater => common}/reachview_version_test.go (85%) create mode 100644 emlid/common/util_test.go diff --git a/.gitignore b/.gitignore index b64170f..3a942cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /vendor /bin /.env -/release \ No newline at end of file +/release +*.log \ No newline at end of file diff --git a/Makefile b/Makefile index 0288d94..ad1f561 100644 --- a/Makefile +++ b/Makefile @@ -39,4 +39,7 @@ doc: release: scripts/release +spy-websocket: + echo > websocket.log && sudo tshark -Y websocket.payload -Tfields -e text | tee -a websocket.log + .PHONY: test clean generate vendor install-devtools lint watch tidy doc release \ No newline at end of file diff --git a/cmd/configurator/main.go b/cmd/configurator/main.go index 44a0fd2..810f1a4 100644 --- a/cmd/configurator/main.go +++ b/cmd/configurator/main.go @@ -76,7 +76,7 @@ func configureRover() { config.RTKSettings.GPSARMode = reachview.GPSARModeFixAndHold config.RTKSettings.GLONASSARMode = reachview.On config.RTKSettings.PositionningMode = reachview.PositionningModeKinematic - config.RTKSettings.UpdateRate = reachview.String("5") + config.RTKSettings.UpdateRate = reachview.Float(5) config.CorrectionInput = &reachview.CorrectionInput{ Input2: &reachview.Input2{ Input: reachview.Input{ @@ -105,56 +105,25 @@ func configureBase() { log.Println("configuring module as base") config := getCommonConfiguration() - config.RTKSettings.UpdateRate = reachview.String("1") - config.BaseMode = &reachview.BaseMode{ - Output: &reachview.Output{ - Enabled: reachview.True, - Format: reachview.IOFormatRTCM3, - Type: reachview.IOTypeLoRa, + config.RTKSettings.UpdateRate = reachview.Float(1) + config.BaseMode.Output = &reachview.Output{ + Enabled: reachview.True, + Format: reachview.IOFormatRTCM3, + Type: reachview.IOTypeLoRa, + } + config.BaseMode.BaseCoordinates = &reachview.BaseCoordinates{ + Accumulation: reachview.String("1"), + AntennaOffset: &reachview.AntennaOffset{ + East: reachview.String("0"), + North: reachview.String("0"), + Up: reachview.String("2.20"), }, - BaseCoordinates: &reachview.BaseCoordinates{ - Accumulation: reachview.String("1"), - AntennaOffset: &reachview.AntennaOffset{ - Up: reachview.String("2.20"), - }, - Mode: reachview.BaseCoordinatesModeAverageSingle, - Format: reachview.BaseCoordinatesFormatLLH, - }, - RTCM3Messages: &reachview.RTCM3Messages{ - Type1002: &reachview.RTCMMessageType{ - Enabled: reachview.True, - Frequency: reachview.String("0.1"), - }, - Type1006: &reachview.RTCMMessageType{ - Enabled: reachview.True, - Frequency: reachview.String("0.1"), - }, - Type1010: &reachview.RTCMMessageType{ - Enabled: reachview.True, - Frequency: reachview.String("0.5"), - }, - Type1097: &reachview.RTCMMessageType{ - Enabled: reachview.True, - Frequency: reachview.String("0.5"), - }, - Type1008: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, - Type1019: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, - Type1020: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, - Type1107: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, - Type1117: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, - Type1127: &reachview.RTCMMessageType{ - Enabled: reachview.False, - }, + Mode: reachview.BaseCoordinatesModeManual, + Format: reachview.BaseCoordinatesFormatLLH, + Coordinates: []*string{ + reachview.String("0"), + reachview.String("0"), + reachview.String("0"), }, } @@ -163,8 +132,7 @@ func configureBase() { } func applyConfiguration(c *reachview.Client, config *reachview.Configuration) { - - ctx, applyConfCancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, applyConfCancel := context.WithTimeout(context.Background(), 60*time.Second) defer applyConfCancel() result, _, err := c.ApplyConfiguration(ctx, config) @@ -175,28 +143,17 @@ func applyConfiguration(c *reachview.Client, config *reachview.Configuration) { if result != reachview.ConfigurationApplySuccess { log.Fatal("configuration update failed !") } - - log.Println("restarting rtklib") - if err := c.RestartRTKLib(); err != nil { - log.Fatal(err) - } - } func resetConfiguration(c *reachview.Client) { - log.Println("resetting module configuration") + ctx, resetCancel := context.WithTimeout(context.Background(), 10*time.Second) defer resetCancel() - result, _, err := c.ResetConfiguration(ctx) - if err != nil { + + if err := c.ResetConfiguration(ctx); err != nil { log.Fatal(err) } - - if result != reachview.ConfigurationApplySuccess { - log.Fatal("configuration reset failed !") - } - } func getCommonConfiguration() *reachview.Configuration { @@ -208,8 +165,16 @@ func getCommonConfiguration() *reachview.Configuration { Galileo: reachview.True, SBAS: reachview.True, QZSS: reachview.True, + Compass: reachview.False, }, - UpdateRate: reachview.String("5"), + MaxHorizontalAcceleration: reachview.String("1"), + GPSARMode: reachview.String("fix-and-hold"), + SNRMask: reachview.String("35"), + GLONASSARMode: reachview.String("off"), + UpdateRate: reachview.Float(5), + ElevationMaskAngle: reachview.String("15"), + PositionningMode: reachview.String("kinematic"), + MaxVerticalAcceleration: reachview.String("1"), }, LoRa: &reachview.LoRa{ AirRate: reachview.String("9.11"), @@ -224,5 +189,43 @@ func getCommonConfiguration() *reachview.Configuration { Enabled: reachview.False, }, }, + BaseMode: &reachview.BaseMode{ + RTCM3Messages: &reachview.RTCM3Messages{ + Type1002: &reachview.RTCMMessageType{ + Enabled: reachview.True, + Frequency: reachview.String("0.1"), + }, + Type1006: &reachview.RTCMMessageType{ + Enabled: reachview.True, + Frequency: reachview.String("0.1"), + }, + Type1010: &reachview.RTCMMessageType{ + Enabled: reachview.True, + Frequency: reachview.String("0.5"), + }, + Type1097: &reachview.RTCMMessageType{ + Enabled: reachview.True, + Frequency: reachview.String("0.5"), + }, + Type1008: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + Type1019: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + Type1020: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + Type1107: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + Type1117: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + Type1127: &reachview.RTCMMessageType{ + Enabled: reachview.False, + }, + }, + }, } } diff --git a/cmd/updater/main.go b/cmd/updater/main.go index 6b4a14c..ea2e29d 100644 --- a/cmd/updater/main.go +++ b/cmd/updater/main.go @@ -139,7 +139,7 @@ func updateThenReboot() { log.Println("checking reachview version") ctx, reachviewVersionCancel := context.WithTimeout(ctx, 5*time.Second) defer reachviewVersionCancel() - version, err := c.ReachViewVersion(ctx) + version, _, err := c.ReachViewVersion(ctx) if err != nil { log.Fatal(err) } diff --git a/emlid/client.go b/emlid/client.go index 78d81e9..3b00c5c 100644 --- a/emlid/client.go +++ b/emlid/client.go @@ -4,7 +4,7 @@ import ( "context" "sync" - "forge.cadoles.com/Pyxis/golang-socketio" + gosocketio "forge.cadoles.com/Pyxis/golang-socketio" "forge.cadoles.com/Pyxis/golang-socketio/transport" "github.com/mitchellh/mapstructure" "github.com/pkg/errors" @@ -80,6 +80,9 @@ func (c *Client) Close() { // Emit a new event with the given data func (c *Client) Emit(event string, data interface{}) error { + // enc := json.NewEncoder(os.Stdout) + // enc.SetIndent("", " ") + // enc.Encode(data) c.Logf("emit '%s' event", event) if err := c.conn.Emit(event, data); err != nil { return errors.Wrapf(err, "error while emitting '%s' event", event) @@ -121,7 +124,13 @@ func (c *Client) ReqResp(ctx context.Context, }() err = c.conn.On(responseEvent, func(_ *gosocketio.Channel, data interface{}) { - err = mapstructure.WeakDecode(data, res) + if res != nil { + // enc := json.NewEncoder(os.Stdout) + // enc.SetIndent("", " ") + // enc.Encode(data) + err = mapstructure.WeakDecode(data, res) + } + once.Do(done) }) if err != nil { diff --git a/emlid/common/client.go b/emlid/common/client.go new file mode 100644 index 0000000..b413077 --- /dev/null +++ b/emlid/common/client.go @@ -0,0 +1,17 @@ +package common + +import ( + "forge.cadoles.com/Pyxis/orion/emlid" +) + +// Client is a ReachRS Updater client +type Client struct { + *emlid.Client +} + +// NewClient returns a new ReachRS ReachView client +func NewClient(opts ...emlid.OptionFunc) *Client { + return &Client{ + Client: emlid.NewClient(opts...), + } +} diff --git a/emlid/common/handle_version.go b/emlid/common/handle_version.go new file mode 100644 index 0000000..f0de1ed --- /dev/null +++ b/emlid/common/handle_version.go @@ -0,0 +1,51 @@ +package common + +import ( + "context" + + "github.com/blang/semver/v4" + "github.com/pkg/errors" +) + +type VersionHandlerFunc func(ctx context.Context, version string, stable bool) error + +type VersionHandler struct { + Range string + Handler VersionHandlerFunc +} + +func NewVersionHandler(versionRange string, h VersionHandlerFunc) *VersionHandler { + return &VersionHandler{ + Range: versionRange, + Handler: h, + } +} + +func (c *Client) HandleVersion(ctx context.Context, handlers ...*VersionHandler) error { + rawVersion, stable, err := c.ReachViewVersion(ctx) + if err != nil { + return errors.Wrap(err, "could not retrieve reachview version") + } + + version, err := semver.ParseTolerant(rawVersion) + if err != nil { + return errors.Wrap(err, "could not parse reachview version") + } + + for _, h := range handlers { + versionRange, err := semver.ParseRange(h.Range) + if err != nil { + return errors.Wrap(err, "could not parse handler version range") + } + + if !versionRange(version) { + continue + } + + if err := h.Handler(ctx, rawVersion, stable); err != nil { + return errors.WithStack(err) + } + } + + return nil +} diff --git a/emlid/updater/reachview_version.go b/emlid/common/reachview_version.go similarity index 72% rename from emlid/updater/reachview_version.go rename to emlid/common/reachview_version.go index e7929a9..0278d6f 100644 --- a/emlid/updater/reachview_version.go +++ b/emlid/common/reachview_version.go @@ -1,6 +1,9 @@ -package updater +package common -import "context" +import ( + "context" + "strings" +) const ( eventGetReachViewVersion = "get reachview version" @@ -9,13 +12,15 @@ const ( type reachViewVersion struct { Version string `json:"version"` + Stable bool `json:"bool"` } // ReachViewVersion returns the ReachRS module ReachView version -func (c *Client) ReachViewVersion(ctx context.Context) (string, error) { +func (c *Client) ReachViewVersion(ctx context.Context) (string, bool, error) { res := &reachViewVersion{} if err := c.ReqResp(ctx, eventGetReachViewVersion, nil, eventReachViewVersionResults, res); err != nil { - return "", err + return "", false, err } - return res.Version, nil + + return strings.TrimSpace(res.Version), res.Stable, nil } diff --git a/emlid/updater/reachview_version_test.go b/emlid/common/reachview_version_test.go similarity index 85% rename from emlid/updater/reachview_version_test.go rename to emlid/common/reachview_version_test.go index 48008c0..a0c99be 100644 --- a/emlid/updater/reachview_version_test.go +++ b/emlid/common/reachview_version_test.go @@ -1,4 +1,4 @@ -package updater +package common import ( "context" @@ -10,7 +10,7 @@ import ( func TestClientReachViewVersion(t *testing.T) { - if !*runUpdaterIntegrationTests { + if !*runCommonIntegrationTests { t.Skip("To run this test, use: go test -updater-integration") } @@ -21,9 +21,11 @@ func TestClientReachViewVersion(t *testing.T) { if err := client.Connect(); err != nil { t.Fatal(err) } + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - version, err := client.ReachViewVersion(ctx) + + version, _, err := client.ReachViewVersion(ctx) if err != nil { t.Error(err) } diff --git a/emlid/common/util_test.go b/emlid/common/util_test.go new file mode 100644 index 0000000..f49117d --- /dev/null +++ b/emlid/common/util_test.go @@ -0,0 +1,13 @@ +package common + +import "flag" + +var runCommonIntegrationTests = flag.Bool( + "common-integration", false, + "Run the 'Common' integration tests (in addition to the unit tests)", +) + +var reachHost = flag.String( + "reach-host", "192.168.42.1", + "The Reach module host to use in integration tests", +) diff --git a/emlid/reachview/client.go b/emlid/reachview/client.go index 62a56cc..e3b22ba 100644 --- a/emlid/reachview/client.go +++ b/emlid/reachview/client.go @@ -1,14 +1,18 @@ package reachview -import "forge.cadoles.com/Pyxis/orion/emlid" +import ( + "forge.cadoles.com/Pyxis/orion/emlid" + "forge.cadoles.com/Pyxis/orion/emlid/common" +) // Client is a ReachRS Updater client type Client struct { - *emlid.Client + *common.Client } // NewClient returns a new ReachRS ReachView client func NewClient(opts ...emlid.OptionFunc) *Client { - client := emlid.NewClient(opts...) - return &Client{client} + return &Client{ + Client: common.NewClient(opts...), + } } diff --git a/emlid/reachview/configuration.go b/emlid/reachview/configuration.go index c554289..b713429 100644 --- a/emlid/reachview/configuration.go +++ b/emlid/reachview/configuration.go @@ -1,13 +1,19 @@ package reachview -import "context" +import ( + "context" + + "forge.cadoles.com/Pyxis/orion/emlid/common" + "github.com/pkg/errors" +) const ( - eventGetConfiguration = "get configuration" - eventCurrentConfiguration = "current configuration" - eventApplyConfiguration = "apply configuration" - eventConfigurationApplied = "configuration applied" - eventResetConfiguration = "reset configuration to default" + eventGetConfiguration = "get configuration" + eventCurrentConfiguration = "current configuration" + eventApplyConfiguration = "apply configuration" + eventConfigurationApplied = "configuration applied" + eventResetConfiguration = "reset configuration to default" + eventSettingsResetToDefault = "settings reset to default" ) // Configuration fetches and return the current configuration of the ReachRS module @@ -42,10 +48,32 @@ func (r *Client) ApplyConfiguration(ctx context.Context, config *Configuration) } // ResetConfiguration resets the module configuration to factory defaults -func (r *Client) ResetConfiguration(ctx context.Context) (string, *Configuration, error) { - res := &configurationApplied{} - if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventConfigurationApplied, res); err != nil { - return ConfigurationApplyFailed, nil, err +func (r *Client) ResetConfiguration(ctx context.Context) error { + err := r.HandleVersion( + ctx, + common.NewVersionHandler("< 2.24.0", func(ctx context.Context, version string, stable bool) error { + res := &configurationApplied{} + if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventConfigurationApplied, res); err != nil { + return errors.WithStack(err) + } + + if res.Result != ConfigurationApplySuccess { + return errors.New(res.Result) + } + + return nil + }), + common.NewVersionHandler(">= 2.24.0", func(ctx context.Context, version string, stable bool) error { + if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventSettingsResetToDefault, nil); err != nil { + return errors.WithStack(err) + } + + return nil + }), + ) + if err != nil { + return errors.WithStack(err) } - return res.Result, res.Configuration, nil + + return nil } diff --git a/emlid/reachview/configuration_model.go b/emlid/reachview/configuration_model.go index 82ea762..cd4ec42 100644 --- a/emlid/reachview/configuration_model.go +++ b/emlid/reachview/configuration_model.go @@ -80,7 +80,7 @@ type Configuration struct { // RTKSettings - type RTKSettings struct { GLONASSARMode *string `mapstructure:"glonass ar mode,omitempty" json:"glonass ar mode,omitempty"` - UpdateRate *string `mapstructure:"update rate,omitempty" json:"update rate,omitempty"` + UpdateRate *float64 `mapstructure:"update rate,omitempty" json:"update rate,omitempty"` ElevationMaskAngle *string `mapstructure:"elevation mask angle,omitempty" json:"elevation mask angle,omitempty"` MaxHorizontalAcceleration *string `mapstructure:"max horizontal acceleration,omitempty" json:"max horizontal acceleration,omitempty"` SNRMask *string `mapstructure:"snr mask,omitempty" json:"snr mask,omitempty"` diff --git a/emlid/updater/client.go b/emlid/updater/client.go index 1f0397f..cb84bb8 100644 --- a/emlid/updater/client.go +++ b/emlid/updater/client.go @@ -1,15 +1,18 @@ // Package updater provides an API to communicate with the ReachRS modules "Updater" application package updater -import "forge.cadoles.com/Pyxis/orion/emlid" +import ( + "forge.cadoles.com/Pyxis/orion/emlid" + "forge.cadoles.com/Pyxis/orion/emlid/common" +) // Client is a ReachRS Updater client type Client struct { - *emlid.Client + *common.Client } // NewClient returns a new ReachRS Updater client func NewClient(opts ...emlid.OptionFunc) *Client { - client := emlid.NewClient(opts...) + client := common.NewClient(opts...) return &Client{client} } diff --git a/go.mod b/go.mod index 46d2b42..bfd839f 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,22 @@ module forge.cadoles.com/Pyxis/orion +go 1.15 + require ( forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95 - github.com/caarlos0/env v3.4.0+incompatible + github.com/blang/semver/v4 v4.0.0 + github.com/caarlos0/env v3.5.0+incompatible github.com/cenkalti/backoff v2.0.0+incompatible // indirect github.com/davecgh/go-spew v1.1.1 github.com/go-chi/chi v3.3.3+incompatible - github.com/gorilla/websocket v1.4.0 // indirect + github.com/gorilla/websocket v1.4.2 // indirect github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1 github.com/miekg/dns v1.0.12 // indirect github.com/mitchellh/mapstructure v1.1.2 github.com/pkg/errors v0.8.0 github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/testify v1.2.2 // indirect - golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 // indirect - golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 // indirect + golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 // indirect golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect - golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e // indirect golang.org/x/text v0.3.0 // indirect ) diff --git a/go.sum b/go.sum index 63a97cb..85c9a54 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,13 @@ forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95 h1:o3G5+9RjczCK1xAYFaRMknk1kY9Ule6PNfiW6N6hEpg= forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95/go.mod h1:I6kYOFWNkFlNeQLI7ZqfTRz4NdPHZxX0Bzizmzgchs0= +github.com/blang/semver v1.1.0 h1:ol1rO7QQB5uy7umSNV7VAmLugfLRD+17sYJujRNYPhg= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/caarlos0/env v3.4.0+incompatible h1:FRwBdvENjLHZoUbFnULnFss9wKtcapdaM35DfxiTjeM= github.com/caarlos0/env v3.4.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y= +github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs= +github.com/caarlos0/env v3.5.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y= github.com/cenkalti/backoff v2.0.0+incompatible h1:5IIPUHhlnUZbcHQsQou5k1Tn58nJkeJL9U+ig5CHJbY= github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -10,6 +16,8 @@ github.com/go-chi/chi v3.3.3+incompatible h1:KHkmBEMNkwKuK4FdQL7N2wOeB9jnIx7jR5w github.com/go-chi/chi v3.3.3+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1 h1:VSELJSxQlpi1bz4ZwT+93hPpzNLRcgytLr77iVRJpcE= github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1/go.mod h1:YjKB0WsLXlMkO9p+wGTCoPIDGRJH0mz7E526PxkQVxI= github.com/miekg/dns v1.0.12 h1:814rTNaw7Q7pGncpSEDT06YS8rdGmpUEnKgpQzctJsk= @@ -24,11 +32,20 @@ github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 h1:Vk3wNqEZwyGyei9yq5ekj7frek2u7HUfffJ1/opblzc= golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 h1:phUcVbl53swtrUN8kQEXFhUxPlIlWyBfKmidCu7P95o= +golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 h1:czFLhve3vsQetD6JOJ8NZZvGQIXlnN3/yXxbT6/awxI= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e h1:EfdBzeKbFSvOjoIqSZcfS8wp0FBLokGBEs9lz1OtSg0= golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=