ooni-probe-cli/internal/engine/experiment
Simone Basso 8a0beee808
refactor: start pivoting netx (#396)
What do I mean by pivoting? Netx is currently organized by row:

```
               | dialer | quicdialer | resolver | ...
 saving        |        |            |          | ...
 errorwrapping |        |            |          | ...
 logging       |        |            |          | ...
 mocking/sys   |        |            |          | ...
```

Every row needs to implement saving, errorwrapping, logging, mocking (or
adapting to the system or to some underlying library).

This causes cross package dependencies and, in turn, complexity. For
example, we need the `trace` package for supporting saving.

And `dialer`, `quickdialer`, et al. need to depend on such a package.

The same goes for errorwrapping.

This arrangement further complicates testing. For example, I am
currently working on https://github.com/ooni/probe/issues/1505 and
I realize it need to repeat integration tests in multiple places.

Let's say instead we pivot the above matrix as follows:

```
             | saving | errorwrapping | logging | ...
 dialer      |        |               |         | ...
 quicdialer  |        |               |         | ...
 logging     |        |               |         | ...
 mocking/sys |        |               |         | ...
 ...
```

In this way, now every row contains everything related to a specific
action to perform. We can now share code without relying on extra
support packages. What's more, we can write tests and, judding from
the way in which things are made, it seems we only need integration
testing in `errorwrapping` because it's where data quality matters
whereas, in all other cases, unit testing is fine.

I am going, therefore, to proceed with these changes and "pivot"
`netx`. Hopefully, it won't be too painful.
2021-06-23 15:53:12 +02:00
..
dash feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
dnscheck feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
example feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
fbmessenger feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
hhfm cleanup: remove ConnID, DialID, TransactionID (#395) 2021-06-23 13:36:45 +02:00
hirl feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
httphostheader feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
ndt7 refactor: start pivoting netx (#396) 2021-06-23 15:53:12 +02:00
psiphon feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
riseupvpn feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
run feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
signal feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
sniblocking feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
stunreachability feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
telegram feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
tlstool feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
tor refactor: move scrubbingLogger to the scrubber pkg (#394) 2021-06-22 14:43:58 +02:00
torsf feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
urlgetter feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
webconnectivity feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
whatsapp feat: tutorial on how to write the torsf experiment (#390) 2021-06-22 00:12:03 +02:00
README.md chore: merge probe-engine into probe-cli (#201) 2021-02-02 12:05:47 +01:00

Directory github.com/ooni/probe-engine/experiment

This directory contains the implementation of all the supported experiments, one for each directory. The OONI spec repository contains a description of all the specified experiments.

Note that in the OONI spec repository experiments are called nettests. Originally, they were also called nettests here but that created confusion with nettests in ooni/probe-cli. Therefore, we now use the term experiment to indicate the implementation and the term nettest to indicate the user facing view of such implementation.

Note that some experiments implemented here are not part of the OONI specification. For example, the urlgetter experiment is not in the OONI spec repository. The reason why this happens is that urlgetter is an experiment "library" that other experiments use to implement their functionality.

Likewise, the example experiment is a minimal experiment that does nothing and you could use to bootstrap the implementation of a new experiment. Of course, this experiment is not part of the OONI specification.