From 0d9ff2b86b60015abbcd3c965405094f60ff3537 Mon Sep 17 00:00:00 2001 From: R S <4614260+raakasf@users.noreply.github.com> Date: Thu, 18 Feb 2021 21:10:50 -0500 Subject: [PATCH] Add unsupported type to Load (#27) * Added new test * Load in filter to return unsupported type error * Ignore vscode and html (coverage) files --- .gitignore | 2 ++ builder/aggregation/aggregation.go | 3 +++ builder/aggregation/aggregation_test.go | 17 +++++++++++++++ builder/bound/bound.go | 3 +++ builder/bound/bound_test.go | 17 +++++++++++++++ builder/datasource/data_source.go | 3 +++ builder/datasource/data_source_test.go | 17 +++++++++++++++ builder/dimension/dimension.go | 3 +++ builder/dimension/dimension_test.go | 17 +++++++++++++++ builder/extractionfn/extraction_fn.go | 3 +++ builder/extractionfn/extraction_fn_test.go | 17 +++++++++++++++ builder/filter/filter.go | 3 +++ builder/filter/filter_test.go | 17 +++++++++++++++ builder/granularity/granularity_test.go | 17 +++++++++++++++ builder/havingspec/having_spec.go | 3 +++ builder/havingspec/having_spec_test.go | 17 +++++++++++++++ builder/intervals/intervals.go | 4 ++++ builder/intervals/intervals_test.go | 17 +++++++++++++++ builder/limitspec/limit_spec.go | 3 +++ builder/limitspec/limit_spec_test.go | 17 +++++++++++++++ builder/lookup/lookup.go | 3 +++ builder/lookup/lookup_test.go | 17 +++++++++++++++ builder/postaggregation/post_aggregator.go | 3 +++ .../postaggregation/post_aggregator_test.go | 17 +++++++++++++++ builder/searchqueryspec/search_query_spec.go | 3 +++ .../searchqueryspec/search_query_spec_test.go | 17 +++++++++++++++ builder/toinclude/to_include.go | 3 +++ builder/toinclude/to_include_test.go | 17 +++++++++++++++ builder/topnmetric/top_n_metric.go | 3 +++ builder/topnmetric/top_n_metric_test.go | 17 +++++++++++++++ builder/virtualcolumn/virtual_column.go | 3 +++ builder/virtualcolumn/virtual_column_test.go | 17 +++++++++++++++ druid_test.go | 21 +++++++++++++++++++ go.mod | 2 ++ go.sum | 16 ++++++++++++++ 35 files changed, 359 insertions(+) create mode 100644 builder/aggregation/aggregation_test.go create mode 100644 builder/bound/bound_test.go create mode 100644 builder/datasource/data_source_test.go create mode 100644 builder/dimension/dimension_test.go create mode 100644 builder/extractionfn/extraction_fn_test.go create mode 100644 builder/filter/filter_test.go create mode 100644 builder/granularity/granularity_test.go create mode 100644 builder/havingspec/having_spec_test.go create mode 100644 builder/intervals/intervals_test.go create mode 100644 builder/limitspec/limit_spec_test.go create mode 100644 builder/lookup/lookup_test.go create mode 100644 builder/postaggregation/post_aggregator_test.go create mode 100644 builder/searchqueryspec/search_query_spec_test.go create mode 100644 builder/toinclude/to_include_test.go create mode 100644 builder/topnmetric/top_n_metric_test.go create mode 100644 builder/virtualcolumn/virtual_column_test.go create mode 100644 druid_test.go diff --git a/.gitignore b/.gitignore index 66fd13c..c5601b6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ *.dll *.so *.dylib +*.html +.vscode/* # Test binary, built with `go test -c` *.test diff --git a/builder/aggregation/aggregation.go b/builder/aggregation/aggregation.go index db8fb2e..94e229a 100644 --- a/builder/aggregation/aggregation.go +++ b/builder/aggregation/aggregation.go @@ -2,6 +2,7 @@ package aggregation import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -94,6 +95,8 @@ func Load(data []byte) (builder.Aggregator, error) { a = NewStringLastFolding() case "stringLast": a = NewStringLast() + default: + return nil, errors.New("unsupported type") } return a, json.Unmarshal(data, &a) } diff --git a/builder/aggregation/aggregation_test.go b/builder/aggregation/aggregation_test.go new file mode 100644 index 0000000..e7bf6d8 --- /dev/null +++ b/builder/aggregation/aggregation_test.go @@ -0,0 +1,17 @@ +package aggregation + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/bound/bound.go b/builder/bound/bound.go index f6196fc..2af6ab6 100644 --- a/builder/bound/bound.go +++ b/builder/bound/bound.go @@ -2,6 +2,7 @@ package bound import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -34,6 +35,8 @@ func Load(data []byte) (builder.Aggregator, error) { b = NewRadius() case "rectangular": b = NewRectangular() + default: + return nil, errors.New("unsupported type") } return b, json.Unmarshal(data, &b) } diff --git a/builder/bound/bound_test.go b/builder/bound/bound_test.go new file mode 100644 index 0000000..9b863d2 --- /dev/null +++ b/builder/bound/bound_test.go @@ -0,0 +1,17 @@ +package bound + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/datasource/data_source.go b/builder/datasource/data_source.go index 3a49bd0..6b90099 100644 --- a/builder/datasource/data_source.go +++ b/builder/datasource/data_source.go @@ -2,6 +2,7 @@ package datasource import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -42,6 +43,8 @@ func Load(data []byte) (builder.DataSource, error) { d = NewTable() case "union": d = NewUnion() + default: + return nil, errors.New("unsupported type") } return d, json.Unmarshal(data, &d) } diff --git a/builder/datasource/data_source_test.go b/builder/datasource/data_source_test.go new file mode 100644 index 0000000..6c7f835 --- /dev/null +++ b/builder/datasource/data_source_test.go @@ -0,0 +1,17 @@ +package datasource + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/dimension/dimension.go b/builder/dimension/dimension.go index 49e0efa..08ea046 100644 --- a/builder/dimension/dimension.go +++ b/builder/dimension/dimension.go @@ -2,6 +2,7 @@ package dimension import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" "github.com/grafadruid/go-druid/builder/types" @@ -59,6 +60,8 @@ func Load(data []byte) (builder.Dimension, error) { d = NewPrefixFiltered() case "regexFiltered": d = NewRegexFiltered() + default: + return nil, errors.New("unsupported type") } return d, json.Unmarshal(data, &d) } diff --git a/builder/dimension/dimension_test.go b/builder/dimension/dimension_test.go new file mode 100644 index 0000000..8d1cb16 --- /dev/null +++ b/builder/dimension/dimension_test.go @@ -0,0 +1,17 @@ +package dimension + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/extractionfn/extraction_fn.go b/builder/extractionfn/extraction_fn.go index 06c6886..9868ca9 100644 --- a/builder/extractionfn/extraction_fn.go +++ b/builder/extractionfn/extraction_fn.go @@ -2,6 +2,7 @@ package extractionfn import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -58,6 +59,8 @@ func Load(data []byte) (builder.ExtractionFn, error) { e = NewTimeFormat() case "upper": e = NewUpper() + default: + return nil, errors.New("unsupported type") } return e, json.Unmarshal(data, &e) } diff --git a/builder/extractionfn/extraction_fn_test.go b/builder/extractionfn/extraction_fn_test.go new file mode 100644 index 0000000..37e0bbc --- /dev/null +++ b/builder/extractionfn/extraction_fn_test.go @@ -0,0 +1,17 @@ +package extractionfn + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/filter/filter.go b/builder/filter/filter.go index a89ea9f..5006377 100644 --- a/builder/filter/filter.go +++ b/builder/filter/filter.go @@ -2,6 +2,7 @@ package filter import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -64,6 +65,8 @@ func Load(data []byte) (builder.Filter, error) { f = NewSpatial() case "true": f = NewTrue() + default: + return nil, errors.New("unsupported type") } return f, json.Unmarshal(data, &f) } diff --git a/builder/filter/filter_test.go b/builder/filter/filter_test.go new file mode 100644 index 0000000..bf6598c --- /dev/null +++ b/builder/filter/filter_test.go @@ -0,0 +1,17 @@ +package filter + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/granularity/granularity_test.go b/builder/granularity/granularity_test.go new file mode 100644 index 0000000..511c3b7 --- /dev/null +++ b/builder/granularity/granularity_test.go @@ -0,0 +1,17 @@ +package granularity + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/havingspec/having_spec.go b/builder/havingspec/having_spec.go index c605bb4..bf4f509 100644 --- a/builder/havingspec/having_spec.go +++ b/builder/havingspec/having_spec.go @@ -2,6 +2,7 @@ package havingspec import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -46,6 +47,8 @@ func Load(data []byte) (builder.Dimension, error) { d = NewNot() case "or": d = NewOr() + default: + return nil, errors.New("unsupported type") } return d, json.Unmarshal(data, &d) } diff --git a/builder/havingspec/having_spec_test.go b/builder/havingspec/having_spec_test.go new file mode 100644 index 0000000..0df0ffe --- /dev/null +++ b/builder/havingspec/having_spec_test.go @@ -0,0 +1,17 @@ +package havingspec + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/intervals/intervals.go b/builder/intervals/intervals.go index 8122164..6453aca 100644 --- a/builder/intervals/intervals.go +++ b/builder/intervals/intervals.go @@ -2,6 +2,8 @@ package intervals import ( "encoding/json" + "errors" + "github.com/grafadruid/go-druid/builder" ) @@ -29,6 +31,8 @@ func Load(data []byte) (builder.Intervals, error) { switch t.Typ { case "intervals": i = NewIntervals() + default: + return nil, errors.New("unsupported type") } return i, json.Unmarshal(data, &i) } diff --git a/builder/intervals/intervals_test.go b/builder/intervals/intervals_test.go new file mode 100644 index 0000000..623530e --- /dev/null +++ b/builder/intervals/intervals_test.go @@ -0,0 +1,17 @@ +package intervals + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/limitspec/limit_spec.go b/builder/limitspec/limit_spec.go index 53a4cbd..e62e18f 100644 --- a/builder/limitspec/limit_spec.go +++ b/builder/limitspec/limit_spec.go @@ -2,6 +2,7 @@ package limitspec import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -30,6 +31,8 @@ func Load(data []byte) (builder.Dimension, error) { switch t.Typ { case "default": d = NewDefault() + default: + return nil, errors.New("unsupported type") } return d, json.Unmarshal(data, &d) } diff --git a/builder/limitspec/limit_spec_test.go b/builder/limitspec/limit_spec_test.go new file mode 100644 index 0000000..0037861 --- /dev/null +++ b/builder/limitspec/limit_spec_test.go @@ -0,0 +1,17 @@ +package limitspec + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/lookup/lookup.go b/builder/lookup/lookup.go index 9fdcf3b..eed9fcc 100644 --- a/builder/lookup/lookup.go +++ b/builder/lookup/lookup.go @@ -2,6 +2,7 @@ package lookup import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -30,6 +31,8 @@ func Load(data []byte) (builder.LookupExtractor, error) { switch t.Typ { case "map": l = NewMap() + default: + return nil, errors.New("unsupported type") } return l, json.Unmarshal(data, &l) } diff --git a/builder/lookup/lookup_test.go b/builder/lookup/lookup_test.go new file mode 100644 index 0000000..5ad9365 --- /dev/null +++ b/builder/lookup/lookup_test.go @@ -0,0 +1,17 @@ +package lookup + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/postaggregation/post_aggregator.go b/builder/postaggregation/post_aggregator.go index 8aec5fc..885c1ac 100644 --- a/builder/postaggregation/post_aggregator.go +++ b/builder/postaggregation/post_aggregator.go @@ -2,6 +2,7 @@ package postaggregation import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -56,6 +57,8 @@ func Load(data []byte) (builder.PostAggregator, error) { p = NewLongGreatest() case "longLeast": p = NewLongLeast() + default: + return nil, errors.New("unsupported type") } return p, json.Unmarshal(data, &p) } diff --git a/builder/postaggregation/post_aggregator_test.go b/builder/postaggregation/post_aggregator_test.go new file mode 100644 index 0000000..aab4d29 --- /dev/null +++ b/builder/postaggregation/post_aggregator_test.go @@ -0,0 +1,17 @@ +package postaggregation + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/searchqueryspec/search_query_spec.go b/builder/searchqueryspec/search_query_spec.go index dd3a618..45692f3 100644 --- a/builder/searchqueryspec/search_query_spec.go +++ b/builder/searchqueryspec/search_query_spec.go @@ -2,6 +2,7 @@ package searchqueryspec import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -38,6 +39,8 @@ func Load(data []byte) (builder.SearchQuerySpec, error) { s = NewInsensitiveContains() case "regex": s = NewRegex() + default: + return nil, errors.New("unsupported type") } return s, json.Unmarshal(data, &s) } diff --git a/builder/searchqueryspec/search_query_spec_test.go b/builder/searchqueryspec/search_query_spec_test.go new file mode 100644 index 0000000..438f378 --- /dev/null +++ b/builder/searchqueryspec/search_query_spec_test.go @@ -0,0 +1,17 @@ +package searchqueryspec + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/toinclude/to_include.go b/builder/toinclude/to_include.go index 7edefa5..e662532 100644 --- a/builder/toinclude/to_include.go +++ b/builder/toinclude/to_include.go @@ -2,6 +2,7 @@ package toinclude import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -34,6 +35,8 @@ func Load(data []byte) (builder.ToInclude, error) { ti = NewList() case "none": ti = NewNone() + default: + return nil, errors.New("unsupported type") } return ti, json.Unmarshal(data, &ti) } diff --git a/builder/toinclude/to_include_test.go b/builder/toinclude/to_include_test.go new file mode 100644 index 0000000..5bf5139 --- /dev/null +++ b/builder/toinclude/to_include_test.go @@ -0,0 +1,17 @@ +package toinclude + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/topnmetric/top_n_metric.go b/builder/topnmetric/top_n_metric.go index 3d8fe01..672158f 100644 --- a/builder/topnmetric/top_n_metric.go +++ b/builder/topnmetric/top_n_metric.go @@ -2,6 +2,7 @@ package topnmetric import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -38,6 +39,8 @@ func Load(data []byte) (builder.TopNMetric, error) { tnm = NewLexicographic() case "numeric": tnm = NewNumeric() + default: + return nil, errors.New("unsupported type") } return tnm, json.Unmarshal(data, &tnm) } diff --git a/builder/topnmetric/top_n_metric_test.go b/builder/topnmetric/top_n_metric_test.go new file mode 100644 index 0000000..350f79a --- /dev/null +++ b/builder/topnmetric/top_n_metric_test.go @@ -0,0 +1,17 @@ +package topnmetric + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/builder/virtualcolumn/virtual_column.go b/builder/virtualcolumn/virtual_column.go index 7a65c57..a2ff3e9 100644 --- a/builder/virtualcolumn/virtual_column.go +++ b/builder/virtualcolumn/virtual_column.go @@ -2,6 +2,7 @@ package virtualcolumn import ( "encoding/json" + "errors" "github.com/grafadruid/go-druid/builder" ) @@ -30,6 +31,8 @@ func Load(data []byte) (builder.Dimension, error) { switch t.Typ { case "expression": d = NewExpression() + default: + return nil, errors.New("unsupported type") } return d, json.Unmarshal(data, &d) } diff --git a/builder/virtualcolumn/virtual_column_test.go b/builder/virtualcolumn/virtual_column_test.go new file mode 100644 index 0000000..83957e9 --- /dev/null +++ b/builder/virtualcolumn/virtual_column_test.go @@ -0,0 +1,17 @@ +package virtualcolumn + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadUnsupportedType(t *testing.T) { + assert := assert.New(t) + + f, err := Load([]byte("{\"type\": \"blahblahType\"}")) + + assert.Nil(f, "filter should be nil") + assert.NotNil(err, "error should not be nil") + assert.Error(err, "unsupported type") +} diff --git a/druid_test.go b/druid_test.go new file mode 100644 index 0000000..ba712d3 --- /dev/null +++ b/druid_test.go @@ -0,0 +1,21 @@ +package druid + +import ( + "net/url" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSetBaseURLWithSuffix(t *testing.T) { + assert := assert.New(t) + + d, err := NewClient("localhost:8082") + assert.Nil(err, "error should be nil") + assert.NotNil(d, "client should not be nil") + + wantBaseURL, _ := url.ParseRequestURI("/") + err = d.setBaseURL("") + assert.Nil(err, "error should be nil") + assert.Equal(d.baseURL, wantBaseURL, "they should not be equal") +} diff --git a/go.mod b/go.mod index 7d19319..bc8c685 100644 --- a/go.mod +++ b/go.mod @@ -6,4 +6,6 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/google/go-querystring v1.0.0 github.com/hashicorp/go-retryablehttp v0.6.7 + github.com/stretchr/testify v1.2.2 + golang.org/x/tools v0.1.0 // indirect ) diff --git a/go.sum b/go.sum index 43174aa..2464bab 100644 --- a/go.sum +++ b/go.sum @@ -28,25 +28,41 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=