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
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package resolver
 | |
| 
 | |
| import (
 | |
| 	"net"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| func GenReplyError(t *testing.T, code int) []byte {
 | |
| 	question := dns.Question{
 | |
| 		Name:   dns.Fqdn("x.org"),
 | |
| 		Qtype:  dns.TypeA,
 | |
| 		Qclass: dns.ClassINET,
 | |
| 	}
 | |
| 	query := new(dns.Msg)
 | |
| 	query.Id = dns.Id()
 | |
| 	query.RecursionDesired = true
 | |
| 	query.Question = make([]dns.Question, 1)
 | |
| 	query.Question[0] = question
 | |
| 	reply := new(dns.Msg)
 | |
| 	reply.Compress = true
 | |
| 	reply.MsgHdr.RecursionAvailable = true
 | |
| 	reply.SetRcode(query, code)
 | |
| 	data, err := reply.Pack()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	return data
 | |
| }
 | |
| 
 | |
| func GenReplySuccess(t *testing.T, qtype uint16, ips ...string) []byte {
 | |
| 	question := dns.Question{
 | |
| 		Name:   dns.Fqdn("x.org"),
 | |
| 		Qtype:  qtype,
 | |
| 		Qclass: dns.ClassINET,
 | |
| 	}
 | |
| 	query := new(dns.Msg)
 | |
| 	query.Id = dns.Id()
 | |
| 	query.RecursionDesired = true
 | |
| 	query.Question = make([]dns.Question, 1)
 | |
| 	query.Question[0] = question
 | |
| 	reply := new(dns.Msg)
 | |
| 	reply.Compress = true
 | |
| 	reply.MsgHdr.RecursionAvailable = true
 | |
| 	reply.SetReply(query)
 | |
| 	for _, ip := range ips {
 | |
| 		switch qtype {
 | |
| 		case dns.TypeA:
 | |
| 			reply.Answer = append(reply.Answer, &dns.A{
 | |
| 				Hdr: dns.RR_Header{
 | |
| 					Name:   dns.Fqdn("x.org"),
 | |
| 					Rrtype: qtype,
 | |
| 					Class:  dns.ClassINET,
 | |
| 					Ttl:    0,
 | |
| 				},
 | |
| 				A: net.ParseIP(ip),
 | |
| 			})
 | |
| 		case dns.TypeAAAA:
 | |
| 			reply.Answer = append(reply.Answer, &dns.AAAA{
 | |
| 				Hdr: dns.RR_Header{
 | |
| 					Name:   dns.Fqdn("x.org"),
 | |
| 					Rrtype: qtype,
 | |
| 					Class:  dns.ClassINET,
 | |
| 					Ttl:    0,
 | |
| 				},
 | |
| 				AAAA: net.ParseIP(ip),
 | |
| 			})
 | |
| 		}
 | |
| 	}
 | |
| 	data, err := reply.Pack()
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	return data
 | |
| }
 |