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