306d18e466
Here's the squash of the following patches that enable support
for go1.18 and update our dependencies.
This diff WILL need to be backported to the release/3.14 branch.
* chore: use go1.17.8
See https://github.com/ooni/probe/issues/2067
* chore: upgrade to probe-assets@v0.8.0
See https://github.com/ooni/probe/issues/2067.
* chore: update dependencies and enable go1.18
As mentioned in 7a0d17ea91
,
the tree won't build with `go1.18` unless we say it does.
So, not only here we need to update dependencies but also we
need to explicitly say `go1.18` in the `go.mod`.
This work is part of https://github.com/ooni/probe/issues/2067.
* chore(coverage.yml): run with go1.18
This change will give us a bare minimum confidence that we're
going to build our tree using version 1.18 of golang.
See https://github.com/ooni/probe/issues/2067.
* chore: update user agent used for measuring
See https://github.com/ooni/probe/issues/2067
* chore: run `go generate ./...`
See https://github.com/ooni/probe/issues/2067
* fix(dialer_test.go): make test work with go1.17 and go1.18
1. the original test wanted the dial to fail, so ensure we're not
passing any domain name to exercise dialing not resolving;
2. match the end of the error rather than the whole error string.
Tested locally with both go1.17 and go1.18.
See https://github.com/ooni/probe-cli/pull/708#issuecomment-1096447186
99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
// Code generated by go generate; DO NOT EDIT.
|
|
// 2022-04-12 11:16:00.345318 +0200 CEST m=+0.000199501
|
|
|
|
package ooapi
|
|
|
|
//go:generate go run ./internal/generator -file caching.go
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/ooapi/apimodel"
|
|
)
|
|
|
|
// withCacheMeasurementMetaAPI implements caching for simpleMeasurementMetaAPI.
|
|
type withCacheMeasurementMetaAPI struct {
|
|
API callerForMeasurementMetaAPI // mandatory
|
|
GobCodec GobCodec // optional
|
|
KVStore KVStore // mandatory
|
|
}
|
|
|
|
type cacheEntryForMeasurementMetaAPI struct {
|
|
Req *apimodel.MeasurementMetaRequest
|
|
Resp *apimodel.MeasurementMetaResponse
|
|
}
|
|
|
|
// Call calls the API and implements caching.
|
|
func (c *withCacheMeasurementMetaAPI) Call(ctx context.Context, req *apimodel.MeasurementMetaRequest) (*apimodel.MeasurementMetaResponse, error) {
|
|
if resp, _ := c.readcache(req); resp != nil {
|
|
return resp, nil
|
|
}
|
|
resp, err := c.API.Call(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := c.writecache(req, resp); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (c *withCacheMeasurementMetaAPI) gobCodec() GobCodec {
|
|
if c.GobCodec != nil {
|
|
return c.GobCodec
|
|
}
|
|
return &defaultGobCodec{}
|
|
}
|
|
|
|
func (c *withCacheMeasurementMetaAPI) getcache() ([]cacheEntryForMeasurementMetaAPI, error) {
|
|
data, err := c.KVStore.Get("MeasurementMeta.cache")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var out []cacheEntryForMeasurementMetaAPI
|
|
if err := c.gobCodec().Decode(data, &out); err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (c *withCacheMeasurementMetaAPI) setcache(in []cacheEntryForMeasurementMetaAPI) error {
|
|
data, err := c.gobCodec().Encode(in)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return c.KVStore.Set("MeasurementMeta.cache", data)
|
|
}
|
|
|
|
func (c *withCacheMeasurementMetaAPI) readcache(req *apimodel.MeasurementMetaRequest) (*apimodel.MeasurementMetaResponse, error) {
|
|
cache, err := c.getcache()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, cur := range cache {
|
|
if reflect.DeepEqual(req, cur.Req) {
|
|
return cur.Resp, nil
|
|
}
|
|
}
|
|
return nil, errCacheNotFound
|
|
}
|
|
|
|
func (c *withCacheMeasurementMetaAPI) writecache(req *apimodel.MeasurementMetaRequest, resp *apimodel.MeasurementMetaResponse) error {
|
|
cache, _ := c.getcache()
|
|
out := []cacheEntryForMeasurementMetaAPI{{Req: req, Resp: resp}}
|
|
const toomany = 64
|
|
for idx, cur := range cache {
|
|
if reflect.DeepEqual(req, cur.Req) {
|
|
continue // we already updated the cache
|
|
}
|
|
if idx > toomany {
|
|
break
|
|
}
|
|
out = append(out, cur)
|
|
}
|
|
return c.setcache(out)
|
|
}
|
|
|
|
var _ callerForMeasurementMetaAPI = &withCacheMeasurementMetaAPI{}
|