-
Notifications
You must be signed in to change notification settings - Fork 63
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
Write a design document for how to support richer testing input #1295
Comments
This PoC investigates whether it would be possible to run experiments directly without using the internal/engine abstraction as the middle man. The PoC is in the context of ooni/ooni.org#1295
As explained in ooni/2023-05-richer-input@7871d3b, the https://github.com/ooni/2023-05-richer-input contains a prototype that explores the richer input domain and redesigns ooniprobe around richer input. Notably, such a repository contains an initial design document. |
So, here's the plan I propose for starting to supporting and experimenting with richer input. Check-in API We will keep using {
"tests": {
"dnscheck": {
"report_id": "", // same as before
"targets": [{
"input": "https://dns.google/dns-query",
"options": {"HTTP3Enabled": true}
}]
}
}
} In other words, this means that we will have a specific richer input definition for each experiment that depends on the characteristics of each experiment. The probe will process this structure and act accordingly. With richer input we aim to solve the following experiment needs:
Regarding disabling riseupvpn, we already implemented the core functionality in ooni/probe-cli#1355. Probe To implement this plan we need to ensure that we periodically call check-in. The best course of action would probably be to refafctor the code such that we call check-in at the beginning of a measurement session. This refactoring would requires changes in the probe-cli, probe-android, and probe-ios codebases. Now, because of the backend changes described above, the check-in response contains richer input. We already have a package in the probe called We will also refactor how we run experiments. We will define the following JSON structure as the most fundamental pure-data structure representing executing a single experiment with a single input and some options: {
"input": "https://dns.google/dns-query",
"options": {"HTTP3Enabled": true},
"test_name": "dnscheck"
} Note how this data structure corresponds exactly to executing this code: ./miniooni dnscheck -O HTTP3Enabled=true -i https://dns.google/dnsquery So, if the user runs the above commands, ./miniooni dnscheck -O HTTP3Enabled=true -i https://dns.google/dnsquery -i https://example.com/dns-query We will translate the command line invocation to two data structures, one for each input. Additionally, if the user runs: ./miniooni dnscheck We will use the OONI Run v2 An OONI Run v2 descriptor contains a superset of the following information: {
"nettests": [{
"inputs": ["https://dns.google/dns-query"],
"options": {"HTTP3Enabled": true},
"test_name": "dnscheck"
}]
} Thus, note how OONI Run v2 and Hence, supporting richer input for Data processing pipeline We add richer input to dnscheck, riseupvpn, signal, stunreachability, and torsf. Thus, we need to ask the question of where and how to process the richer-input-enhanced measurement results.
OONI Explorer We will start exposing information about observations extracted using ooni/data. Required Cleanups We can safely delete Rejected Designs In ooni/2023-05-richer-input, we experimented with several designs for implementing richer input. The most promising design was the one based on an external DSL written in JSON, which described how we would run experiments. Unfortunately, this design does not allow for computing the results of measurements directly in the probe given that the DSL is very limited and only allows for composing basic measurement primitives (e.g., DNS lookups, TCP connect, TLS handshake). It seems the correct way forward in this respect would be to write experiments in a high-level language (e.g., JavaScript) and serve this code to probes. However, this design is way beyond the original intent and scope of richer input, therefore we should shelve it for now. |
I have started to create follow-up issues for this issue. However, I am not done. When I will be done, I will close this issue. I'll see to do this as part of the current Sprint. |
@jbonisteel today we need to discuss whether to close this issue in light of the set of issues I have created or whether we need to additionally scope down and split some backend or explorer issues. |
This issue is a child issue of #1291. The aim is to write a design document explaining how richer testing input will flow from the backend, to the probe, to the generated data, to the pipeline, and to explorer.
The text was updated successfully, but these errors were encountered: