88 "math/rand"
99 "net"
1010 "os"
11+ "path"
1112 "testing"
1213 "time"
1314
@@ -18,6 +19,8 @@ import (
1819
1920 pt "git.torproject.org/pluggable-transports/goptlib.git"
2021 "github.com/stretchr/testify/require"
22+ "gitlab.com/yawning/obfs4.git/common/drbg"
23+ "gitlab.com/yawning/obfs4.git/common/ntor"
2124 "gitlab.com/yawning/obfs4.git/transports/obfs4"
2225)
2326
@@ -62,7 +65,7 @@ func TestSuccessfulWrap(t *testing.T) {
6265 defer sfp .Close ()
6366
6467 wrappedc2p := make (chan net.Conn )
65- stateDir := t . TempDir ()
68+ stateDir := ""
6669 go wrapConnection (c2p , reg .Keys .Obfs4Keys .NodeID .Hex (), reg .Keys .Obfs4Keys .PublicKey .Hex (), wrappedc2p , stateDir )
6770
6871 var buf [4096 ]byte
@@ -140,7 +143,7 @@ func TestSuccessfulWrapMulti(t *testing.T) {
140143 defer sfp .Close ()
141144
142145 wrappedc2p := make (chan net.Conn )
143- stateDir := t . TempDir ()
146+ stateDir := ""
144147 go wrapConnection (c2p , reg .Keys .Obfs4Keys .NodeID .Hex (), reg .Keys .Obfs4Keys .PublicKey .Hex (), wrappedc2p , stateDir )
145148
146149 var buf [4096 ]byte
@@ -239,3 +242,38 @@ func TestTryAgain(t *testing.T) {
239242 t .Fatalf ("expected ErrNotTransport, got %v" , err )
240243 }
241244}
245+
246+ func TestObfs4StateDir (t * testing.T ) {
247+ nodeID , _ := ntor .NewNodeID ([]byte ("\x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 " ))
248+ serverKeypair , err := ntor .NewKeypair (true )
249+ if err != nil {
250+ t .Fatalf ("server: ntor.NewKeypair failed: %s" , err )
251+ }
252+
253+ // We found the mark in the client handshake! We found our registration!
254+ args := pt.Args {}
255+ args .Add ("node-id" , nodeID .Hex ())
256+ args .Add ("private-key" , serverKeypair .Private ().Hex ())
257+ seed , err := drbg .NewSeed ()
258+ require .Nil (t , err , "failed to create DRBG seed" )
259+
260+ args .Add ("drbg-seed" , seed .Hex ())
261+
262+ obfs4Transport := & obfs4.Transport {}
263+ server , err := obfs4Transport .ServerFactory ("" , & args )
264+ require .Nil (t , err , "server factory failed" )
265+ require .NotNil (t , server )
266+
267+ require .NoFileExists (t , "./obfs4_state.json" )
268+ require .NoFileExists (t , "./obfs4_bridgeline.txt" )
269+
270+
271+ stateDir , err := os .MkdirTemp ("" , "" )
272+ require .Nil (t , err )
273+ server , err = obfs4Transport .ServerFactory (stateDir , & args )
274+ require .Nil (t , err , "server factory failed" )
275+ require .NotNil (t , server )
276+
277+ require .FileExists (t , path .Join (stateDir , "./obfs4_state.json" ))
278+ require .FileExists (t , path .Join (stateDir , "./obfs4_bridgeline.txt" ))
279+ }
0 commit comments