From 2dfde39f006f8e6fa69d68dd72dd10d67e9b1cfd Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Thu, 28 Nov 2019 18:05:08 +0000 Subject: cmd/la-baujmi: fix tests --- cmd/la-baujmi/fact_test.go | 78 ++++++++++++++++++++-------------------- internal/tor/tor.go | 88 ---------------------------------------------- tor/tor.go | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 127 deletions(-) delete mode 100644 internal/tor/tor.go create mode 100644 tor/tor.go diff --git a/cmd/la-baujmi/fact_test.go b/cmd/la-baujmi/fact_test.go index 7c08552..32065a5 100644 --- a/cmd/la-baujmi/fact_test.go +++ b/cmd/la-baujmi/fact_test.go @@ -5,8 +5,8 @@ import ( "log" "testing" - "within.website/x/web/tokiponatokens" "github.com/kr/pretty" + "within.website/x/web/tokiponatokens" ) // equal tells whether a and b contain the same elements. @@ -29,7 +29,7 @@ func equal(a, b []string) bool { return true } -func selbrisEqual(a, b []Selbri) bool { +func bridisEqual(a, b []Bridi) bool { if len(a) != len(b) { return false } @@ -48,8 +48,8 @@ func selbrisEqual(a, b []Selbri) bool { return true } -// Eq checks two Selbri instances for equality. -func (lhs Selbri) Eq(rhs Selbri) bool { +// Eq checks two Bridi instances for equality. +func (lhs Bridi) Eq(rhs Bridi) bool { switch { case lhs.Predicate != rhs.Predicate: return false @@ -62,61 +62,61 @@ func (lhs Selbri) Eq(rhs Selbri) bool { return true } -func TestSentenceToSelbris(t *testing.T) { +func TestSentenceToBridis(t *testing.T) { cases := []struct { name string json []byte - want []Selbri + want []Bridi wantFacts []string }{ { name: "basic", json: []byte(`[{"part":"subject","tokens":["ona"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"objectMarker","sep":"e","tokens":["mute"]},{"part":"punctuation","tokens":["period"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "sona", Arguments: []string{"subject(ona)", "object(mute)"}, }, }, - wantFacts: []string{"selbri(verb(sona), subject(ona), object(mute))."}, + wantFacts: []string{"bridi(verb(sona), subject(ona), object(mute))."}, }, { name: "zen", json: []byte(`[{"part":"subject","tokens":["tenpo","ni"]},{"part":"punctuation","tokens":["la"]},{"part":"subject","tokens":["seme"]},{"part":"verbMarker","sep":"li","tokens":["ala"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "ala", Arguments: []string{"context(subject(tenpo_ni))", "subject(seme)"}, }, }, - wantFacts: []string{"selbri(verb(ala), context(subject(tenpo_ni)), subject(A))."}, + wantFacts: []string{"bridi(verb(ala), context(subject(tenpo_ni)), subject(A))."}, }, { name: "pi_subject", json: []byte(`[{"part":"subject","parts":[{"part":"subject","tokens":["ilo","mi"]},{"part":"subject","sep":"pi","tokens":["kasi","nasa"]}]},{"part":"verbMarker","sep":"li","tokens":["pona","ale"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "pona_ale", Arguments: []string{"subject(ilo_mi, pi(kasi, nasa))"}, }, }, - wantFacts: []string{"selbri(verb(pona_ale), subject(ilo_mi, pi(kasi, nasa)))."}, + wantFacts: []string{"bridi(verb(pona_ale), subject(ilo_mi, pi(kasi, nasa)))."}, }, { name: "pi_object", json: []byte(`[{"part":"subject","tokens":["mi"]},{"part":"verbMarker","sep":"li","tokens":["esun"]},{"part":"objectMarker","sep":"e","parts":[{"part":"objectMarker","tokens":["ilo"]},{"part":"objectMarker","sep":"pi","tokens":["kalama","musi"]}]},{"part":"punctuation","tokens":["period"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "esun", Arguments: []string{"subject(mi)", "object(ilo, pi(kalama, musi))"}, }, }, - wantFacts: []string{"selbri(verb(esun), subject(mi), object(ilo, pi(kalama, musi)))."}, + wantFacts: []string{"bridi(verb(esun), subject(mi), object(ilo, pi(kalama, musi)))."}, }, { name: "multiple verbs", json: []byte(`[{"part":"subject","tokens":["ona"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"verbMarker","sep":"li","tokens":["pona"]},{"part":"objectMarker","sep":"e","tokens":["mute"]},{"part":"punctuation","tokens":["period"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "sona", Arguments: []string{"subject(ona)", "object(mute)"}, @@ -127,14 +127,14 @@ func TestSentenceToSelbris(t *testing.T) { }, }, wantFacts: []string{ - "selbri(verb(sona), subject(ona), object(mute)).", - "selbri(verb(pona), subject(ona), object(mute)).", + "bridi(verb(sona), subject(ona), object(mute)).", + "bridi(verb(pona), subject(ona), object(mute)).", }, }, { name: "multiple subjects and verbs", json: []byte(`[{"part":"subject","tokens":["ona","en","sina","en","mi"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"verbMarker","sep":"li","tokens":["pona"]},{"part":"objectMarker","sep":"e","tokens":["mute"]},{"part":"punctuation","tokens":["period"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "sona", Arguments: []string{"subject(ona)", "object(mute)"}, @@ -161,18 +161,18 @@ func TestSentenceToSelbris(t *testing.T) { }, }, wantFacts: []string{ - "selbri(verb(sona), subject(ona), object(mute)).", - "selbri(verb(sona), subject(sina), object(mute)).", - "selbri(verb(sona), subject(mi), object(mute)).", - "selbri(verb(pona), subject(ona), object(mute)).", - "selbri(verb(pona), subject(sina), object(mute)).", - "selbri(verb(pona), subject(mi), object(mute)).", + "bridi(verb(sona), subject(ona), object(mute)).", + "bridi(verb(sona), subject(sina), object(mute)).", + "bridi(verb(sona), subject(mi), object(mute)).", + "bridi(verb(pona), subject(ona), object(mute)).", + "bridi(verb(pona), subject(sina), object(mute)).", + "bridi(verb(pona), subject(mi), object(mute)).", }, }, { name: "multiple subjects and verbs and objects", json: []byte(`[{"part":"subject","tokens":["ona","en","sina","en","mi"]},{"part":"verbMarker","sep":"li","tokens":["sona"]},{"part":"verbMarker","sep":"li","tokens":["pona"]},{"part":"objectMarker","sep":"e","tokens":["ijo","mute"]},{"part":"objectMarker","sep":"e","tokens":["ilo","mute"]},{"part":"punctuation","tokens":["period"]}]`), - want: []Selbri{ + want: []Bridi{ { Predicate: "sona", Arguments: []string{"subject(ona)", "object(ijo_mute)"}, @@ -223,18 +223,18 @@ func TestSentenceToSelbris(t *testing.T) { }, }, wantFacts: []string{ - "selbri(verb(sona), subject(ona), object(ijo_mute)).", - "selbri(verb(sona), subject(ona), object(ilo_mute)).", - "selbri(verb(sona), subject(sina), object(ijo_mute)).", - "selbri(verb(sona), subject(sina), object(ilo_mute)).", - "selbri(verb(sona), subject(mi), object(ijo_mute)).", - "selbri(verb(sona), subject(mi), object(ilo_mute)).", - "selbri(verb(pona), subject(ona), object(ijo_mute)).", - "selbri(verb(pona), subject(ona), object(ilo_mute)).", - "selbri(verb(pona), subject(sina), object(ijo_mute)).", - "selbri(verb(pona), subject(sina), object(ilo_mute)).", - "selbri(verb(pona), subject(mi), object(ijo_mute)).", - "selbri(verb(pona), subject(mi), object(ilo_mute)).", + "bridi(verb(sona), subject(ona), object(ijo_mute)).", + "bridi(verb(sona), subject(ona), object(ilo_mute)).", + "bridi(verb(sona), subject(sina), object(ijo_mute)).", + "bridi(verb(sona), subject(sina), object(ilo_mute)).", + "bridi(verb(sona), subject(mi), object(ijo_mute)).", + "bridi(verb(sona), subject(mi), object(ilo_mute)).", + "bridi(verb(pona), subject(ona), object(ijo_mute)).", + "bridi(verb(pona), subject(ona), object(ilo_mute)).", + "bridi(verb(pona), subject(sina), object(ijo_mute)).", + "bridi(verb(pona), subject(sina), object(ilo_mute)).", + "bridi(verb(pona), subject(mi), object(ijo_mute)).", + "bridi(verb(pona), subject(mi), object(ilo_mute)).", }, }, } @@ -247,12 +247,12 @@ func TestSentenceToSelbris(t *testing.T) { t.Fatal(err) } - sb, err := SentenceToSelbris(s) + sb, err := SentenceToBridis(s) if err != nil { t.Fatal(err) } - if !selbrisEqual(cs.want, sb) { + if !bridisEqual(cs.want, sb) { log.Println("want:") pretty.Println(cs.want) log.Println("got:") diff --git a/internal/tor/tor.go b/internal/tor/tor.go deleted file mode 100644 index a7ad373..0000000 --- a/internal/tor/tor.go +++ /dev/null @@ -1,88 +0,0 @@ -// Package tor manages and automates starting a child tor process for exposing TCP services into onionland. -package tor - -import ( - "crypto/rsa" - "fmt" - "log" - "strconv" - "time" - - "github.com/Yawning/bulb" - "github.com/phayes/freeport" - "github.com/sycamoreone/orc/tor" -) - -// Config is a wrapper struct for tor configuration. -type Config struct { - DataDir string - HashedControlPassword string - ClearPassword string - Timeout time.Duration -} - -// StartTor starts a new instance of tor or doesn't with the reason why. -func StartTor(cfg Config) (*Tor, error) { - tc := tor.NewConfig() - tc.Set("DataDirectory", cfg.DataDir) - tc.Set("HashedControlPassword", cfg.HashedControlPassword) - tc.Set("SocksPort", "0") - - port, err := freeport.GetFreePort() - if err != nil { - return nil, err - } - - tc.Set("ControlPort", fmt.Sprint(port)) - - tc.Timeout = cfg.Timeout - - tcmd, err := tor.NewCmd(tc) - if err != nil { - return nil, err - } - - err = tcmd.Start() - if err != nil { - return nil, err - } - - log.Println("tor started, sleeping for a few seconds for it to settle...") - time.Sleep(5 * time.Second) - - bc, err := bulb.Dial("tcp", "127.0.0.1:"+strconv.Itoa(port)) - if err != nil { - return nil, err - } - - err = bc.Authenticate(cfg.ClearPassword) - if err != nil { - return nil, err - } - - t := &Tor{ - tc: tc, - tcmd: tcmd, - bc: bc, - } - - return t, nil -} - -// Tor is a higher level wrapper to a child tor process -type Tor struct { - tc *tor.Config - tcmd *tor.Cmd - bc *bulb.Conn -} - -// AddOnion adds an onion service to this machine with the given private key -// (can be nil for an auto-generated key), virtual onion port and TCP destunation. -func (t *Tor) AddOnion(pKey *rsa.PrivateKey, virtPort uint16, destination string) (*bulb.OnionInfo, error) { - return t.bc.AddOnion([]bulb.OnionPortSpec{ - { - VirtPort: virtPort, - Target: destination, - }, - }, pKey, true) -} diff --git a/tor/tor.go b/tor/tor.go new file mode 100644 index 0000000..a7ad373 --- /dev/null +++ b/tor/tor.go @@ -0,0 +1,88 @@ +// Package tor manages and automates starting a child tor process for exposing TCP services into onionland. +package tor + +import ( + "crypto/rsa" + "fmt" + "log" + "strconv" + "time" + + "github.com/Yawning/bulb" + "github.com/phayes/freeport" + "github.com/sycamoreone/orc/tor" +) + +// Config is a wrapper struct for tor configuration. +type Config struct { + DataDir string + HashedControlPassword string + ClearPassword string + Timeout time.Duration +} + +// StartTor starts a new instance of tor or doesn't with the reason why. +func StartTor(cfg Config) (*Tor, error) { + tc := tor.NewConfig() + tc.Set("DataDirectory", cfg.DataDir) + tc.Set("HashedControlPassword", cfg.HashedControlPassword) + tc.Set("SocksPort", "0") + + port, err := freeport.GetFreePort() + if err != nil { + return nil, err + } + + tc.Set("ControlPort", fmt.Sprint(port)) + + tc.Timeout = cfg.Timeout + + tcmd, err := tor.NewCmd(tc) + if err != nil { + return nil, err + } + + err = tcmd.Start() + if err != nil { + return nil, err + } + + log.Println("tor started, sleeping for a few seconds for it to settle...") + time.Sleep(5 * time.Second) + + bc, err := bulb.Dial("tcp", "127.0.0.1:"+strconv.Itoa(port)) + if err != nil { + return nil, err + } + + err = bc.Authenticate(cfg.ClearPassword) + if err != nil { + return nil, err + } + + t := &Tor{ + tc: tc, + tcmd: tcmd, + bc: bc, + } + + return t, nil +} + +// Tor is a higher level wrapper to a child tor process +type Tor struct { + tc *tor.Config + tcmd *tor.Cmd + bc *bulb.Conn +} + +// AddOnion adds an onion service to this machine with the given private key +// (can be nil for an auto-generated key), virtual onion port and TCP destunation. +func (t *Tor) AddOnion(pKey *rsa.PrivateKey, virtPort uint16, destination string) (*bulb.OnionInfo, error) { + return t.bc.AddOnion([]bulb.OnionPortSpec{ + { + VirtPort: virtPort, + Target: destination, + }, + }, pKey, true) +} -- cgit v1.2.3