Skip to content

Commit

Permalink
Fork ooni/netx/x/{logger,porcelain}
Browse files Browse the repository at this point in the history
These are two experimental packages that are too bound to this repo
to be kept into the other repo.

So, for them here. This is yak shaving for #2 because we want to add
functionality to perform TCPConnect like tests.

I didn't want to ping-pong the implementation of that, so I decided
the time was come to have our own porcelain and logger.
  • Loading branch information
bassosimone committed Jan 8, 2020
1 parent 58017c8 commit e326538
Show file tree
Hide file tree
Showing 11 changed files with 945 additions and 54 deletions.
6 changes: 3 additions & 3 deletions experiment/oodatamodel/oodatamodel.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"strconv"
"unicode/utf8"

"github.com/ooni/netx/x/porcelain"
"github.com/ooni/probe-engine/internal/oonitemplates"
)

// TCPConnectStatus contains the TCP connect status.
Expand All @@ -30,7 +30,7 @@ type TCPConnectEntry struct {
type TCPConnectList []TCPConnectEntry

// NewTCPConnectList creates a new TCPConnectList
func NewTCPConnectList(results porcelain.Results) TCPConnectList {
func NewTCPConnectList(results oonitemplates.Results) TCPConnectList {
var out TCPConnectList
for _, connect := range results.Connects {
// We assume Go is passing us legit data structs
Expand Down Expand Up @@ -174,7 +174,7 @@ func addheaders(
}

// NewRequestList returns the list for "requests"
func NewRequestList(httpresults *porcelain.HTTPDoResults) RequestList {
func NewRequestList(httpresults *oonitemplates.HTTPDoResults) RequestList {
var out RequestList
if httpresults == nil {
return out
Expand Down
20 changes: 10 additions & 10 deletions experiment/oodatamodel/oodatamodel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ import (
"testing"

"github.com/ooni/netx/modelx"
"github.com/ooni/netx/x/porcelain"
"github.com/ooni/probe-engine/experiment/oodatamodel"
"github.com/ooni/probe-engine/internal/oonitemplates"
)

func TestUnitNewTCPConnectListEmpty(t *testing.T) {
out := oodatamodel.NewTCPConnectList(porcelain.Results{})
out := oodatamodel.NewTCPConnectList(oonitemplates.Results{})
if len(out) != 0 {
t.Fatal("unexpected output length")
}
}

func TestUnitNewTCPConnectListSuccess(t *testing.T) {
out := oodatamodel.NewTCPConnectList(porcelain.Results{
out := oodatamodel.NewTCPConnectList(oonitemplates.Results{
Connects: []*modelx.ConnectEvent{
&modelx.ConnectEvent{
RemoteAddress: "8.8.8.8:53",
Expand Down Expand Up @@ -60,7 +60,7 @@ func TestUnitNewTCPConnectListSuccess(t *testing.T) {
}

func TestUnitNewTCPConnectListFailure(t *testing.T) {
out := oodatamodel.NewTCPConnectList(porcelain.Results{
out := oodatamodel.NewTCPConnectList(oonitemplates.Results{
Connects: []*modelx.ConnectEvent{
&modelx.ConnectEvent{
RemoteAddress: "8.8.8.8:53",
Expand All @@ -86,7 +86,7 @@ func TestUnitNewTCPConnectListFailure(t *testing.T) {
}

func TestUnitNewTCPConnectListInvalidInput(t *testing.T) {
out := oodatamodel.NewTCPConnectList(porcelain.Results{
out := oodatamodel.NewTCPConnectList(oonitemplates.Results{
Connects: []*modelx.ConnectEvent{
&modelx.ConnectEvent{
RemoteAddress: "8.8.8.8",
Expand Down Expand Up @@ -119,15 +119,15 @@ func TestUnitNewRequestsListNil(t *testing.T) {
}

func TestUnitNewRequestsListEmptyList(t *testing.T) {
out := oodatamodel.NewRequestList(&porcelain.HTTPDoResults{})
out := oodatamodel.NewRequestList(&oonitemplates.HTTPDoResults{})
if len(out) != 0 {
t.Fatal("unexpected output length")
}
}

func TestUnitNewRequestsListGood(t *testing.T) {
out := oodatamodel.NewRequestList(&porcelain.HTTPDoResults{
TestKeys: porcelain.Results{
out := oodatamodel.NewRequestList(&oonitemplates.HTTPDoResults{
TestKeys: oonitemplates.Results{
HTTPRequests: []*modelx.HTTPRoundTripDoneEvent{
// need two requests to test that order is inverted
&modelx.HTTPRoundTripDoneEvent{
Expand Down Expand Up @@ -333,8 +333,8 @@ func TestUnitNewRequestsListGood(t *testing.T) {
}

func TestUnitNewRequestsSnaps(t *testing.T) {
out := oodatamodel.NewRequestList(&porcelain.HTTPDoResults{
TestKeys: porcelain.Results{
out := oodatamodel.NewRequestList(&oonitemplates.HTTPDoResults{
TestKeys: oonitemplates.Results{
HTTPRequests: []*modelx.HTTPRoundTripDoneEvent{
&modelx.HTTPRoundTripDoneEvent{
RequestBodySnap: []byte("abcd"),
Expand Down
6 changes: 3 additions & 3 deletions experiment/psiphon/psiphon.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ import (
"time"

"github.com/Psiphon-Labs/psiphon-tunnel-core/ClientLibrary/clientlib"
netxlogger "github.com/ooni/netx/x/logger"
"github.com/ooni/netx/x/porcelain"
"github.com/ooni/probe-engine/experiment"
"github.com/ooni/probe-engine/experiment/handler"
"github.com/ooni/probe-engine/experiment/httpheader"
"github.com/ooni/probe-engine/experiment/oodatamodel"
"github.com/ooni/probe-engine/internal/netxlogger"
"github.com/ooni/probe-engine/internal/oonitemplates"
"github.com/ooni/probe-engine/log"
"github.com/ooni/probe-engine/model"
"github.com/ooni/probe-engine/session"
Expand Down Expand Up @@ -112,7 +112,7 @@ func (r *runner) usetunnel(
) error {
r.testkeys.Agent = "redirect"
r.testkeys.SOCKSProxy = fmt.Sprintf("127.0.0.1:%d", port)
results := porcelain.HTTPDo(ctx, porcelain.HTTPDoConfig{
results := oonitemplates.HTTPDo(ctx, oonitemplates.HTTPDoConfig{
Accept: httpheader.RandomAccept(),
AcceptLanguage: httpheader.RandomAcceptLanguage(),
Handler: netxlogger.NewHandler(logger),
Expand Down
8 changes: 4 additions & 4 deletions experiment/telegram/telegram.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ import (
"sync/atomic"
"time"

netxlogger "github.com/ooni/netx/x/logger"
"github.com/ooni/netx/x/porcelain"
"github.com/ooni/probe-engine/experiment"
"github.com/ooni/probe-engine/experiment/handler"
"github.com/ooni/probe-engine/experiment/httpheader"
"github.com/ooni/probe-engine/experiment/oodatamodel"
"github.com/ooni/probe-engine/internal/netxlogger"
"github.com/ooni/probe-engine/internal/oonitemplates"
"github.com/ooni/probe-engine/model"
"github.com/ooni/probe-engine/session"
)
Expand All @@ -44,7 +44,7 @@ type TestKeys struct {

type urlMeasurements struct {
method string
results *porcelain.HTTPDoResults
results *oonitemplates.HTTPDoResults
}

func newTestKeys() *TestKeys {
Expand Down Expand Up @@ -179,7 +179,7 @@ func (m *measurer) measure(
}
// No races because each goroutine writes its entry
entry := urlmeasurements[key]
entry.results = porcelain.HTTPDo(ctx, porcelain.HTTPDoConfig{
entry.results = oonitemplates.HTTPDo(ctx, oonitemplates.HTTPDoConfig{
Accept: httpheader.RandomAccept(),
AcceptLanguage: httpheader.RandomAcceptLanguage(),
Handler: netxlogger.NewHandler(sess.Logger),
Expand Down
28 changes: 14 additions & 14 deletions experiment/telegram/telegram_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/apex/log"
"github.com/ooni/netx/modelx"
"github.com/ooni/netx/x/porcelain"
"github.com/ooni/probe-engine/internal/oonitemplates"
"github.com/ooni/probe-engine/experiment/handler"
"github.com/ooni/probe-engine/internal/kvstore"
"github.com/ooni/probe-engine/model"
Expand Down Expand Up @@ -83,13 +83,13 @@ func TestUnitProcessallWithNoAccessPointsBlocking(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://149.154.175.50/": &urlMeasurements{
method: "POST",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: errors.New("mocked error"),
},
},
"http://149.154.175.50:443/": &urlMeasurements{
method: "POST",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: nil, // this should be enough to declare success
},
},
Expand All @@ -110,15 +110,15 @@ func TestUnitProcessallWithTelegramHTTPBlocking(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://149.154.175.50/": &urlMeasurements{
method: "POST",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: errors.New("mocked error"),
},
},
"http://149.154.175.50:443/": &urlMeasurements{
method: "POST",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: errors.New("mocked error"),
TestKeys: porcelain.Results{
TestKeys: oonitemplates.Results{
Connects: []*modelx.ConnectEvent{
&modelx.ConnectEvent{
Error: nil, // enough to declare we can TCP connect
Expand All @@ -144,13 +144,13 @@ func TestUnitProcessallWithMixedResults(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: errors.New("mocked error"),
},
},
"https://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
BodySnap: []byte(`<title>Telegram Web</title>`),
Error: nil,
StatusCode: 200,
Expand All @@ -175,13 +175,13 @@ func TestUnitProcessallWithBadRequest(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
StatusCode: 400,
},
},
"https://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
Error: nil,
},
},
Expand All @@ -202,14 +202,14 @@ func TestUnitProcessallWithMissingTitle(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
StatusCode: 200,
BodySnap: []byte("<HTML><title>Telegram Web</title></HTML>"),
},
},
"https://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
StatusCode: 200,
BodySnap: []byte("<HTML><TITLE>Antani Web</TITLE></HTML>"),
},
Expand All @@ -231,14 +231,14 @@ func TestUnitProcessallWithAllGood(t *testing.T) {
err := tk.processall(map[string]*urlMeasurements{
"http://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
StatusCode: 200,
BodySnap: []byte("<HTML><title>Telegram Web</title></HTML>"),
},
},
"https://web.telegram.org/": &urlMeasurements{
method: "GET",
results: &porcelain.HTTPDoResults{
results: &oonitemplates.HTTPDoResults{
StatusCode: 200,
BodySnap: []byte("<HTML><title>Telegram Web</title></HTML>"),
},
Expand Down
5 changes: 1 addition & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ require (
github.com/marusama/semaphore v0.0.0-20190110074507-6952cef993b2 // indirect
github.com/montanaflynn/stats v0.5.0
github.com/neubot/dash v0.4.1
github.com/ooni/netx v0.0.0-20191203103428-8b6135339b03
github.com/ooni/netx v0.0.0-20200108142619-570799475703
github.com/oschwald/geoip2-golang v1.3.0
github.com/oschwald/maxminddb-golang v1.5.0 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
Expand All @@ -58,7 +58,4 @@ require (
go.uber.org/atomic v1.4.0 // indirect
go.uber.org/multierr v1.1.1-0.20180122172545-ddea229ff1df // indirect
go.uber.org/zap v1.10.0 // indirect
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e // indirect
golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a // indirect
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e // indirect
)
30 changes: 14 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/m-lab/go v1.1.0 h1:BB1llaNFa2CbrqmDpRhwFGQCY726PtpqxlZykJrRN3Q=
github.com/m-lab/go v1.1.0/go.mod h1:FcVx/N8dL5J5TVQ2L0d8/cAw/ljR6fhwZqvqZHrb5/Q=
github.com/m-lab/go v1.2.0 h1:tIYz23bGCuw1AH7wl5h+vAJ5VV1aXgo9Zbl+Evkdp/o=
github.com/m-lab/go v1.2.0/go.mod h1:FcVx/N8dL5J5TVQ2L0d8/cAw/ljR6fhwZqvqZHrb5/Q=
github.com/m-lab/ndt-server v0.13.2 h1:ISasCjeOXaKcHjRo//Q2A2THbwoC2Pp01d8a2OnPC6Y=
Expand All @@ -170,8 +168,8 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/miekg/dns v1.1.22 h1:Jm64b3bO9kP43ddLjL2EY3Io6bmy1qGb9Xxz6TqS6rc=
github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM=
github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
Expand All @@ -189,8 +187,8 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/ooni/netx v0.0.0-20191203103428-8b6135339b03 h1:G7Kk94JHUl886/akWFzm+cVcsIpLObl6M5BzvEYHGJE=
github.com/ooni/netx v0.0.0-20191203103428-8b6135339b03/go.mod h1:Ul7M/NVAb43VWXmupSyMvs+ynxACIaZr05eY8CtDUO4=
github.com/ooni/netx v0.0.0-20200108142619-570799475703 h1:39Q2UKIYNzcVMmKC/5u65eZ+z4anfieOGz0JZXItsvA=
github.com/ooni/netx v0.0.0-20200108142619-570799475703/go.mod h1:vTJ7nYH2j51lX8yvhdLaHscvwz1GvWoiB26jYKEmqyA=
github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc=
github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw=
github.com/oschwald/geoip2-golang v1.3.0 h1:D+Hsdos1NARPbzZ2aInUHZL+dApIzo8E0ErJVsWcku8=
Expand Down Expand Up @@ -292,11 +290,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90Pveol
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e h1:egKlR8l7Nu9vHGWbcUV8lqR4987UfUbBd7GbhqGzNYU=
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876 h1:sKJQZMuxjOAR/Uo2LBfU90onWEf1dF4C+0hPJCc9Mpc=
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
Expand All @@ -306,8 +304,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a h1:+HHJiFUXVOIS9mr1ThqkQD1N8vpFCfCShqADBM12KTc=
golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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=
Expand All @@ -327,11 +325,10 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190614160838-b47fdc937951/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe h1:6fAMxZRR6sl1Uq8U61gxU+kPTs2tR8uOySCbBP7BN/M=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200107162124-548cf772de50 h1:YvQ10rzcqWXLlJZ3XCUoO25savxmscf4+SC+ZqiCHhA=
golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
Expand All @@ -341,10 +338,11 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89 h1:WiVZGyzQN7gPNLRkkpsNX3jC0Jx5j9GxadCZW/8eXw0=
golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
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=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
Expand Down

0 comments on commit e326538

Please sign in to comment.