Skip to content

Commit

Permalink
#5 Uses disk store for key
Browse files Browse the repository at this point in the history
  • Loading branch information
XioZ committed May 5, 2024
1 parent 424b745 commit bf0d366
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 19 deletions.
3 changes: 3 additions & 0 deletions mino/minows/address_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,9 @@ func mustCreateAddress(t *testing.T, location, identity string) address {
}

func mustCreateMultiaddress(t *testing.T, address string) ma.Multiaddr {
if address == "" {
return nil
}
multiaddr, err := ma.NewMultiaddr(address)
require.NoError(t, err)
return multiaddr
Expand Down
106 changes: 100 additions & 6 deletions mino/minows/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"go.dedis.ch/dela/cli/node"
"go.dedis.ch/dela/core/store/kv"
"os"
"path/filepath"
"testing"
"time"
)
Expand All @@ -12,35 +15,126 @@ func TestController_OnStart(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("/ip4/0.0.0.0/tcp/8000/ws")
flags.On("String", "public").Return("/dns4/p2p-1.c4dt.dela.org/tcp/443/wss")
flags.On("Path", "config").Return("/tmp")

dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.NoError(t, err)
defer require.NoError(t, ctrl.OnStop(inj))

var m *minows
err = inj.Resolve(&m)
require.NoError(t, err)
}

func TestController_OptionalPublic(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("/ip4/0.0.0.0/tcp/8000/ws")
flags.On("String", "public").Return("")

dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
err := ctrl.OnStart(flags, inj)
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.NoError(t, err)
defer require.NoError(t, ctrl.OnStop(inj))

var m *minows
err = inj.Resolve(&m)
require.NoError(t, err)
err = m.stop()
}

func TestController_InvalidListen(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("invalid")
flags.On("String", "public").Return("/dns4/p2p-1.c4dt.dela.org/tcp/443/wss")

dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.Error(t, err)
}

func TestController_InvalidPublic(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("/ip4/0.0.0.0/tcp/8000/ws")
flags.On("String", "public").Return("invalid")

dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.Error(t, err)
}

func TestController_OnStop(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("/ip4/0.0.0.0/tcp/8000/ws")
flags.On("String", "public").Return("/dns4/p2p-1.c4dt.dela.org/tcp/443/wss")
flags.On("Path", "config").Return("/tmp")

ctrl := NewController()
dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
err := ctrl.OnStart(flags, inj)
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.NoError(t, err)

err = ctrl.OnStop(inj)
require.NoError(t, err)
}

func TestController_NotInjected(t *testing.T) {
flags := new(mockFlags)
flags.On("String", "listen").Return("/ip4/0.0.0.0/tcp/8000/ws")
flags.On("String", "public").Return("/dns4/p2p-1.c4dt.dela.org/tcp/443/wss")

dir, err := os.MkdirTemp(os.TempDir(), "minogrpc")
require.NoError(t, err)
defer os.RemoveAll(dir)
db, err := kv.New(filepath.Join(dir, "test.db"))
require.NoError(t, err)
inj := node.NewInjector()
inj.Inject(db)

ctrl := NewController()
err = ctrl.OnStart(flags, inj)
require.NoError(t, err)

err = ctrl.OnStop(node.NewInjector())
require.Error(t, err)
}

// mockFlags
// - implements cli.Flags
type mockFlags struct {
Expand Down
2 changes: 2 additions & 0 deletions mino/minows/key/disk.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func (s *diskStorage) LoadOrCreate() (crypto.PrivKey, error) {
}
stored := bucket.Get(key)
if stored != nil {
buffer = make([]byte, len(stored))
copy(buffer, stored)
return nil
}
Expand All @@ -47,6 +48,7 @@ func (s *diskStorage) LoadOrCreate() (crypto.PrivKey, error) {
if err != nil {
return xerrors.Errorf("could not store key: %v", err)
}
buffer = make([]byte, len(generated))
copy(buffer, generated)
return nil
})
Expand Down
53 changes: 40 additions & 13 deletions mino/minows/mod_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,54 @@ import (
"crypto/rand"
"github.com/libp2p/go-libp2p/core/crypto"
"github.com/libp2p/go-libp2p/core/peer"
ma "github.com/multiformats/go-multiaddr"
"github.com/stretchr/testify/require"
"go.dedis.ch/dela/mino"
"testing"
)

func Test_newMinows(t *testing.T) {
func TestNewMinows(t *testing.T) {
const listen = "/ip4/0.0.0.0/tcp/6000/ws"
const random = "/ip4/127.0.0.1/tcp/0/ws"
const publicWS = "/ip4/127.0.0.1/tcp/6000/ws"
const publicWSS = "/ip4/127.0.0.1/tcp/443/wss"
type args struct {
listen string
public string
listen ma.Multiaddr
public ma.Multiaddr
}
var tests = map[string]struct {
args args
}{
"ws": {
args: args{
listen: listen,
public: publicWS,
listen: mustCreateMultiaddress(t, listen),
public: mustCreateMultiaddress(t, publicWS),
},
},
"wss": {
args: args{
listen: listen,
public: publicWSS,
listen: mustCreateMultiaddress(t, listen),
public: mustCreateMultiaddress(t, publicWSS),
},
},
"no public": {
args: args{
listen: mustCreateMultiaddress(t, listen),
public: nil,
},
},
"random": {
args: args{
listen: mustCreateMultiaddress(t, random),
public: nil,
},
},
}
for name, tt := range tests {
t.Run(name, func(t *testing.T) {
listen := mustCreateMultiaddress(t, tt.args.listen)
public := mustCreateMultiaddress(t, tt.args.public)
key := mustCreateKey(t)

m, err := NewMinows(listen, public, key)
m, err := NewMinows(tt.args.listen, tt.args.public, key)
require.NoError(t, err)
require.NotNil(t, m)
require.IsType(t, &minows{}, m)
Expand Down Expand Up @@ -75,7 +87,7 @@ func Test_minows_GetAddressFactory(t *testing.T) {
}

func Test_minows_GetAddress(t *testing.T) {
const listen = "/ip4/0.0.0.0/tcp/6000"
const listen = "/ip4/127.0.0.1/tcp/6000"
const publicWS = "/ip4/127.0.0.1/tcp/80/ws"
const publicWSS = "/ip4/127.0.0.1/tcp/443/wss"
key := mustCreateKey(t)
Expand All @@ -93,8 +105,9 @@ func Test_minows_GetAddress(t *testing.T) {
m m
want want
}{
"ws": {m{listen, publicWS, key}, want{publicWS, id}},
"wss": {m{listen, publicWSS, key}, want{publicWSS, id}},
"ws": {m{listen, publicWS, key}, want{publicWS, id}},
"wss": {m{listen, publicWSS, key}, want{publicWSS, id}},
"no public": {m{listen, "", key}, want{listen, id}},
}
for name, tt := range tests {
t.Run(name, func(t *testing.T) {
Expand All @@ -110,6 +123,20 @@ func Test_minows_GetAddress(t *testing.T) {
}
}

func Test_minows_GetAddress_Random(t *testing.T) {
random := "/ip4/127.0.0.1/tcp/0/ws"
listen := mustCreateMultiaddress(t, random)
key := mustCreateKey(t)
m, err := NewMinows(listen, nil, key)
require.NoError(t, err)
defer require.NoError(t, m.(*minows).stop())

got := m.GetAddress().(address)
port, err := got.location.ValueForProtocol(ma.P_TCP)
require.NoError(t, err)
require.NotEqual(t, 0, port)
}

func Test_minows_WithSegment_Empty(t *testing.T) {
const listen = "/ip4/0.0.0.0/tcp/6000"
const publicWS = "/ip4/127.0.0.1/tcp/6000/ws"
Expand Down

0 comments on commit bf0d366

Please sign in to comment.