1package probeservices_test 2 3import ( 4 "context" 5 "net/http" 6 "testing" 7 8 "github.com/ooni/probe-cli/v3/internal/engine/probeservices" 9 "github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra" 10) 11 12func TestFetchTorTargets(t *testing.T) { 13 clnt := newclient() 14 if err := clnt.MaybeRegister(context.Background(), testorchestra.MetadataFixture()); err != nil { 15 t.Fatal(err) 16 } 17 if err := clnt.MaybeLogin(context.Background()); err != nil { 18 t.Fatal(err) 19 } 20 data, err := clnt.FetchTorTargets(context.Background(), "ZZ") 21 if err != nil { 22 t.Fatal(err) 23 } 24 if data == nil || len(data) <= 0 { 25 t.Fatal("invalid data") 26 } 27} 28 29func TestFetchTorTargetsNotRegistered(t *testing.T) { 30 clnt := newclient() 31 state := probeservices.State{ 32 // Explicitly empty so the test is more clear 33 } 34 if err := clnt.StateFile.Set(state); err != nil { 35 t.Fatal(err) 36 } 37 data, err := clnt.FetchTorTargets(context.Background(), "ZZ") 38 if err == nil { 39 t.Fatal("expected an error here") 40 } 41 if data != nil { 42 t.Fatal("expected nil data here") 43 } 44} 45 46type FetchTorTargetsHTTPTransport struct { 47 Response *http.Response 48} 49 50func (clnt *FetchTorTargetsHTTPTransport) RoundTrip(req *http.Request) (*http.Response, error) { 51 resp, err := http.DefaultTransport.RoundTrip(req) 52 if err != nil { 53 return nil, err 54 } 55 if req.URL.Path == "/api/v1/test-list/tor-targets" { 56 clnt.Response = resp 57 } 58 return resp, err 59} 60 61func TestFetchTorTargetsSetsQueryString(t *testing.T) { 62 clnt := newclient() 63 txp := new(FetchTorTargetsHTTPTransport) 64 clnt.HTTPClient.Transport = txp 65 if err := clnt.MaybeRegister(context.Background(), testorchestra.MetadataFixture()); err != nil { 66 t.Fatal(err) 67 } 68 if err := clnt.MaybeLogin(context.Background()); err != nil { 69 t.Fatal(err) 70 } 71 data, err := clnt.FetchTorTargets(context.Background(), "ZZ") 72 if err != nil { 73 t.Fatal(err) 74 } 75 if data == nil || len(data) <= 0 { 76 t.Fatal("invalid data") 77 } 78 requestURL := txp.Response.Request.URL 79 if requestURL.Query().Get("country_code") != "ZZ" { 80 t.Fatal("invalid country code") 81 } 82} 83