2ca9496c04
* chore: update the user-agent we use Part of the check-list at https://github.com/ooni/probe/issues/1369. * chore: set version to 3.9.0 See https://github.com/ooni/probe/issues/1369 * chore: run go generate ./... This is meant to update the bundled CA. We have heard of issues with our bundled CA, but it seems there have been no changes upstream. The website https://curl.se/docs/caextract.html still lists as the last change the one done on Jan 19, 2021, which is the version of the CA that we're currently bundling. For the sake of continuing with the release process, I am going to further investigate the CA once the release is done. This chore is part of https://github.com/ooni/probe/issues/1369.
223 lines
5.0 KiB
Go
223 lines
5.0 KiB
Go
// Code generated by go generate; DO NOT EDIT.
|
|
// 2021-03-31 16:50:04.580341787 +0200 CEST m=+0.000148802
|
|
|
|
package ooapi
|
|
|
|
//go:generate go run ./internal/generator -file caching_test.go
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/ooapi/apimodel"
|
|
)
|
|
|
|
func TestCachesimpleMeasurementMetaAPISuccess(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
var expect *apimodel.MeasurementMetaResponse
|
|
ff.fill(&expect)
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
API: &FakeMeasurementMetaAPI{
|
|
Response: expect,
|
|
},
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
ctx := context.Background()
|
|
resp, err := cache.Call(ctx, req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("expected non-nil response")
|
|
}
|
|
if diff := cmp.Diff(expect, resp); diff != "" {
|
|
t.Fatal(diff)
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPIWriteCacheError(t *testing.T) {
|
|
errMocked := errors.New("mocked error")
|
|
ff := &fakeFill{}
|
|
var expect *apimodel.MeasurementMetaResponse
|
|
ff.fill(&expect)
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
API: &FakeMeasurementMetaAPI{
|
|
Response: expect,
|
|
},
|
|
KVStore: &FakeKVStore{SetError: errMocked},
|
|
}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
ctx := context.Background()
|
|
resp, err := cache.Call(ctx, req)
|
|
if !errors.Is(err, errMocked) {
|
|
t.Fatal("not the error we expected", err)
|
|
}
|
|
if resp != nil {
|
|
t.Fatal("expected nil response")
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPIFailureWithNoCache(t *testing.T) {
|
|
errMocked := errors.New("mocked error")
|
|
ff := &fakeFill{}
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
API: &FakeMeasurementMetaAPI{
|
|
Err: errMocked,
|
|
},
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
ctx := context.Background()
|
|
resp, err := cache.Call(ctx, req)
|
|
if !errors.Is(err, errMocked) {
|
|
t.Fatal("not the error we expected", err)
|
|
}
|
|
if resp != nil {
|
|
t.Fatal("expected nil response")
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPIFailureWithPreviousCache(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
var expect *apimodel.MeasurementMetaResponse
|
|
ff.fill(&expect)
|
|
fakeapi := &FakeMeasurementMetaAPI{
|
|
Response: expect,
|
|
}
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
API: fakeapi,
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
ctx := context.Background()
|
|
// first pass with no error at all
|
|
// use a separate scope to be sure we avoid mistakes
|
|
{
|
|
resp, err := cache.Call(ctx, req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if resp == nil {
|
|
t.Fatal("expected non-nil response")
|
|
}
|
|
if diff := cmp.Diff(expect, resp); diff != "" {
|
|
t.Fatal(diff)
|
|
}
|
|
}
|
|
// second pass with failure
|
|
errMocked := errors.New("mocked error")
|
|
fakeapi.Err = errMocked
|
|
fakeapi.Response = nil
|
|
resp2, err := cache.Call(ctx, req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if resp2 == nil {
|
|
t.Fatal("expected non-nil response")
|
|
}
|
|
if diff := cmp.Diff(expect, resp2); diff != "" {
|
|
t.Fatal(diff)
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPISetcacheWithEncodeError(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
errMocked := errors.New("mocked error")
|
|
var in []cacheEntryForMeasurementMetaAPI
|
|
ff.fill(&in)
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
GobCodec: &FakeCodec{EncodeErr: errMocked},
|
|
}
|
|
err := cache.setcache(in)
|
|
if !errors.Is(err, errMocked) {
|
|
t.Fatal("not the error we expected", err)
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPIReadCacheNotFound(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
var incache []cacheEntryForMeasurementMetaAPI
|
|
ff.fill(&incache)
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
err := cache.setcache(incache)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
out, err := cache.readcache(req)
|
|
if !errors.Is(err, errCacheNotFound) {
|
|
t.Fatal("not the error we expected", err)
|
|
}
|
|
if out != nil {
|
|
t.Fatal("expected nil here")
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPIWriteCacheDuplicate(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
var resp1 *apimodel.MeasurementMetaResponse
|
|
ff.fill(&resp1)
|
|
var resp2 *apimodel.MeasurementMetaResponse
|
|
ff.fill(&resp2)
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
err := cache.writecache(req, resp1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = cache.writecache(req, resp2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
out, err := cache.readcache(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if out == nil {
|
|
t.Fatal("expected non-nil here")
|
|
}
|
|
if diff := cmp.Diff(resp2, out); diff != "" {
|
|
t.Fatal(diff)
|
|
}
|
|
}
|
|
|
|
func TestCachesimpleMeasurementMetaAPICacheSizeLimited(t *testing.T) {
|
|
ff := &fakeFill{}
|
|
cache := &withCacheMeasurementMetaAPI{
|
|
KVStore: &MemKVStore{},
|
|
}
|
|
var prev int
|
|
for {
|
|
var req *apimodel.MeasurementMetaRequest
|
|
ff.fill(&req)
|
|
var resp *apimodel.MeasurementMetaResponse
|
|
ff.fill(&resp)
|
|
err := cache.writecache(req, resp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
out, err := cache.getcache()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(out) > prev {
|
|
prev = len(out)
|
|
continue
|
|
}
|
|
break
|
|
}
|
|
}
|