Move DataDir Caching Responsibility to Caller to allow Cached Consensus
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is failing Details

This commit is contained in:
Sarah Jamie Lewis 2022-01-17 15:54:42 -08:00
parent 04dec3238b
commit 6d5d067d70
3 changed files with 24 additions and 20 deletions

View File

@ -3,6 +3,7 @@ package testing
import (
"git.openprivacy.ca/openprivacy/connectivity/tor"
"git.openprivacy.ca/openprivacy/log"
"io/ioutil"
"math/rand"
"os"
"path"
@ -25,10 +26,15 @@ func TestLaunchTor(t *testing.T) {
t.Fatalf("failed to create torrc file: %v", err)
}
dataDir := ""
if dataDir, err = ioutil.TempDir(path.Join("..", "testing", "tor"), "data-dir-"); err != nil {
t.Fatalf("could not create data dir")
}
// Get the current working director, clean the paths to remove relative references
wd, _ := os.Getwd()
t.Logf("Launching bundled tor at %v", path.Clean(wd+"/../tmp/tor"))
acn, err := tor.NewTorACNWithAuth(path.Clean(wd+"/../tmp/data"), path.Clean(wd+"/../tmp/tor"), controlPort, tor.HashedPasswordAuthenticator{Password: password})
acn, err := tor.NewTorACNWithAuth(path.Clean(wd+"/../tmp/data"), path.Clean(wd+"/../tmp/tor"), dataDir, controlPort, tor.HashedPasswordAuthenticator{Password: password})
if err != nil {
t.Fatalf("tor failed to start: %v", err)
} else {

View File

@ -12,7 +12,6 @@ import (
"git.openprivacy.ca/openprivacy/log"
"golang.org/x/crypto/ed25519"
"golang.org/x/crypto/sha3"
"io/ioutil"
"net"
"net/textproto"
"os"
@ -73,6 +72,7 @@ type torProvider struct {
lastRestartTime time.Time
authenticator tor.Authenticator
isClosed bool
dataDir string
}
func (ols *onionListenService) AddressFull() string {
@ -325,7 +325,7 @@ func (tp *torProvider) restart() {
tp.t = nil
log.Debugf("Restarting Tor Process")
newTp, err := startTor(tp.appDirectory, tp.bundeledTorPath, tp.controlPort, tp.authenticator)
newTp, err := startTor(tp.appDirectory, tp.bundeledTorPath, tp.dataDir, tp.controlPort, tp.authenticator)
if err == nil {
// we need to reassign tor, dialer and callback which will have changed by swapping out
// the underlying connection.
@ -401,19 +401,14 @@ func (tp *torProvider) callStatusCallback(prog int, status string) {
}
// NewTorACNWithAuth creates/starts a Tor ACN and returns a usable ACN object
func NewTorACNWithAuth(appDirectory string, bundledTorPath string, controlPort int, authenticator tor.Authenticator) (connectivity.ACN, error) {
tp, err := startTor(appDirectory, bundledTorPath, controlPort, authenticator)
func NewTorACNWithAuth(appDirectory string, bundledTorPath string, dataDir string, controlPort int, authenticator tor.Authenticator) (connectivity.ACN, error) {
tp, err := startTor(appDirectory, bundledTorPath, dataDir, controlPort, authenticator)
if err == nil {
go tp.monitorRestart()
}
return tp, err
}
// NewTorACN creates/starts a Tor ACN and returns a usable ACN object with a NullAuthenticator - this will fail.
func NewTorACN(appDirectory string, bundledTorPath string) (connectivity.ACN, error) {
return NewTorACNWithAuth(appDirectory, bundledTorPath, 9051, NullAuthenticator{})
}
// newHideCmd creates a Creator function for bine which generates a cmd that one windows will hide the dosbox
func newHideCmd(exePath string) process.Creator {
return process.CmdCreatorFunc(func(ctx context.Context, args ...string) (*exec.Cmd, error) {
@ -450,15 +445,10 @@ func (tp *torProvider) checkVersion() error {
return err
}
func startTor(appDirectory string, bundledTorPath string, controlPort int, authenticator tor.Authenticator) (*torProvider, error) {
func startTor(appDirectory string, bundledTorPath string, dataDir string, controlPort int, authenticator tor.Authenticator) (*torProvider, error) {
torDir := path.Join(appDirectory, "tor")
os.MkdirAll(torDir, 0700)
dataDir := ""
var err error
if dataDir, err = ioutil.TempDir(torDir, "data-dir-"); err != nil {
return nil, fmt.Errorf("unable to create temp data dir: %v", err)
}
tp := &torProvider{authenticator: authenticator, controlPort: controlPort, appDirectory: appDirectory, bundeledTorPath: bundledTorPath, childListeners: make(map[string]*onionListenService), breakChan: make(chan bool), statusCallback: nil, lastRestartTime: time.Now().Add(-restartCooldown)}
@ -502,9 +492,9 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
return nil, fmt.Errorf("could not connect to or start Tor that met requirements (min Tor version 0.3.5.x)")
}
err = tp.checkVersion()
err := tp.checkVersion()
if err == nil {
tp.t.DeleteDataDirOnClose = true
tp.t.DeleteDataDirOnClose = false // caller is repsonsible for dealing with cached information...
tp.dialer, err = tp.t.Dialer(context.TODO(), &tor.DialConf{Authenticator: tp.authenticator})
return tp, err
}

View File

@ -3,6 +3,7 @@ package tor
import (
"fmt"
"git.openprivacy.ca/openprivacy/log"
"io/ioutil"
path "path/filepath"
"testing"
)
@ -22,7 +23,14 @@ func TestTorProvider(t *testing.T) {
NewTorrc().WithControlPort(9051).WithHashedPassword("examplehashedpassword").Build(path.Join("..", "testing", "tor", "torrc"))
log.Debugf("setting tor path %v", torpath)
acn, err := NewTorACNWithAuth(path.Join("../testing/"), torpath, 9051, HashedPasswordAuthenticator{"examplehashedpassword"})
dataDir := ""
var err error
if dataDir, err = ioutil.TempDir(path.Join("..", "testing", "tor"), "data-dir-"); err != nil {
t.Fatalf("could not create data dir")
}
acn, err := NewTorACNWithAuth(path.Join("../testing/"), torpath, dataDir, 9051, HashedPasswordAuthenticator{"examplehashedpassword"})
if err != nil {
t.Error(err)
return
@ -58,7 +66,7 @@ func TestTorProvider(t *testing.T) {
_, err = acn.GetInfo("not_a_real_onion")
if err == nil {
t.Fatalf("GetInfo for non existant onion should have errored")
t.Fatalf("GetInfo for non existent onion should have errored")
}
} else {