This is how I did it: 1. `git clone https://github.com/ooni/probe-engine internal/engine` 2. ``` (cd internal/engine && git describe --tags) v0.23.0 ``` 3. `nvim go.mod` (merging `go.mod` with `internal/engine/go.mod` 4. `rm -rf internal/.git internal/engine/go.{mod,sum}` 5. `git add internal/engine` 6. `find . -type f -name \*.go -exec sed -i 's@/ooni/probe-engine@/ooni/probe-cli/v3/internal/engine@g' {} \;` 7. `go build ./...` (passes) 8. `go test -race ./...` (temporary failure on RiseupVPN) 9. `go mod tidy` 10. this commit message Once this piece of work is done, we can build a new version of `ooniprobe` that is using `internal/engine` directly. We need to do more work to ensure all the other functionality in `probe-engine` (e.g. making mobile packages) are still WAI. Part of https://github.com/ooni/probe/issues/1335
144 lines
3.4 KiB
Go
144 lines
3.4 KiB
Go
package internal_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/engine/experiment/tlstool/internal"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/internal/randx"
|
|
)
|
|
|
|
func TestSplitter84restSmall(t *testing.T) {
|
|
input := []byte("1111222")
|
|
output := internal.Splitter84rest(input)
|
|
if len(output) != 1 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != "1111222" {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
}
|
|
|
|
func TestSplitter84restGood(t *testing.T) {
|
|
input := []byte("1111222233334")
|
|
output := internal.Splitter84rest(input)
|
|
if len(output) != 3 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != "11112222" {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
if string(output[1]) != "3333" {
|
|
t.Fatal("invalid output[1]")
|
|
}
|
|
if string(output[2]) != "4" {
|
|
t.Fatal("invalid output[2]")
|
|
}
|
|
}
|
|
|
|
func TestSplitter3264randSmall(t *testing.T) {
|
|
input := randx.Letters(64)
|
|
output := internal.Splitter3264rand([]byte(input))
|
|
if len(output) != 1 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != input {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
}
|
|
|
|
func TestSplitter3264Works(t *testing.T) {
|
|
input := randx.Letters(65)
|
|
output := internal.Splitter3264rand([]byte(input))
|
|
for i := 0; i < 32; i++ {
|
|
if len(output) != 2 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if len(output[0]) < 32 || len(output[0]) > 64 {
|
|
t.Fatal("invalid output[0] length")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSNISplitterEasyCase(t *testing.T) {
|
|
input := []byte("11112222334555foo.barbar.deadbeef.com6777778888")
|
|
sni := []byte("barbar.deadbeef.com")
|
|
output := internal.SNISplitter(input, sni)
|
|
if len(output) != 9 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != "11112222334555foo." {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
if string(output[1]) != "bar" {
|
|
t.Fatal("invalid output[1]")
|
|
}
|
|
if string(output[2]) != "bar" {
|
|
t.Fatal("invalid output[2]")
|
|
}
|
|
if string(output[3]) != ".de" {
|
|
t.Fatal("invalid output[3]")
|
|
}
|
|
if string(output[4]) != "adb" {
|
|
t.Fatal("invalid output[4]")
|
|
}
|
|
if string(output[5]) != "eef" {
|
|
t.Fatal("invalid output[5]")
|
|
}
|
|
if string(output[6]) != ".co" {
|
|
t.Fatal("invalid output[6]")
|
|
}
|
|
if string(output[7]) != "m" {
|
|
t.Fatal("invalid output[7]")
|
|
}
|
|
if string(output[8]) != "6777778888" {
|
|
t.Fatal("invalid output[8]")
|
|
}
|
|
}
|
|
|
|
func TestSNISplitterNoMatch(t *testing.T) {
|
|
input := []byte("11112222334555foo.barbar.deadbeef.com6777778888")
|
|
sni := []byte("www.google.com")
|
|
output := internal.SNISplitter(input, sni)
|
|
if len(output) != 1 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != string(input) {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
}
|
|
|
|
func TestSNISplitterWithUnicode(t *testing.T) {
|
|
input := []byte("11112222334555你好世界.com6777778888")
|
|
sni := []byte("你好世界.com")
|
|
output := internal.SNISplitter(input, sni)
|
|
t.Log(string(output[2]))
|
|
t.Log(output)
|
|
if len(output) != 8 {
|
|
t.Fatal("invalid output length")
|
|
}
|
|
if string(output[0]) != "11112222334555" {
|
|
t.Fatal("invalid output[0]")
|
|
}
|
|
if string(output[1]) != "你" {
|
|
t.Fatal("invalid output[1]")
|
|
}
|
|
if string(output[2]) != "好" {
|
|
t.Fatal("invalid output[2]")
|
|
}
|
|
if string(output[3]) != "世" {
|
|
t.Fatal("invalid output[3]")
|
|
}
|
|
if string(output[4]) != "界" {
|
|
t.Fatal("invalid output[4]")
|
|
}
|
|
if string(output[5]) != ".co" {
|
|
t.Fatal("invalid output[5]")
|
|
}
|
|
if string(output[6]) != "m" {
|
|
t.Fatal("invalid output[6]")
|
|
}
|
|
if string(output[7]) != "6777778888" {
|
|
t.Fatal("invalid output[7]")
|
|
}
|
|
}
|