Move DataDir Caching Responsibility to Caller to allow Cached Consensus
This commit is contained in:
parent
04dec3238b
commit
6d5d067d70
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue