Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add an experimental DHT/Bittorrent probe to miniooni #986

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

ooninoob
Copy link
Contributor

@ooninoob ooninoob commented Nov 22, 2022

Checklist

  • I have read the contribution guidelines
  • reference issue for this pull request: probe/#1644
  • if you changed anything related how experiments work and you need to reflect these changes in the ooni/spec repository, please link to the related ooni/spec pull request: TODO
  • if you change code inside an experiment, make sure you bump its version number

Description

As part of the InternetBorders hackathon, i am submitting a work-in-progress pull request to add DHT/Bittorrent blocking detection support in miniooni. I was mentored by @hellais during the hackathon, who introduced me to the many flavors of ooni APIs.

I am aware that the contribution guidelines favor small patches, however these two small modules introduce the same set of dependencies and are not overtly complex to review. Please let me know if i should submit two pull requests instead.

There is still some amount of work to do before merging. I may not have followed golang best practices (i'm very new), and may not have followed ooni internal API best practices. I am ready to dedicate at least at least 3 more days of my time full-time in order to get this pull request merged, given sufficient review/guidance.

Input

The dht probe expects a udp://ip:port address to try and bootstrap the DHT from. If a domain is passed as input, the domain will be resolved and the resolved IPs will be checked separately (in different Runs). If "DUMMY" is passed as input, a well-known list of bootstrap nodes will be resolved, and all resolved IPs will be attempted as part of the same run (testing overall DHT connectivity).

The infohash announced by the dht probe is static and is the Bittorrentv2 hybrid test infohash (the v1 infohash of it), as presented here. It is not a suspicious torrent that may be specifically censored, or may get people into legal trouble for announcing it.

The bittorrent probe expects a magnet URL as input. Please feed it a magnet linking to small content so it will succeed before timeout. The content of the magnet will be downloaded to a temporary directory, then removed.

The torrent/dht library used only supports Bittorrentv1 at the moment (not Bittorrentv2) but i don't think that is a problem because most clients only support v1 (and i suppose the censors too, or at least would block both not just v2).

Output/Report

Github says PR body is too long so i will post sample output/report and test results in comments

DHT has the following data in the report's test keys:

  • queries: ooni-compliant DNS data, as specified in df-002-dnst.md
  • runs: a list of individual test runs
  • failure: global failure string

Where an individual test run contains:

  • bootstrap_nodes: a list of IP:port addresses used to bootstrap the DHT
  • bootstrap_num: the number of DHT bootstrap nodes
  • peer_stried_num: the number of DHT peers contacted
  • peers_responded_num: the number of DHT peers who responded back
  • infohash_peers_num: the number of DHT peers found for the requested infohash
  • failure: a failure aborting this individual run

Bittorrent has the following data in the report's test keys:

  • queries: ooni-compliant DNS data, as specified in df-002-dnst.md
  • peers_num: the number of peers queried for data during the download
  • peers: the list of those ip:port peers
  • total_bytes_received: the number of total bytes received (including bittorrent overhead)
  • total_bad_pieces: the number of bad pieces received (should be 0)
  • failure: global failure string

TODO

  • DHT
    • Integrate static input (well-known bootstrap nodes) ; currently accessed via special input "DUMMY" (see note below)
    • Fix test failing for some reason (node seems to start but other node timeouts)
    • Write spec
  • Bittorrent
    • Add a test with two proper torrent clients exchanging data?
    • Write spec
  • Fix SQLite build (see note below)

Note about "DUMMY": i actually tried to check for empty input as a simple way of achieving this, but this produces a runner error. I think i will have to use proper static input in that case. The error, for reference, is triggered whether i don't specify -i flag, or if i use -i "":


panic: cannot run experiment: no static input for this experiment

goroutine 1 [running]:
github.com/ooni/probe-cli/v3/internal/runtimex.PanicOnError(...)
	/home/ooninoob/bittorrent-probe/internal/runtimex/runtimex.go:10
main.runx({0x143a840?, 0xc00012e000?}, {0x143d040?, 0xc0005baf00?}, {0x124a859?, 0x143edb8?}, 0xc000492b70?, 0x203000?, 0xc0004cb580?)
	/home/ooninoob/bittorrent-probe/internal/cmd/miniooni/runx.go:31 +0x1e5
main.mainSingleIteration({0x143edb8, 0xc000492b70}, {0x124a859, 0x3}, 0xc000156ea0)
	/home/ooninoob/bittorrent-probe/internal/cmd/miniooni/main.go:375 +0x4d5
main.MainWithConfiguration({0x124a859, 0x3}, 0xc000156ea0)
	/home/ooninoob/bittorrent-probe/internal/cmd/miniooni/main.go:304 +0x2c5
main.registerAllExperiments.func1(0xc00011b180?, {0xc00052f920?, 0x3?, 0x3?})
	/home/ooninoob/bittorrent-probe/internal/cmd/miniooni/main.go:224 +0x27
github.com/spf13/cobra.(*Command).execute(0xc00011b180, {0xc00052f8f0, 0x3, 0x3})
	/home/ooninoob/go/pkg/mod/github.com/spf13/cobra@v1.5.0/command.go:876 +0x67b
github.com/spf13/cobra.(*Command).ExecuteC(0xc0001d1900)
	/home/ooninoob/go/pkg/mod/github.com/spf13/cobra@v1.5.0/command.go:990 +0x3bd
github.com/spf13/cobra.(*Command).Execute(...)
	/home/ooninoob/go/pkg/mod/github.com/spf13/cobra@v1.5.0/command.go:918
main.main()
	/home/ooninoob/bittorrent-probe/internal/cmd/miniooni/main.go:178 +0x4cf

Note about SQLite: for some reason i had to manually remove a line from go.sum to import the torrent/dht library. This line was about SQLite, and go would panic (yes panic, as described here) when trying to "go get" the library. go mod tidy did not fix it. Manually removing that line from go.sum seemed to fix it... until i ran all tests. This issue may be related to my usage of NixOS which can produce weird linker issues. I will try to reproduce on another distribution.

@ooninoob
Copy link
Contributor Author

DHT output

Example report:

{
  "annotations": {
    "architecture": "amd64",
    "engine_name": "ooniprobe-engine",
    "engine_version": "3.17.0-alpha",
    "platform": "linux"
  },
  "data_format_version": "0.2.0",
  "input": "dht://router.bittorrent.com:6881",
  "measurement_start_time": "2022-11-22 21:26:16",
  "probe_asn": "AS20766",
  "probe_cc": "FR",
  "probe_ip": "127.0.0.1",
  "probe_network_name": "Association \"Gitoyen\"",
  "report_id": "",
  "resolver_asn": "AS13335",
  "resolver_ip": "172.71.117.59",
  "resolver_network_name": "Cloudflare, Inc.",
  "software_name": "miniooni",
  "software_version": "3.17.0-alpha",
  "test_keys": {
    "queries": [
      {
        "answers": [
          {
            "asn": 8100,
            "as_org_name": "QuadraNet Enterprises LLC",
            "answer_type": "A",
            "ipv4": "67.215.246.10",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "router.bittorrent.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "router.bittorrent.com",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 3.92e-05,
        "t": 0.00011356
      }
    ],
    "runs": [
      {
        "bootstrap_nodes": [
          "67.215.246.10:6881"
        ],
        "bootstrap_num": 1,
        "peers_tried_num": 53,
        "peers_responded_num": 12,
        "infohash_peers_num": 19,
        "infohash_peers": [
          "67.215.246.10:6881",
          "120.238.187.69:8083",
          "117.194.161.0:8083",
          "39.68.86.128:20808",
          "117.204.153.215:8000",
          "27.208.161.130:8082",
          "101.108.68.75:23009",
          "178.24.229.10:5575",
          "46.232.211.10:11959",
          "110.235.29.182:21583",
          "101.1.192.188:49680",
          "191.85.10.2:49848",
          "119.231.132.136:6889",
          "188.209.56.33:28079",
          "41.249.182.30:39636",
          "142.59.2.165:59696",
          "223.187.43.152:30907",
          "95.170.183.240:21707",
          "149.22.208.193:27151"
        ],
        "failure": ""
      }
    ],
    "failure": ""
  },
  "test_name": "dht",
  "test_runtime": 121.048587208,
  "test_start_time": "2022-11-22 21:24:15",
  "test_version": "0.0.1"
}
Example output:

$ ./miniooni -n -i "dht://router.bittorrent.com:6881" dht
[      0.000172]  Current time: 2022-11-22 22:24:14 CET
[      0.000228]  miniooni home directory: $HOME/.miniooni
[      0.000354]  Looking up OONI backends; please be patient...
[      0.070235]  sessionresolver: https://cloudflare-dns.com/dns-query... ok
[      0.165786]  session: using probe services: {Address:https://api.ooni.io Type:https Front:}
[      0.165802]  Looking up your location; please be patient...
[      0.165829]  iplookup: using stun_google
2022/11/22 22:24:14 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details.
[      0.249410]  sessionresolver: http3://dns.google/dns-query... ok
[      0.349733]  sessionresolver: https://cloudflare-dns.com/dns-query... ok
[      0.349919]  - country: FR
[      0.349928]  - network: Association "Gitoyen" (AS20766)
[      0.349935]  - resolver's IP: 172.71.117.59
[      0.349942]  - resolver's network: Cloudflare, Inc. (AS13335)
[      0.349967]  [1/1] running with input: dht://router.bittorrent.com:6881
[      0.349996]  Resolving DNS for router.bittorrent.com
[      0.350119]  Finished DNS for router.bittorrent.com: [67.215.246.10]
[      0.350126]  Trying DHT bootstrap node 67.215.246.10:6881
[      0.350196]  Finished starting DHT server with bootstrap nodes: [67.215.246.10:6881]
[    121.398551]  Tried 53 peers obtained from 1 bootstrap nodes. Got response from 12. 19 have requested infohash.
[    121.398892]  saving measurement to disk
[    121.398995]  experiment: recv   0.00  byte, sent   0.00  byte
[    121.399067]  sessionresolver: [{"URL":"https://cloudflare-dns.com/dns-query","Score":1},{"URL":"http3://dns.google/dns-query","Score":0.999999999990001},{"URL":"https://dns.google/dns-query","Score":0.99999999990001},{"URL":"http3://cloudflare-dns.com/dns-query","Score":1.3065307323292716e-8},{"URL":"https://mozilla.cloudflare-dns.com/dns-query","Score":1.0000000000000005e-8},{"URL":"http3://mozilla.cloudflare-dns.com/dns-query","Score":9.999999999999979e-9},{"URL":"https://dns.quad9.net/dns-query","Score":9.996899376120266e-9},{"URL":"system:///","Score":0}]
[    121.399129]  whole session: recv   5.81 kbyte, sent   2.10 kbyte

@ooninoob
Copy link
Contributor Author

Bittorrent output

Example report:

{
  "annotations": {
    "architecture": "amd64",
    "engine_name": "ooniprobe-engine",
    "engine_version": "3.17.0-alpha",
    "platform": "linux"
  },
  "data_format_version": "0.2.0",
  "input": "magnet:?xt=urn:btih:63ACA5B1F17FD71F866BB97E09BC85FE67C880F4&dn=Anarchism+and+Other+Essays+by+Emma+Goldman+PDF&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Fpublic.popcorn-tracker.org%3A6969&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.cypherpunks.ru%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.vanitycore.co%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.port443.xyz%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2750%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2720%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2750%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fcoppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337%2Fannounce",
  "measurement_start_time": "2022-11-22 21:43:57",
  "probe_asn": "AS20766",
  "probe_cc": "FR",
  "probe_ip": "127.0.0.1",
  "probe_network_name": "Association \"Gitoyen\"",
  "report_id": "",
  "resolver_asn": "AS15169",
  "resolver_ip": "172.217.33.132",
  "resolver_network_name": "Google LLC",
  "software_name": "miniooni",
  "software_version": "3.17.0-alpha",
  "test_keys": {
    "queries": [
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.010753642,
        "t": 0.01079868
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011029749,
        "t": 0.011065455
      },
      {
        "answers": [
          {
            "asn": 50673,
            "as_org_name": "Serverius Holding B.V.",
            "answer_type": "A",
            "ipv4": "93.158.213.92",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.opentrackr.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.opentrackr.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011191974,
        "t": 0.011215992
      },
      {
        "answers": [
          {
            "asn": 50673,
            "as_org_name": "Serverius Holding B.V.",
            "answer_type": "A",
            "ipv4": "93.158.213.92",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.opentrackr.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.opentrackr.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011427853,
        "t": 0.011451572
      },
      {
        "answers": [
          {
            "asn": 51083,
            "as_org_name": "Grenode",
            "answer_type": "A",
            "ipv4": "91.216.110.52",
            "ttl": null
          },
          {
            "asn": 197422,
            "as_org_name": "Tetaneutral.net Association declaree",
            "answer_type": "AAAA",
            "ipv6": "2a03:7220:8083:cd00::1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.torrent.eu.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.torrent.eu.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011545896,
        "t": 0.01161443
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011656395,
        "t": 0.011700208
      },
      {
        "answers": [
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.8",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.5",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.7",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.9",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.4",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.6",
            "ttl": null
          },
          {
            "asn": 41634,
            "as_org_name": "Svea Hosting AB",
            "answer_type": "A",
            "ipv4": "45.154.253.10",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.openbittorrent.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.openbittorrent.com",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011688867,
        "t": 0.01176508
      },
      {
        "answers": [
          {
            "asn": 210630,
            "as_org_name": "IncogNET LLC",
            "answer_type": "A",
            "ipv4": "23.137.251.45",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "opentracker.i2p.rocks",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "opentracker.i2p.rocks",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011857601,
        "t": 0.011880043
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.011889565,
        "t": 0.011915102
      },
      {
        "answers": [
          {
            "asn": 210630,
            "as_org_name": "IncogNET LLC",
            "answer_type": "A",
            "ipv4": "23.137.251.45",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "opentracker.i2p.rocks",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "opentracker.i2p.rocks",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012052873,
        "t": 0.0120727
      },
      {
        "answers": [
          {
            "asn": 51083,
            "as_org_name": "Grenode",
            "answer_type": "A",
            "ipv4": "91.216.110.52",
            "ttl": null
          },
          {
            "asn": 197422,
            "as_org_name": "Tetaneutral.net Association declaree",
            "answer_type": "AAAA",
            "ipv6": "2a03:7220:8083:cd00::1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.torrent.eu.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.torrent.eu.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012064852,
        "t": 0.012117257
      },
      {
        "answers": [
          {
            "asn": 27651,
            "as_org_name": "ENTEL CHILE S.A.",
            "answer_type": "A",
            "ipv4": "186.67.244.96",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.internetwarriors.net",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.internetwarriors.net",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012252518,
        "t": 0.012292698
      },
      {
        "answers": [
          {
            "answer_type": "AAAA",
            "ipv6": "::1",
            "ttl": null
          },
          {
            "answer_type": "A",
            "ipv4": "127.0.0.1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "public.popcorn-tracker.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "public.popcorn-tracker.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012322097,
        "t": 0.012375657
      },
      {
        "answers": [
          {
            "asn": 27651,
            "as_org_name": "ENTEL CHILE S.A.",
            "answer_type": "A",
            "ipv4": "186.67.244.96",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.internetwarriors.net",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.internetwarriors.net",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.01246784,
        "t": 0.012489909
      },
      {
        "answers": [
          {
            "asn": 61969,
            "as_org_name": "Team Internet AG",
            "answer_type": "A",
            "ipv4": "185.53.177.53",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.zer0day.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.zer0day.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012502436,
        "t": 0.012522879
      },
      {
        "answers": [
          {
            "answer_type": "AAAA",
            "ipv6": "::1",
            "ttl": null
          },
          {
            "answer_type": "A",
            "ipv4": "127.0.0.1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "public.popcorn-tracker.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "public.popcorn-tracker.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012560734,
        "t": 0.012611568
      },
      {
        "answers": [
          {
            "asn": 16509,
            "as_org_name": "Amazon.com, Inc.",
            "answer_type": "A",
            "ipv4": "199.59.243.222",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "62971.bodis.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.leechers-paradise.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012625442,
        "t": 0.012643508
      },
      {
        "answers": [
          {
            "asn": 16509,
            "as_org_name": "Amazon.com, Inc.",
            "answer_type": "A",
            "ipv4": "199.59.243.222",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "62971.bodis.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.leechers-paradise.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012818234,
        "t": 0.012838893
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.31",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.014073301,
        "t": 0.014115902
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.31",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.014432064,
        "t": 0.014498069
      },
      {
        "answers": [
          {
            "asn": 61969,
            "as_org_name": "Team Internet AG",
            "answer_type": "A",
            "ipv4": "185.53.177.53",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.zer0day.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.zer0day.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.016854007,
        "t": 0.016975496
      },
      {
        "answers": [
          {
            "asn": 60592,
            "as_org_name": "Gransy s.r.o.",
            "answer_type": "A",
            "ipv4": "46.8.8.100",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "open.demonii.si",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "open.demonii.si",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.017233434,
        "t": 0.017678034
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.017480281,
        "t": 0.017768123
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.017803615,
        "t": 0.017866818
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.018021158,
        "t": 0.018452658
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.018616544,
        "t": 0.018664626
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.pirateparty.gr",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012911108,
        "t": 0.01892855
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.cypherpunks.ru",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.012926708,
        "t": 0.02028002
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.cypherpunks.ru",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.013917123,
        "t": 0.020339653
      },
      {
        "answers": [
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "A",
            "ipv4": "184.105.151.166",
            "ttl": null
          },
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "AAAA",
            "ipv6": "2001:470:1:189:0:1:2:3",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "explodie.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "explodie.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.020252394,
        "t": 0.02032127
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.me",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.me",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.016744666,
        "t": 0.020413639
      },
      {
        "answers": [
          {
            "asn": 60592,
            "as_org_name": "Gransy s.r.o.",
            "answer_type": "A",
            "ipv4": "46.8.8.100",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "open.demonii.si",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "open.demonii.si",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.020536379,
        "t": 0.02055921
      },
      {
        "answers": [
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "A",
            "ipv4": "184.105.151.166",
            "ttl": null
          },
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "AAAA",
            "ipv6": "2001:470:1:189:0:1:2:3",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "explodie.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "explodie.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.020555431,
        "t": 0.020584619
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.me",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.me",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.020527305,
        "t": 0.020573272
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.pirateparty.gr",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.015892522,
        "t": 0.023627663
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.port443.xyz",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.019715913,
        "t": 0.025007937
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.vanitycore.co",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.017955403,
        "t": 0.025890221
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.vanitycore.co",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.016743934,
        "t": 0.025935768
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.port443.xyz",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.020334729,
        "t": 0.026292462
      },
      {
        "answers": [
          {
            "asn": 60592,
            "as_org_name": "Gransy s.r.o.",
            "answer_type": "A",
            "ipv4": "46.8.8.100",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "open.demonii.si",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "open.demonii.si",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.47232217,
        "t": 0.472346303
      },
      {
        "answers": [
          {
            "asn": 16509,
            "as_org_name": "Amazon.com, Inc.",
            "answer_type": "A",
            "ipv4": "199.59.243.222",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "62971.bodis.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.leechers-paradise.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472400968,
        "t": 0.472416135
      },
      {
        "answers": [
          {
            "asn": 51083,
            "as_org_name": "Grenode",
            "answer_type": "A",
            "ipv4": "91.216.110.52",
            "ttl": null
          },
          {
            "asn": 197422,
            "as_org_name": "Tetaneutral.net Association declaree",
            "answer_type": "AAAA",
            "ipv6": "2a03:7220:8083:cd00::1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.torrent.eu.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.torrent.eu.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472367446,
        "t": 0.472442331
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.47242137,
        "t": 0.472470653
      },
      {
        "answers": [
          {
            "asn": 61969,
            "as_org_name": "Team Internet AG",
            "answer_type": "A",
            "ipv4": "185.53.177.53",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.zer0day.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.zer0day.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472530534,
        "t": 0.472541635
      },
      {
        "answers": [
          {
            "asn": 210630,
            "as_org_name": "IncogNET LLC",
            "answer_type": "A",
            "ipv4": "23.137.251.45",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "opentracker.i2p.rocks",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "opentracker.i2p.rocks",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472540969,
        "t": 0.472553649
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.31",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472606606,
        "t": 0.472630615
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472563943,
        "t": 0.472614509
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.vanitycore.co",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472664718,
        "t": 0.472673815
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.port443.xyz",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472331676,
        "t": 0.472673861
      },
      {
        "answers": [
          {
            "asn": 50673,
            "as_org_name": "Serverius Holding B.V.",
            "answer_type": "A",
            "ipv4": "93.158.213.92",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.opentrackr.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.opentrackr.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472693073,
        "t": 0.472703585
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.pirateparty.gr",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472702736,
        "t": 0.472717234
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472715605,
        "t": 0.472725532
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.cypherpunks.ru",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472740449,
        "t": 0.472752682
      },
      {
        "answers": [
          {
            "asn": 27651,
            "as_org_name": "ENTEL CHILE S.A.",
            "answer_type": "A",
            "ipv4": "186.67.244.96",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.internetwarriors.net",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.internetwarriors.net",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472768319,
        "t": 0.472777046
      },
      {
        "answers": [
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "A",
            "ipv4": "184.105.151.166",
            "ttl": null
          },
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "AAAA",
            "ipv6": "2001:470:1:189:0:1:2:3",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "explodie.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "explodie.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472757265,
        "t": 0.472806821
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.me",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.me",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472771275,
        "t": 0.472812627
      },
      {
        "answers": [
          {
            "asn": 50673,
            "as_org_name": "Serverius Holding B.V.",
            "answer_type": "A",
            "ipv4": "93.158.213.92",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.opentrackr.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.opentrackr.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472834119,
        "t": 0.472843296
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.pirateparty.gr",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472875111,
        "t": 0.47288748
      },
      {
        "answers": [
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "A",
            "ipv4": "184.105.151.166",
            "ttl": null
          },
          {
            "asn": 6939,
            "as_org_name": "Hurricane Electric LLC",
            "answer_type": "AAAA",
            "ipv6": "2001:470:1:189:0:1:2:3",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "explodie.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "explodie.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472852327,
        "t": 0.472920375
      },
      {
        "answers": [
          {
            "asn": 19624,
            "as_org_name": "Data Room, Inc",
            "answer_type": "A",
            "ipv4": "31.14.40.30",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.coppersurfer.tk",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.coppersurfer.tk",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472911467,
        "t": 0.472923266
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472893779,
        "t": 0.472938009
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.me",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.me",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.472958603,
        "t": 0.472999656
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.port443.xyz",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.47306611,
        "t": 0.473079186
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.vanitycore.co",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.473096084,
        "t": 0.473106204
      },
      {
        "answers": [
          {
            "asn": 210630,
            "as_org_name": "IncogNET LLC",
            "answer_type": "A",
            "ipv4": "23.137.251.45",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "opentracker.i2p.rocks",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "opentracker.i2p.rocks",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.473120566,
        "t": 0.473129811
      },
      {
        "answers": null,
        "engine": "getaddrinfo",
        "failure": "dns_nxdomain_error",
        "getaddrinfo_error": -2,
        "hostname": "tracker.cypherpunks.ru",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.473192677,
        "t": 0.473208383
      },
      {
        "answers": [
          {
            "asn": 51083,
            "as_org_name": "Grenode",
            "answer_type": "A",
            "ipv4": "91.216.110.52",
            "ttl": null
          },
          {
            "asn": 197422,
            "as_org_name": "Tetaneutral.net Association declaree",
            "answer_type": "AAAA",
            "ipv6": "2a03:7220:8083:cd00::1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.torrent.eu.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.torrent.eu.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.473164238,
        "t": 0.473202992
      },
      {
        "answers": [
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.112",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.115",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.113",
            "ttl": null
          },
          {
            "asn": 16276,
            "as_org_name": "OVH SAS",
            "answer_type": "A",
            "ipv4": "151.80.120.114",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "9.rarbg.to",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "9.rarbg.to",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.473028985,
        "t": 0.473076694
      },
      {
        "answers": [
          {
            "asn": 27651,
            "as_org_name": "ENTEL CHILE S.A.",
            "answer_type": "A",
            "ipv4": "186.67.244.96",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "tracker.internetwarriors.net",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.internetwarriors.net",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.47766345,
        "t": 0.477682562
      },
      {
        "answers": [
          {
            "answer_type": "AAAA",
            "ipv6": "::1",
            "ttl": null
          },
          {
            "answer_type": "A",
            "ipv4": "127.0.0.1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "public.popcorn-tracker.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "public.popcorn-tracker.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.47768178,
        "t": 0.477749056
      },
      {
        "answers": [
          {
            "answer_type": "AAAA",
            "ipv6": "::1",
            "ttl": null
          },
          {
            "answer_type": "A",
            "ipv4": "127.0.0.1",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "public.popcorn-tracker.org",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "public.popcorn-tracker.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.477748339,
        "t": 0.477806086
      },
      {
        "answers": [
          {
            "asn": 16509,
            "as_org_name": "Amazon.com, Inc.",
            "answer_type": "A",
            "ipv4": "199.59.243.222",
            "ttl": null
          },
          {
            "answer_type": "CNAME",
            "hostname": "62971.bodis.com",
            "ttl": null
          }
        ],
        "engine": "getaddrinfo",
        "failure": null,
        "hostname": "tracker.leechers-paradise.org",
        "query_type": "ANY",
        "resolver_hostname": null,
        "resolver_port": null,
        "resolver_address": "",
        "t0": 0.477855927,
        "t": 0.477870215
      }
    ],
    "failure": "",
    "peers_num": 1,
    "peers": [
      "94.23.222.163:55000"
    ],
    "total_bytes_received": 462447,
    "total_bad_pieces": 0
  },
  "test_name": "bittorrent",
  "test_runtime": 0.477901028,
  "test_start_time": "2022-11-22 21:43:56",
  "test_version": "0.0.1"
}
Example output: $ ./miniooni -n -i "magnet:?xt=urn:btih:63ACA5B1F17FD71F866BB97E09BC85FE67C880F4&dn=Anarchism+and+Other+Essays+by+Emma+Goldman+PDF&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Fpublic.popcorn-tracker.org%3A6969&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.cypherpunks.ru%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.vanitycore.co%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.port443.xyz%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2750%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2720%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2750%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fcoppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337%2Fannounce" bittorrent [ 0.000033] Current time: 2022-11-22 22:43:56 CET [ 0.000077] miniooni home directory: $HOME/.miniooni [ 0.000210] Looking up OONI backends; please be patient... 2022/11/22 22:43:56 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details. [ 0.078944] sessionresolver: http3://dns.google/dns-query... ok [ 0.170024] session: using probe services: {Address:https://api.ooni.io Type:https Front:} [ 0.170039] Looking up your location; please be patient... [ 0.170063] iplookup: using stun_google [ 0.222036] sessionresolver: http3://dns.google/dns-query... ok [ 0.307743] sessionresolver: http3://dns.google/dns-query... ok [ 0.307935] - country: FR [ 0.307944] - network: Association "Gitoyen" (AS20766) [ 0.307950] - resolver's IP: 172.217.33.132 [ 0.307955] - resolver's network: Google LLC (AS15169) [ 0.307989] [1/1] running with input: magnet:?xt=urn:btih:63ACA5B1F17FD71F866BB97E09BC85FE67C880F4&dn=Anarchism+and+Other+Essays+by+Emma+Goldman+PDF&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce&tr=udp%3A%2F%2Fpublic.popcorn-tracker.org%3A6969&tr=udp%3A%2F%2Ftracker.pirateparty.gr%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.cypherpunks.ru%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.vanitycore.co%3A6969%2Fannounce&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.port443.xyz%3A6969%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2750%2Fannounce&tr=udp%3A%2F%2F9.rarbg.to%3A2720%2Fannounce&tr=udp%3A%2F%2F9.rarbg.me%3A2750%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.si%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.internetwarriors.net%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fcoppersurfer.tk%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337%2Fannounce [ 0.308078] Using temporary directory /tmp/ooni1447389566 [ 0.318727] Resolving DNS for tracker.coppersurfer.tk [ 0.318903] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.319008] Resolving DNS for tracker.coppersurfer.tk [ 0.319140] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.319173] Resolving DNS for tracker.opentrackr.org [ 0.319272] Finished DNS for tracker.opentrackr.org: [93.158.213.92] [ 0.319418] Resolving DNS for tracker.opentrackr.org [ 0.319501] Finished DNS for tracker.opentrackr.org: [93.158.213.92] [ 0.319537] Resolving DNS for tracker.torrent.eu.org [ 0.319644] Resolving DNS for tracker.coppersurfer.tk [ 0.319678] Resolving DNS for tracker.openbittorrent.com [ 0.319705] Finished DNS for tracker.torrent.eu.org: [91.216.110.52 2a03:7220:8083:cd00::1] [ 0.319758] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.319849] Resolving DNS for opentracker.i2p.rocks [ 0.319881] Resolving DNS for tracker.coppersurfer.tk [ 0.319893] Finished DNS for tracker.openbittorrent.com: [45.154.253.8 45.154.253.5 45.154.253.7 45.154.253.9 45.154.253.4 45.154.253.6 45.154.253.10] [ 0.319941] Finished DNS for opentracker.i2p.rocks: [23.137.251.45] [ 0.319966] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.320046] Resolving DNS for opentracker.i2p.rocks [ 0.320059] Resolving DNS for tracker.torrent.eu.org [ 0.320117] Finished DNS for opentracker.i2p.rocks: [23.137.251.45] [ 0.320171] Finished DNS for tracker.torrent.eu.org: [91.216.110.52 2a03:7220:8083:cd00::1] [ 0.320217] Resolving DNS for tracker.internetwarriors.net [ 0.320315] Resolving DNS for public.popcorn-tracker.org [ 0.320354] Finished DNS for tracker.internetwarriors.net: [186.67.244.96] [ 0.320439] Finished DNS for public.popcorn-tracker.org: [::1 127.0.0.1] [ 0.320461] Resolving DNS for tracker.internetwarriors.net [ 0.320482] Resolving DNS for tracker.zer0day.to [ 0.320534] Finished DNS for tracker.internetwarriors.net: [186.67.244.96] [ 0.320555] Resolving DNS for public.popcorn-tracker.org [ 0.320584] Finished DNS for tracker.zer0day.to: [185.53.177.53] [ 0.320614] Resolving DNS for tracker.leechers-paradise.org [ 0.320664] Finished DNS for public.popcorn-tracker.org: [::1 127.0.0.1] [ 0.320698] Finished DNS for tracker.leechers-paradise.org: [199.59.243.222] [ 0.320805] Resolving DNS for tracker.leechers-paradise.org [ 0.320882] Finished DNS for tracker.leechers-paradise.org: [199.59.243.222] [ 0.320892] Resolving DNS for tracker.pirateparty.gr [ 0.320919] Resolving DNS for tracker.cypherpunks.ru [ 0.321900] Resolving DNS for tracker.cypherpunks.ru [ 0.322060] Resolving DNS for coppersurfer.tk [ 0.322190] Finished DNS for coppersurfer.tk: [31.14.40.31] [ 0.322416] Resolving DNS for coppersurfer.tk [ 0.320905] Resolving DNS for tracker.pirateparty.gr [ 0.324357] Finished DNS for coppersurfer.tk: [31.14.40.31] [ 0.324573] Resolving DNS for 9.rarbg.me [ 0.324735] Resolving DNS for tracker.vanitycore.co [ 0.324830] Resolving DNS for tracker.zer0day.to [ 0.325044] Finished DNS for tracker.zer0day.to: [185.53.177.53] [ 0.325224] Resolving DNS for open.demonii.si [ 0.325473] Resolving DNS for 9.rarbg.to [ 0.325755] Finished DNS for open.demonii.si: [46.8.8.100] [ 0.325799] Resolving DNS for 9.rarbg.to [ 0.325842] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.325950] Resolving DNS for tracker.vanitycore.co [ 0.325979] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.326016] Resolving DNS for 9.rarbg.to [ 0.326538] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.326598] Resolving DNS for 9.rarbg.to [ 0.326786] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.327707] Resolving DNS for tracker.port443.xyz [ 0.328229] Resolving DNS for explodie.org [ 0.328326] Resolving DNS for tracker.port443.xyz [ 0.328402] Finished DNS for explodie.org: [184.105.151.166 2001:470:1:189:0:1:2:3] [ 0.328492] Finished DNS for 9.rarbg.me: [151.80.120.114 151.80.120.113 151.80.120.112 151.80.120.115] [ 0.328523] Resolving DNS for 9.rarbg.me [ 0.328531] Resolving DNS for open.demonii.si [ 0.328551] Resolving DNS for explodie.org [ 0.328605] Finished DNS for open.demonii.si: [46.8.8.100] [ 0.328625] Finished DNS for explodie.org: [184.105.151.166 2001:470:1:189:0:1:2:3] [ 0.328635] Finished DNS for 9.rarbg.me: [151.80.120.114 151.80.120.113 151.80.120.112 151.80.120.115] [ 0.780205] Resolving DNS for open.demonii.si [ 0.780321] Resolving DNS for tracker.port443.xyz [ 0.780357] Resolving DNS for tracker.torrent.eu.org [ 0.780379] Resolving DNS for tracker.leechers-paradise.org [ 0.780407] Resolving DNS for 9.rarbg.to [ 0.780506] Finished DNS for tracker.leechers-paradise.org: [199.59.243.222] [ 0.780515] Finished DNS for tracker.torrent.eu.org: [91.216.110.52 2a03:7220:8083:cd00::1] [ 0.780527] Resolving DNS for tracker.zer0day.to [ 0.780537] Resolving DNS for opentracker.i2p.rocks [ 0.780552] Resolving DNS for 9.rarbg.to [ 0.780590] Finished DNS for tracker.zer0day.to: [185.53.177.53] [ 0.780596] Finished DNS for opentracker.i2p.rocks: [23.137.251.45] [ 0.780286] Resolving DNS for coppersurfer.tk [ 0.780657] Finished DNS for coppersurfer.tk: [31.14.40.31] [ 0.780303] Resolving DNS for tracker.vanitycore.co [ 0.780252] Resolving DNS for tracker.opentrackr.org [ 0.780696] Resolving DNS for tracker.pirateparty.gr [ 0.780713] Resolving DNS for tracker.coppersurfer.tk [ 0.780731] Finished DNS for tracker.opentrackr.org: [93.158.213.92] [ 0.780262] Resolving DNS for tracker.cypherpunks.ru [ 0.780241] Resolving DNS for explodie.org [ 0.780764] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.780606] Resolving DNS for tracker.internetwarriors.net [ 0.780264] Resolving DNS for 9.rarbg.me [ 0.780817] Finished DNS for tracker.internetwarriors.net: [186.67.244.96] [ 0.780832] Resolving DNS for tracker.opentrackr.org [ 0.780200] Resolving DNS for explodie.org [ 0.780863] Finished DNS for 9.rarbg.me: [151.80.120.114 151.80.120.113 151.80.120.112 151.80.120.115] [ 0.780398] Resolving DNS for tracker.pirateparty.gr [ 0.780884] Finished DNS for tracker.opentrackr.org: [93.158.213.92] [ 0.780283] Resolving DNS for 9.rarbg.to [ 0.780389] Finished DNS for open.demonii.si: [46.8.8.100] [ 0.780894] Resolving DNS for tracker.coppersurfer.tk [ 0.780247] Resolving DNS for 9.rarbg.me [ 0.780959] Finished DNS for explodie.org: [184.105.151.166 2001:470:1:189:0:1:2:3] [ 0.780975] Finished DNS for tracker.coppersurfer.tk: [31.14.40.30] [ 0.780537] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.780277] Resolving DNS for 9.rarbg.to [ 0.781046] Finished DNS for 9.rarbg.me: [151.80.120.114 151.80.120.113 151.80.120.112 151.80.120.115] [ 0.780989] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.780296] Resolving DNS for tracker.port443.xyz [ 0.780310] Resolving DNS for tracker.vanitycore.co [ 0.780258] Resolving DNS for opentracker.i2p.rocks [ 0.781155] Finished DNS for opentracker.i2p.rocks: [23.137.251.45] [ 0.780271] Resolving DNS for tracker.torrent.eu.org [ 0.780692] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.780844] Finished DNS for explodie.org: [184.105.151.166 2001:470:1:189:0:1:2:3] [ 0.780255] Resolving DNS for tracker.cypherpunks.ru [ 0.781239] Finished DNS for tracker.torrent.eu.org: [91.216.110.52 2a03:7220:8083:cd00::1] [ 0.781278] Finished DNS for 9.rarbg.to: [151.80.120.112 151.80.120.115 151.80.120.113 151.80.120.114] [ 0.785650] Resolving DNS for tracker.internetwarriors.net [ 0.785672] Resolving DNS for public.popcorn-tracker.org [ 0.785719] Finished DNS for tracker.internetwarriors.net: [186.67.244.96] [ 0.785743] Resolving DNS for public.popcorn-tracker.org [ 0.785822] Finished DNS for public.popcorn-tracker.org: [::1 127.0.0.1] [ 0.785849] Resolving DNS for tracker.leechers-paradise.org [ 0.785865] Resolving DNS for coppersurfer.tk [ 0.785900] Finished DNS for tracker.leechers-paradise.org: [199.59.243.222] [ 0.785851] Finished DNS for public.popcorn-tracker.org: [::1 127.0.0.1] [ 0.785982] Resolving DNS for tracker.zer0day.to [ 0.786014] Resolving DNS for open.demonii.si [ 0.786003] Resolving DNS for tracker.openbittorrent.com [ 0.786071] Resolving DNS for tracker.coppersurfer.tk [ 0.786107] Resolving DNS for tracker.coppersurfer.tk [ 0.786974] saving measurement to disk [ 0.787212] experiment: recv 0.00 byte, sent 0.00 byte [ 0.787371] sessionresolver: [{"URL":"http3://dns.google/dns-query","Score":0.999999999999999},{"URL":"https://dns.google/dns-query","Score":0.999999999990001},{"URL":"https://cloudflare-dns.com/dns-query","Score":0.1},{"URL":"http3://cloudflare-dns.com/dns-query","Score":1.3065307323292716e-8},{"URL":"https://mozilla.cloudflare-dns.com/dns-query","Score":1.0000000000000005e-8},{"URL":"http3://mozilla.cloudflare-dns.com/dns-query","Score":9.999999999999979e-9},{"URL":"https://dns.quad9.net/dns-query","Score":9.996899376120266e-9},{"URL":"system:///","Score":0}] [ 0.787418] whole session: recv 7.23 kbyte, sent 2.06 kbyte

@ooninoob
Copy link
Contributor Author

Test results

The following test results are accompanied by tons of build fails of everything that depends on sqlite. See the TODO above for context.


$ go test -race ./... 
?      github.com/ooni/probe-cli/v3/GHGEN	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/autorun	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/app	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/autorun	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/geoip [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/info [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/list	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/onboard	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/reset	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/rm	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/root	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/run	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/show	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/upload	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/config	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/batch	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli/progress	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/syslog	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/nettests [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/ooni [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/oonitest	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/output	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils/homedir	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/atomicx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/bytecounter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/apitool	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/e2epostprocess	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/cmd/getresources	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar	2.681s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/badproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/flagx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/httpproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/iptables	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/resolver	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/tlsproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/uncensored	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/miniooni	1.836s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelperd	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oonireport	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/ooporthelper	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/printversion	[no test files]
FAIL	github.com/ooni/probe-cli/v3/internal/database [build failed]
ok  	github.com/ooni/probe-cli/v3/internal/engine	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/bittorrent	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dash	(cached)
[::]:48933
--- FAIL: TestMeasurer_run (10.01s)
    --- FAIL: TestMeasurer_run/with_local_listener (10.01s)
        dht_test.go:89: unknown_failure: No DHT peers were found
FAIL
FAIL	github.com/ooni/probe-cli/v3/internal/engine/experiment/dht	10.090s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnscheck	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/example	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/fbmessenger	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hhfm	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hirl	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/httphostheader	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/ndt7	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/portfiltering	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/psiphon	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/quicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/riseupvpn	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/run	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/signal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/simplequicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/sniblocking	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/stunreachability	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tcpping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/telegram	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsmiddlebox	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tor	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/torsf	13.456s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/urlgetter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/vanillator	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/whatsapp	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/geolocate	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/mockable	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/netx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/probeservices	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/sessionresolver	(cached)
?   	github.com/ooni/probe-cli/v3/internal/experiment/webconnectivity	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/fsx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/geoipx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpapi	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/humanize	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/kvstore	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/legacy/assetsdir	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/logx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurexlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocate	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocatev2	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/multierror	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/filtering	(cached)
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/gencertifi	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/generrno	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/quictesting	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/oonirun	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/platform	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/ptx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/randx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/registry	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/runtimex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/scrubber	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/shellx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/stuninput	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/testingx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/torlogs	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tracex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel/mocks	(cached)
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/generator	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter09	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter10	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter11	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter12	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter13	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter14	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/pkg/oonimkall	(cached)
FAIL
``?   	github.com/ooni/probe-cli/v3/GHGEN	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/autorun	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/app	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/autorun	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/geoip [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/info [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/list	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/onboard	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/reset	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/rm	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/root	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/run	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/show	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/upload	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/config	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/batch	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli/progress	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/syslog	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/nettests [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/ooni [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/oonitest	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/output	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils/homedir	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/atomicx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/bytecounter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/apitool	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/e2epostprocess	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/cmd/getresources	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar	2.681s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/badproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/flagx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/httpproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/iptables	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/resolver	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/tlsproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/uncensored	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/miniooni	1.836s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelperd	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oonireport	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/ooporthelper	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/printversion	[no test files]
FAIL	github.com/ooni/probe-cli/v3/internal/database [build failed]
ok  	github.com/ooni/probe-cli/v3/internal/engine	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/bittorrent	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dash	(cached)
[::]:48933
--- FAIL: TestMeasurer_run (10.01s)
    --- FAIL: TestMeasurer_run/with_local_listener (10.01s)
        dht_test.go:89: unknown_failure: No DHT peers were found
FAIL
FAIL	github.com/ooni/probe-cli/v3/internal/engine/experiment/dht	10.090s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnscheck	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/example	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/fbmessenger	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hhfm	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hirl	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/httphostheader	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/ndt7	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/portfiltering	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/psiphon	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/quicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/riseupvpn	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/run	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/signal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/simplequicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/sniblocking	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/stunreachability	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tcpping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/telegram	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsmiddlebox	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tor	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/torsf	13.456s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/urlgetter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/vanillator	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/whatsapp	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/geolocate	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/mockable	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/netx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/probeservices	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/sessionresolver	(cached)
?   	github.com/ooni/probe-cli/v3/internal/experiment/webconnectivity	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/fsx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/geoipx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpapi	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/humanize	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/kvstore	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/legacy/assetsdir	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/logx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurexlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocate	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocatev2	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/multierror	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/filtering	(cached)
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/gencertifi	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/generrno	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/quictesting	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/oonirun	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/platform	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/ptx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/randx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/registry	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/runtimex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/scrubber	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/shellx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/stuninput	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/testingx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/torlogs	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tracex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel/mocks	(cached)
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/generator	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter09	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter10	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter11	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter12	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter13	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter14	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/pkg/oonimkall	(cached)
FAIL
?   	github.com/ooni/probe-cli/v3/GHGEN	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/autorun	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/app	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/autorun	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/geoip [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/info [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/list	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/onboard	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/reset	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/rm	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/root	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/run	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/show	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/upload	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/config	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/batch	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli/progress	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/syslog	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/nettests [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/ooni [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/oonitest	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/output	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils/homedir	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/atomicx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/bytecounter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/apitool	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/e2epostprocess	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/cmd/getresources	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar	2.681s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/badproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/flagx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/httpproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/iptables	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/resolver	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/tlsproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/uncensored	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/miniooni	1.836s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelperd	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oonireport	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/ooporthelper	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/printversion	[no test files]
FAIL	github.com/ooni/probe-cli/v3/internal/database [build failed]
ok  	github.com/ooni/probe-cli/v3/internal/engine	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/bittorrent	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dash	(cached)
[::]:48933
--- FAIL: TestMeasurer_run (10.01s)
    --- FAIL: TestMeasurer_run/with_local_listener (10.01s)
        dht_test.go:89: unknown_failure: No DHT peers were found
FAIL
FAIL	github.com/ooni/probe-cli/v3/internal/engine/experiment/dht	10.090s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnscheck	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/example	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/fbmessenger	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hhfm	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hirl	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/httphostheader	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/ndt7	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/portfiltering	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/psiphon	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/quicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/riseupvpn	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/run	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/signal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/simplequicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/sniblocking	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/stunreachability	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tcpping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/telegram	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsmiddlebox	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tor	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/torsf	13.456s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/urlgetter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/vanillator	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/whatsapp	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/geolocate	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/mockable	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/netx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/probeservices	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/sessionresolver	(cached)
?   	github.com/ooni/probe-cli/v3/internal/experiment/webconnectivity	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/fsx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/geoipx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpapi	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/humanize	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/kvstore	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/legacy/assetsdir	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/logx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurexlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocate	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocatev2	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/multierror	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/filtering	(cached)
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/gencertifi	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/generrno	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/quictesting	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/oonirun	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/platform	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/ptx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/randx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/registry	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/runtimex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/scrubber	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/shellx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/stuninput	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/testingx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/torlogs	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tracex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel/mocks	(cached)
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/generator	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter09	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter10	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter11	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter12	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter13	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter14	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/pkg/oonimkall	(cached)
FAIL
?   	github.com/ooni/probe-cli/v3/GHGEN	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/autorun	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/app	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/autorun	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/geoip [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/info [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/list	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/onboard	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/reset	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/rm	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/root	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/run	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/show	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/upload	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/cli/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/config	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/batch	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/cli/progress	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/log/handlers/syslog	[no test files]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/nettests [build failed]
FAIL	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/ooni [build failed]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/oonitest	[no test files]
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/output	[no test files]
ok  	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils	(cached)
?   	github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/utils/homedir	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/atomicx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/bytecounter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/apitool	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/e2epostprocess	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/cmd/getresources	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar	2.681s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/badproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/flagx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/httpproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/iptables	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/resolver	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/tlsproxy	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/jafar/uncensored	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/miniooni	1.836s
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelper/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oohelperd	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/oonireport	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/cmd/ooporthelper	(cached)
?   	github.com/ooni/probe-cli/v3/internal/cmd/printversion	[no test files]
FAIL	github.com/ooni/probe-cli/v3/internal/database [build failed]
ok  	github.com/ooni/probe-cli/v3/internal/engine	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/bittorrent	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dash	(cached)
[::]:48933
--- FAIL: TestMeasurer_run (10.01s)
    --- FAIL: TestMeasurer_run/with_local_listener (10.01s)
        dht_test.go:89: unknown_failure: No DHT peers were found
FAIL
FAIL	github.com/ooni/probe-cli/v3/internal/engine/experiment/dht	10.090s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnscheck	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/dnsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/example	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/fbmessenger	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hhfm	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/hirl	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/httphostheader	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/ndt7	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/portfiltering	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/psiphon	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/quicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/riseupvpn	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/run	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/signal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/simplequicping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/sniblocking	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/stunreachability	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tcpping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/telegram	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsmiddlebox	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlsping	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/tor	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/torsf	13.456s
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/urlgetter	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/vanillator	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity/internal	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/experiment/whatsapp	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/geolocate	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/mockable	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/netx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/engine/probeservices	(cached)
?   	github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/engine/sessionresolver	(cached)
?   	github.com/ooni/probe-cli/v3/internal/experiment/webconnectivity	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/fsx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/geoipx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpapi	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/httpx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/humanize	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/kvstore	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/legacy/assetsdir	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/logx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/measurexlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocate	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/mlablocatev2	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/model/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/multierror	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/filtering	(cached)
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/gencertifi	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/netxlite/internal/generrno	[no test files]
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/mocks	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/netxlite/quictesting	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/oonirun	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/platform	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/ptx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/randx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/registry	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/runtimex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/scrubber	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/shellx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/stuninput	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/testingx	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/torlogs	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tracex	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel	(cached)
ok  	github.com/ooni/probe-cli/v3/internal/tunnel/mocks	(cached)
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/experiment/torsf/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/generator	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter09	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter10	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter11	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter12	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter13	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/measurex/chapter14	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter01	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter02	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter03	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter04	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter05	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter06	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter07	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/tutorial/netxlite/chapter08	[no test files]
?   	github.com/ooni/probe-cli/v3/internal/version	[no test files]
ok  	github.com/ooni/probe-cli/v3/pkg/oonimkall	(cached)
FAIL

@ooninoob
Copy link
Contributor Author

Continuing investigation for the SQLite issue. I can reproduce on a different system (archlinux) it in the following steps:

  • clone code from this PR
  • copy go.mod and go.sum from upstream master into the PR repo
  • go test -race ./*** complains about missing dependencies (see below)
  • go get github.com/anacrolix/torrent makes go panic (see below)

$ go test -race ./...
go: downloading github.com/apex/log v1.9.0
go: downloading github.com/alecthomas/kingpin v2.2.6+incompatible
go: downloading github.com/upper/db/v4 v4.6.0
go: downloading github.com/mattn/go-colorable v0.1.13
go: downloading github.com/mitchellh/go-wordwrap v1.0.1
go: downloading golang.org/x/sys v0.0.0-20220829200755-d48e67d00261
go: downloading github.com/google/go-cmp v0.5.8
go: downloading github.com/miekg/dns v1.1.50
go: downloading github.com/google/martian/v3 v3.3.2
go: downloading github.com/pborman/getopt/v2 v2.1.0
go: downloading github.com/prometheus/client_golang v1.13.0
go: downloading github.com/rubenv/sql-migrate v1.2.0
go: downloading github.com/spf13/cobra v1.5.0
go: downloading github.com/montanaflynn/stats v0.6.6
go: downloading github.com/lucas-clemente/quic-go v0.28.1
go: downloading github.com/mattn/go-isatty v0.0.16
go: downloading github.com/gorilla/websocket v1.5.0
go: downloading golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90
go: downloading golang.org/x/term v0.0.0-20220722155259-a9ba230a4035
go: downloading github.com/pion/stun v0.3.5
go: downloading github.com/ooni/oocrypto v0.1.2
go: downloading github.com/ooni/oohttp v0.2.2
go: downloading gitlab.com/yawning/utls.git v0.0.12-1
go: downloading golang.org/x/net v0.0.0-20220906165146-f3363e06e74c
go: downloading github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
go: downloading github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137
go: downloading github.com/rogpeppe/go-internal v1.9.0
go: downloading github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
go: downloading github.com/ooni/probe-assets v0.13.0
go: downloading github.com/oschwald/geoip2-golang v1.8.0
go: downloading github.com/hexops/gotextdiff v1.0.3
go: downloading github.com/iancoleman/strcase v0.2.0
go: downloading github.com/beorn7/perks v1.0.1
go: downloading github.com/cespare/xxhash/v2 v2.1.2
go: downloading github.com/golang/protobuf v1.5.3-0.20210916003710-5d5e8c018a13
go: downloading github.com/prometheus/client_model v0.2.0
go: downloading github.com/prometheus/common v0.37.0
go: downloading github.com/prometheus/procfs v0.8.0
go: downloading google.golang.org/protobuf v1.28.1
go: downloading github.com/mattn/go-sqlite3 v1.14.15
go: downloading github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
go: downloading github.com/cretz/bine v0.2.0
go: downloading github.com/go-gorp/gorp/v3 v3.0.2
go: downloading git.torproject.org/pluggable-transports/goptlib.git v1.2.0
go: downloading git.torproject.org/pluggable-transports/snowflake.git/v2 v2.3.0
go: downloading gitlab.com/yawning/obfs4.git v0.0.0-20220904064028-336a71d6e4cf
go: downloading github.com/google/uuid v1.3.0
go: downloading github.com/cheekybits/genny v1.0.0
go: downloading github.com/marten-seemann/qpack v0.2.1
go: downloading github.com/dsnet/compress v0.0.1
go: downloading gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec
go: downloading github.com/oschwald/maxminddb-golang v1.10.0
go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.1
go: downloading github.com/segmentio/fasthash v1.0.3
go: downloading github.com/pion/webrtc/v3 v3.1.43
go: downloading github.com/refraction-networking/utls v1.0.0
go: downloading github.com/xtaci/kcp-go/v5 v5.6.1
go: downloading github.com/xtaci/smux v1.5.16
go: downloading github.com/marten-seemann/qtls-go1-19 v0.1.0
go: downloading github.com/pion/ice/v2 v2.2.7
go: downloading github.com/pion/sdp/v3 v3.0.6
go: downloading github.com/pion/datachannel v1.5.2
go: downloading github.com/pion/dtls/v2 v2.1.5
go: downloading github.com/pion/interceptor v0.1.12
go: downloading github.com/pion/logging v0.2.2
go: downloading github.com/pion/randutil v0.1.0
go: downloading github.com/pion/rtcp v1.2.10
go: downloading github.com/pion/rtp v1.7.13
go: downloading github.com/pion/sctp v1.8.2
go: downloading github.com/pion/srtp/v2 v2.0.10
go: downloading github.com/pion/transport v0.13.1
go: downloading github.com/templexxx/xorsimd v0.4.1
go: downloading github.com/klauspost/reedsolomon v1.10.0
go: downloading github.com/tjfoc/gmsm v1.4.1
go: downloading github.com/dchest/siphash v1.2.3
go: downloading github.com/pion/mdns v0.0.5
go: downloading github.com/pion/turn/v2 v2.0.8
go: downloading github.com/pion/udp v0.1.1
go: downloading github.com/templexxx/cpu v0.0.9
go: downloading github.com/klauspost/cpuid/v2 v2.1.0
go: downloading filippo.io/edwards25519 v1.0.0
go: downloading gitlab.com/yawning/edwards25519-extra.git v0.0.0-20220726154925-def713fd18e4
internal/engine/experiment/dht/dht.go:11:2: no required module provides package github.com/anacrolix/dht/v2; to add it:
	go get github.com/anacrolix/dht/v2
internal/engine/experiment/bittorrent/bittorrent.go:12:2: no required module provides package github.com/anacrolix/torrent; to add it:
	go get github.com/anacrolix/torrent
$ go get github.com/anacrolix/torrent
go: downloading github.com/anacrolix/torrent v1.47.0
go: downloading github.com/RoaringBitmap/roaring v1.2.1
go: downloading github.com/anacrolix/chansync v0.3.0
go: downloading github.com/anacrolix/dht/v2 v2.19.0
go: downloading github.com/anacrolix/generics v0.0.0-20220618083756-f99e35403a60
go: downloading github.com/anacrolix/go-libutp v1.2.0
go: downloading github.com/anacrolix/log v0.13.2-0.20220711050817-613cb738ef30
go: downloading github.com/anacrolix/missinggo/perf v1.0.0
go: downloading github.com/anacrolix/missinggo/v2 v2.7.0
go: downloading github.com/anacrolix/multiless v0.3.0
go: downloading github.com/anacrolix/sync v0.4.0
go: downloading github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96
go: downloading github.com/anacrolix/utp v0.1.0
go: downloading github.com/bahlo/generic-list-go v0.2.0
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading github.com/google/btree v1.1.2
go: downloading github.com/lispad/go-generics-tools v1.1.0
go: downloading go.opentelemetry.io/otel v1.8.0
go: downloading go.opentelemetry.io/otel/trace v1.8.0
go: downloading golang.org/x/time v0.0.0-20220609170525-579cf78fd858
go: downloading github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417
go: downloading golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d
go: downloading github.com/anacrolix/mmsg v1.0.0
go: downloading github.com/anacrolix/envpprof v1.2.1
go: downloading github.com/edsrzf/mmap-go v1.1.0
go: downloading github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0
go: downloading github.com/tidwall/btree v1.3.1
go: downloading crawshaw.io/sqlite v0.3.3-0.20210127221821-98b1f83c5508
go: downloading go.etcd.io/bbolt v1.3.6
go: downloading github.com/go-logr/logr v1.2.3
go: downloading github.com/benbjohnson/immutable v0.3.0
go: downloading golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
go: downloading github.com/go-logr/stdr v1.2.2
go: downloading github.com/anacrolix/stm v0.4.0
go: downloading github.com/alecthomas/atomic v0.1.0-alpha2
go: downloading github.com/mschoch/smat v0.2.0
go: downloading github.com/bits-and-blooms/bitset v1.2.2
panic: internal error: can't find reason for requirement on github.com/mattn/go-sqlite3@v1.14.15

goroutine 1 [running]:
cmd/go/internal/modget.(*resolver).updateBuildList.func1({{0xc0005f0ae0?, 0xc001149b78?}, {0xc000026e68?, 0xc000953080?}})
/usr/lib/go/src/cmd/go/internal/modget/get.go:1760 +0x114
cmd/go/internal/modget.(*resolver).updateBuildList(0xc0001e4200, {0xb2e690, 0xc0000260b8}, {0x0, 0x0, 0x0})
/usr/lib/go/src/cmd/go/internal/modget/get.go:1765 +0x597
cmd/go/internal/modget.(*resolver).applyUpgrades(0xc0001e4200, {0xb2e690, 0xc0000260b8}, {0x0?, 0x1?, 0x472465?})
/usr/lib/go/src/cmd/go/internal/modget/get.go:1312 +0x105
cmd/go/internal/modget.runGet({0xb2e690, 0xc0000260b8}, 0xc00002a4e0?, {0xc0000241a0, 0x1, 0x1})
/usr/lib/go/src/cmd/go/internal/modget/get.go:351 +0x45e
main.invoke(0xe28fa0, {0xc000024190, 0x2, 0x2})
/usr/lib/go/src/cmd/go/main.go:225 +0x34e
main.main()
/usr/lib/go/src/cmd/go/main.go:179 +0x7d1

I'm afraid i'm going to need someone who is much more experienced with the golang module system than i am to fix this one.

@ooninoob
Copy link
Contributor Author

ooninoob commented Nov 25, 2022

Continuing investigation for the SQLite issue...

It seems i can get around the golang panic by:

  • commenting out github.com/mattn/go-sqlite3 in go.mod
  • go get github.com/anacrolix/dht/v2
  • go get github.com/anacrolix/torrent
  • uncommenting github.com/mattn/go-sqlite3 in go.mod

Now i run into linking issues due to duplicate definitions:

/usr/lib/go/pkg/tool/linux_amd64/link: running g++ failed: exit status 1
/usr/bin/ld: /tmp/go-link-3636914156/000060.o: in function `sqlite3_mutex_free':
/home/baraka/go/pkg/mod/crawshaw.io/sqlite@v0.3.3-0.20210127221821-98b1f83c5508/./c/sqlite3.c:25892: multiple definition of `sqlite3_mutex_free'; /tmp/go-link-3636914156/000034.o:/home/baraka/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.15/sqlite3-binding.c:27618: first defined here

This can be worked around by adding --ldflags '-extldflags "-Wl,--allow-multiple-definition"' to the compilation flags. For example:

go test -race --ldflags '-extldflags "-Wl,--allow-multiple-definition"' ./...

However, it's not good for the project to require manual flags handling just for a single probe. But it seems from reading around various issues regarding feature tags and build flags that go devs are very hostile to declaring default compilation flags in go.mod, instead recommending to use an external build system.

But i've been thinking we don't need the sqlite features of torrent/dht in this probe. SQLite features are not even in the code paths used, so it's not clear to me why go would try to compile this second copy of SQLite in the first place. I've been trying to fork anacrolix modules to remove the hard-coded SQLite dependency by "replace"ing modules in the go.mod declaration.

However, i have so far failed to get this working because:

  • if i just replace the top-level module like github.com/anacrolix/missinggo with a local path, go complains that github.com/anacrolix/missinggo/perf is ambiguous and could refer to either the local path or the go pkg
  • if i replace the top level module as above, and replace also github.com/anacrolix/missinggo/perf with localpath/perf, go complains that localpath/perf/go.mod does not exist
  • if i replace the top level module as above, and replace also github.com/anacrolix/missinggo/perf with localpath, go complains that github.com/anacrolix/missinggo/perf is ambiguous and could refer to either localpath or localpath/perf

What i have not tried so far is to fork the repo on github and use imports like github.com/ooninoob/missinggo. Maybe that would fix it.

Does an experienced gopher have a clue about how the module system works and what would be a simple and recommended way to go? I have read tons of documentation and tutorial about go modules but could not find what i was looking for. What i'm trying to achieve would be extra simple in C or Rust so i'm either missing the obvious (very likely), or the golang module system is entirely useless.

I hope i don't sound too angry here, but i've just lost hours and hours trying to work around this problem so i'm a little sour. Before we find a proper solution, i'll push the go.mod that requires the explicit build flags so that we can at least get some proper test runs. Actually that's already the state this branch is in, my bad.

PS: I should mention that anacrolix/torrent also has a "nosqlite" build tag, making it possible to go test -race -tags nosqlite ./.... But as explained, requiring manual flags for builds and tests sounds like a suboptimal solution, and go devs don't want to make such config part of go.mod.

@ooninoob
Copy link
Contributor Author

I have some questions about the DHT data model and what to measure precisely. For now in the PR i have two modes of operation:

  • try a list of default bootstrap nodes as part of a single DHT run
  • resolve a single bootstrap node, and try all addresses as separate DHT runs

I'm currently refactoring the code to make it more readable, and i'm slowly starting to think that this is not consistent. But i don't know precisely what would be interesting to measure: do we care that separate bootstrap nodes are reachable from the probe? If so, do we care what addresses were reachable (like IPv6 works but not IPv4)? Or do we just care that the DHT is globally reachable from a given list of bootstrap nodes?

If we want per-IP bootstrapping feedback, should i store the DNS results globally as is currently the case? Or remove the global DNS results test key, place it in individual test keys, then have redundant DNS information for every IP matching a given hostname? Or create a new layer so that a run consists of a list of DNS queries and a list of individual DHT bootstrapping measurements per IP?

One last question: when resolving the hostnames for the bootstrap nodes, i assume failing all DNS resolution should result in a global failure. However, should individual hostname resolution failure add to the failure key as well? In most other tests (eg. SMTP/IMAP) failing to resolve logically is a global failure, but in the case of DHT probing where we try a bunch of different nodes, it's not clear to me that failing to resolve a few nodes is actually a failure. It stills seems important to expose that information, so even though it's already in the DNS results key, should i add a FailedHostname key for easier parsing?

@hellais
Copy link
Member

hellais commented Nov 25, 2022

I did some light testing of the bittorrent test.

It compiles, it runs and it produces a JSONL file with some information inside of it.

I think from the perspective of what can be expected to have built in a hackathon this fits the bill. Good job! 🥳

That said I will need some more time to provide an in depth review of how the test works, the data format it produces, how we would go about analyzing the data and what we care to measure.

It's a great MVP and I think you already highlighted some of the key areas that need further work before it's ready for prime-time.

@anacrolix
Copy link

@bcmills, is the above useful regarding dependency resolution failures?

@ooninoob
Copy link
Contributor Author

@anacrolix Since you're around here, how realistic would it be to remove hard-coded sqlite dependency in your packages?

It's currently imported by missinggo which makes it a dependency in almost all your packages. From a quick github search it seems those helpers are not currently used in your repos so maybe they could just be removed? As for the torrent package, could sqlite (and many other storages) be moved into a separate repository/package? or does go require that you implement the storage interfaces from the same package?

If that sounds possible and fine to you i'd be happy to make a PR, although if you'd like to take care of this yourself i'll leave that up to you (since it anyway requires bumping missinggo/torrent dep and go mod tidy in several repos to remove the indirect dependency completely).

@bcmills
Copy link

bcmills commented Nov 28, 2022

@anacrolix, thanks for flagging this — looks like more solid evidence for golang/go#55955 being deeply related to golang/go#56494 (and I'm actively working on a fix, but it's complicated).

I don't have a good workaround at the moment except for using go mod tidy instead of go get. (The cmd/go bug only affects go get.)

@anacrolix
Copy link

@ooninoob I'm happy to remove it where possible. Note that the only issue with sqlite should be the linking at the end, or any CGO compilation on platforms that don't support it. I think there are several sqlite packages floating around that link sqlite in varying manners so they should be made to defer to the final applications linking preferences for those. Please link me to any specific examples (maybe as issues in those repos so as not to clutter this issue), or submit PRs where you deem appropriate.

@anacrolix
Copy link

Also sorry for the pain in using anacrolix/torrent and some of the other modules at the moment, they're very old as Go is concerned, and have very long entangled histories, and adopted Go modules very early, so they're in the sweet spot as far as triggering package dependency management bugs.

@anacrolix
Copy link

@anacrolix Since you're around here, how realistic would it be to remove hard-coded sqlite dependency in your packages?

I've taken a look. I think the crawshaw.io/sqlite dependency in anacrolix/torrent (via storage) is conflicting with your use of mattn/sqlite? I was able to get this PR to build with anacrolix/torrent#421 (comment). Specifically I ran go test -tags libsqlite3 -race ./.... That might unstick you in the short-term.

It's currently imported by missinggo which makes it a dependency in almost all your packages. From a quick github search it seems those helpers are not currently used in your repos so maybe they could just be removed?

Could you link to those ones? I still can't find them.

As for the torrent package, could sqlite (and many other storages) be moved into a separate repository/package? or does go require that you implement the storage interfaces from the same package?

I'll take a look at that one now.

If that sounds possible and fine to you i'd be happy to make a PR, although if you'd like to take care of this yourself i'll leave that up to you (since it anyway requires bumping missinggo/torrent dep and go mod tidy in several repos to remove the indirect dependency completely).

I think I already covered that in #986 (comment).

@anacrolix
Copy link

Looks like you can also build with -tags nosqlite from here: https://github.com/anacrolix/torrent/blob/3e0f34934df4f109b39b5e28e674b438732a7ab8/storage/sqlite-piece-completion.go#L5. sqlite is used as the default piece completion cache, which is pretty reasonable and can't easily be moved to another package without losing it as the default.

@ooninoob
Copy link
Contributor Author

Also sorry for the pain in using anacrolix/torrent and some of the other modules at the moment

Don't worry, it's already great that you've made such work so far, and we can work out the quirks as we go :)

That might unstick you in the short-term.

Like i said, it's possible by passing CGO flags or by passing a nosqlite tag to bypass the issue. However it's not good developer UX to require passing flags manually just to get something to build... So if we can find another solution i'm interested.

Could you link to those ones? I still can't find them.

Here you go

sqlite is used as the default piece completion cache, which is pretty reasonable and can't easily be moved to another package without losing it as the default.

I don't know much about go modules. Would it be possible to move most of the torrent stuff inside a torrent-core package, and reexpose it inside torrent with default sqlite storage? That way we could use torrent-core here in this PR and people would keep using torrent with default SQLite storage without breaking API/behavior, but torrent-core would have zero sqlite dependency.

@ooninoob
Copy link
Contributor Author

I've pushed more information in the DHT test output. I've also pushed an initial Bittorrent test which fails. From a first glance it seems related to the DHT test issue. The two nodes have back and forth DHT queries/responses but nothing seems to be done with it.

Output from the Bittorrent test:


../go/pkg/mod/crawshaw.io/sqlite@v0.3.3-0.20210127221821-98b1f83c5508/./c/sqlite3.c:220863:18: warning: ‘memcpy’ specified bound 18446744073709551615 exceeds maximu
220863 |     if( nToken ) memcpy(&buf.p[1], pToken, nToken);
       |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-11-30T16:17:56+0100 ERR [dht 127.0.0.1:42069 github.com/anacrolix/dht/v2.(*Server).TableMaintainer:1395]: error bootstrapping during bucket refresh: no initial
2022-11-30T16:17:56+0100 ERR [dht [::1]:42069 github.com/anacrolix/dht/v2.(*Server).TableMaintainer:1395]: error bootstrapping during bucket refresh: no initial nod
Starting to seed
Complete magnet: magnet:?xt=urn:btih:2a5c243d7ccf69b086cdc59d146e03d3a4b62ccd&dn=Readme.md&x.pe=127.0.0.1:42069&x.pe=[::1]:42069&x.pe=127.0.0.1:42069&x.pe=[::1]:420
2022/11/30 16:17:56  info Using temporary directory /tmp/ooni3424087457
2022/11/30 16:18:26  info Listen port: 34967
Peer ID: "-GT0003-\xe5+\x90\xf0\xe9\xf1\x86\x10\x1d\xe3T\xa2"
Extension bits: 0000000000100005
Announce key: 1de354a2
Banned IPs: 0
udp DHT server at 0.0.0.0:34967:
 ID: 852b58d8fbec6e2ec44bc529fc8d7af1d3fc5569
(dht.ServerStats) {
 GoodNodes: (int) 1,
 Nodes: (int) 1,
 OutstandingTransactions: (int) 0,
 SuccessfulOutboundAnnouncePeerQueries: (int64) 0,
 BadNodes: (uint) 0,
 OutboundQueriesAttempted: (int64) 5
}
udp DHT server at [::]:34967:
 ID: 6c3d29de6e440dd3d1fe91e503273db86be07205
(dht.ServerStats) {
 GoodNodes: (int) 1,
 Nodes: (int) 1,
 OutstandingTransactions: (int) 0,
 SuccessfulOutboundAnnouncePeerQueries: (int64) 0,
 BadNodes: (uint) 0,
 OutboundQueriesAttempted: (int64) 5
}
(*torrent.ConnStats)(0xc0000e0480)({
 BytesWritten: (torrent.Count) 0,
 BytesWrittenData: (torrent.Count) 0,
 BytesRead: (torrent.Count) 0,
 BytesReadData: (torrent.Count) 0,
 BytesReadUsefulData: (torrent.Count) 0,
 BytesReadUsefulIntendedData: (torrent.Count) 0,
 ChunksWritten: (torrent.Count) 0,
 ChunksRead: (torrent.Count) 0,
 ChunksReadUseful: (torrent.Count) 0,
 ChunksReadWasted: (torrent.Count) 0,
 MetadataChunksRead: (torrent.Count) 0,
 PiecesDirtiedGood: (torrent.Count) 0,
 PiecesDirtiedBad: (torrent.Count) 0
})
# Torrents: 1

Readme.md

Infohash: 2a5c243d7ccf69b086cdc59d146e03d3a4b62ccd
Metadata length: 0
Metadata have:
Piece length: no info
Reader Pieces:
Enabled trackers:
URL Extra
DHT Announces: 2
(torrent.TorrentStats) {
ConnStats: (torrent.ConnStats) {
BytesWritten: (torrent.Count) 0,
BytesWrittenData: (torrent.Count) 0,
BytesRead: (torrent.Count) 0,
BytesReadData: (torrent.Count) 0,
BytesReadUsefulData: (torrent.Count) 0,
BytesReadUsefulIntendedData: (torrent.Count) 0,
ChunksWritten: (torrent.Count) 0,
ChunksRead: (torrent.Count) 0,
ChunksReadUseful: (torrent.Count) 0,
ChunksReadWasted: (torrent.Count) 0,
MetadataChunksRead: (torrent.Count) 0,
PiecesDirtiedGood: (torrent.Count) 0,
PiecesDirtiedBad: (torrent.Count) 0
},
TotalPeers: (int) 0,
PendingPeers: (int) 0,
ActivePeers: (int) 0,
ConnectedSeeders: (int) 0,
HalfOpenPeers: (int) 0,
PiecesComplete: (int) 0
}

--- FAIL: TestMeasurer_run (30.04s)
--- FAIL: TestMeasurer_run/with_local_peer (30.04s)
bittorrent_test.go:155: metainfo_timeout
FAIL
exit status 1
FAIL github.com/ooni/probe-cli/v3/internal/engine/experiment/bittorrent 30.069s

The first errors complain that the first node (the bootstrap node) has no bootstrap nodes to bootstrap the DHT with, which is intentional because we're running the test fully offline on the loopback interface. Then the second client gets started successfully with the first bootstrap node... but then the announce produces nothing.

The Client from the probe seems to have found a good node for each interface (IPv4/IPv6 localhost) but it doesn't find the torrent in the announce. I've attached the Wireshark capture from the test run, please rename it to .pcapng to open in wireshark (Github upload doesn't allow such file extensions).

bittorrent.txt

I'm wondering if maybe anacrolix/dht ignores DHT bootstrap nodes in the announce responses? That theory would explain why both DHT/Bittorrent tests fail, while both probes run fine against mainline DHT where bootstrap nodes are just that (don't actually announce/seed hashes) but more nodes are available.

@anacrolix
Copy link

Like i said, it's possible by passing CGO flags or by passing a nosqlite tag to bypass the issue. However it's not good developer UX to require passing flags manually just to get something to build... So if we can find another solution i'm interested.

Unfortunately Go doesn't provide more advanced compilation where we can detect the presence of other sqlite implementations etc. Additionally, if I make your case with 2 sqlite repos work by default, then sqlite would necessarily be disabled by default without any tags (and I would forever be telling users to add -tags anacrolix_sqlite). I've run into a few situations where upstream packages needed annoying tags to work with correctly and got pushback when telling them to change the defaults. I've finally come to realise why 😬.

Could you link to those ones? I still can't find them.

Here you go

Both direct usages are in subpackages that should only be imported when required, so quite isolated. The other reference is a generic conversion utility type, and doesn't pull in any actual sqlite packages.

I don't know much about go modules. Would it be possible to move most of the torrent stuff inside a torrent-core package, and reexpose it inside torrent with default sqlite storage? That way we could use torrent-core here in this PR and people would keep using torrent with default SQLite storage without breaking API/behavior, but torrent-core would have zero sqlite dependency.

Not without losing any kind of "default" behaviour. I would need to rely on examples that do stuff like import client_default "..."; client_default.ApplySqliteConfigStuff(). Without knowing more, I think I should document up front that passing -tags libsqlite3 is necessary if github.com/mattn/go-sqlite3 is used elsewhere in the build.

@anacrolix
Copy link

I'm wondering if maybe anacrolix/dht ignores DHT bootstrap nodes in the announce responses? That theory would explain why both DHT/Bittorrent tests fail, while both probes run fine against mainline DHT where bootstrap nodes are just that (don't actually announce/seed hashes) but more nodes are available.

Try my earlier recommendation about secure nodes. Set NoSecurity on your DHT server configurations if you intend to do testing on a private network.

@ooninoob
Copy link
Contributor Author

ooninoob commented Dec 1, 2022

Set NoSecurity on your DHT server configurations if you intend to do testing on a private network.

Sorry i missed that part. I just tried and it produces exactly the same results. However, by forcing to use IPv4, it seems the test now pass, even without setting NoSecurity:


{
  "queries": null,
  "runs": [
    {
      "bootstrap_nodes": [
        "127.0.0.1:33107"
      ],
      "bootstrap_num": 1,
      "peers_tried_num": 1,
      "peers_responded_num": 1,
      "infohash_peers_num": 1,
      "infohash_peers": [
        "127.0.0.1:33107"
      ],
      "failure": ""
    }
  ],
  "failure": ""
}

I don't have IPv6 on my home network, but i do have IPv6 on the loopback interface (who doesn't?). I'm not sure if that's a anacrolix/dht bug or something else. To quote your package's docs, i think aliens are involved here :)

I'll try and see how that affects the Bittorrent test, although it seems that the torrent package runs one DHT server per address and used both IPv4 and IPv6 in my case. I'd also be curious if someone can reproduce on their own machine that the test passes with IPv4 but fails with IPv6.

EDIT: NoSecurity has no effect on the Bittorrent test, and i don't see how forcing IPv4 would help because it's already enabled in one of the DHT servers in each torrent.Client. Test output:


../go/pkg/mod/crawshaw.io/sqlite@v0.3.3-0.20210127221821-98b1f83c5508/./c/sqlite3.c:220863:18: warning: ‘memcpy’ specified bound 18446744073709551615 exceeds maximu
220863 |     if( nToken ) memcpy(&buf.p[1], pToken, nToken);
       |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-12-01T12:38:19+0100 ERR [dht 127.0.0.1:42069 github.com/anacrolix/dht/v2.(*Server).TableMaintainer:1395]: error bootstrapping during bucket refresh: no initial
2022-12-01T12:38:19+0100 ERR [dht [::1]:42069 github.com/anacrolix/dht/v2.(*Server).TableMaintainer:1395]: error bootstrapping during bucket refresh: no initial nod
Starting to seed
Complete magnet: magnet:?xt=urn:btih:2a5c243d7ccf69b086cdc59d146e03d3a4b62ccd&dn=Readme.md&x.pe=127.0.0.1:42069&x.pe=[::1]:42069&x.pe=127.0.0.1:42069&x.pe=[::1]:420
2022/12/01 12:38:19  info Using temporary directory /tmp/ooni2781171065
2022/12/01 12:38:49  info Listen port: 37511
Peer ID: "-GT0003-\xf3\"t\xe6\x17N\x0f\x81\xdb\xeaul"
Extension bits: 0000000000100005
Announce key: -24158a94
Banned IPs: 0
udp DHT server at 0.0.0.0:37511:
 ID: c156ff804eda35db976029432068c31ce29c27cd
(dht.ServerStats) {
 GoodNodes: (int) 1,
 Nodes: (int) 1,
 OutstandingTransactions: (int) 0,
 SuccessfulOutboundAnnouncePeerQueries: (int64) 0,
 BadNodes: (uint) 0,
 OutboundQueriesAttempted: (int64) 5
}
udp DHT server at [::]:37511:
 ID: 7a6bc8f718c30625debadb70b8a6ac3e57a94e3e
(dht.ServerStats) {
 GoodNodes: (int) 1,
 Nodes: (int) 1,
 OutstandingTransactions: (int) 0,
 SuccessfulOutboundAnnouncePeerQueries: (int64) 0,
 BadNodes: (uint) 0,
 OutboundQueriesAttempted: (int64) 5
}
(*torrent.ConnStats)(0xc000356000)({
 BytesWritten: (torrent.Count) 0,
 BytesWrittenData: (torrent.Count) 0,
 BytesRead: (torrent.Count) 0,
 BytesReadData: (torrent.Count) 0,
 BytesReadUsefulData: (torrent.Count) 0,
 BytesReadUsefulIntendedData: (torrent.Count) 0,
 ChunksWritten: (torrent.Count) 0,
 ChunksRead: (torrent.Count) 0,
 ChunksReadUseful: (torrent.Count) 0,
 ChunksReadWasted: (torrent.Count) 0,
 MetadataChunksRead: (torrent.Count) 0,
 PiecesDirtiedGood: (torrent.Count) 0,
 PiecesDirtiedBad: (torrent.Count) 0
})
# Torrents: 1

Readme.md

Infohash: 2a5c243d7ccf69b086cdc59d146e03d3a4b62ccd
Metadata length: 0
Metadata have:
Piece length: no info
Reader Pieces:
Enabled trackers:
URL Extra
DHT Announces: 2
(torrent.TorrentStats) {
ConnStats: (torrent.ConnStats) {
BytesWritten: (torrent.Count) 0,
BytesWrittenData: (torrent.Count) 0,
BytesRead: (torrent.Count) 0,
BytesReadData: (torrent.Count) 0,
BytesReadUsefulData: (torrent.Count) 0,
BytesReadUsefulIntendedData: (torrent.Count) 0,
ChunksWritten: (torrent.Count) 0,
ChunksRead: (torrent.Count) 0,
ChunksReadUseful: (torrent.Count) 0,
ChunksReadWasted: (torrent.Count) 0,
MetadataChunksRead: (torrent.Count) 0,
PiecesDirtiedGood: (torrent.Count) 0,
PiecesDirtiedBad: (torrent.Count) 0
},
TotalPeers: (int) 0,
PendingPeers: (int) 0,
ActivePeers: (int) 0,
ConnectedSeeders: (int) 0,
HalfOpenPeers: (int) 0,
PiecesComplete: (int) 0
}

@ooninoob
Copy link
Contributor Author

ooninoob commented Dec 1, 2022

Both direct usages are in subpackages that should only be imported when required, so quite isolated.

I don't think that is the case, because those subpackages use missinggo's go.mod, so it seems sqlite is declared as a "global" dependency for the missinggo import. For example, anacrolix/tagflag only requires the top-level missinggo package, does not use a specific runid subpackage, yet inherits sqlite as a dependency in its go.sum.

Not without losing any kind of "default" behaviour. I would need to rely on examples that do stuff like import client_default "..."; client_default.ApplySqliteConfigStuff()

I'm still very unfamiliar with go, but it appears to be possible to reexport stuff from a different package while overriding certain methods. In which case anacrolix/torrent could reexport anacrolix/torrentcore types while making sure SQLite is the default storage in that case, and such a transition should be 100% transparent to API consumers (because the exposed types would still be named torrent.Whatever, not torrentcore.Whatever). Am i misunderstanding this golang pattern?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants