package p2p import ( "bytes" "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/ed25519" tmrand "github.com/tendermint/tendermint/libs/rand" ) func TestLoadOrGenNodeKey(t *testing.T) { filePath := filepath.Join(os.TempDir(), tmrand.Str(12)+"_peer_id.json") nodeKey, err := LoadOrGenNodeKey(filePath) assert.Nil(t, err) nodeKey2, err := LoadOrGenNodeKey(filePath) assert.Nil(t, err) assert.Equal(t, nodeKey, nodeKey2) } func TestLoadNodeKey(t *testing.T) { filePath := filepath.Join(os.TempDir(), tmrand.Str(12)+"_peer_id.json") _, err := LoadNodeKey(filePath) assert.True(t, os.IsNotExist(err)) _, err = LoadOrGenNodeKey(filePath) require.NoError(t, err) nodeKey, err := LoadNodeKey(filePath) assert.NoError(t, err) assert.NotNil(t, nodeKey) } func TestNodeKeySaveAs(t *testing.T) { filePath := filepath.Join(os.TempDir(), tmrand.Str(12)+"_peer_id.json") assert.NoFileExists(t, filePath) privKey := ed25519.GenPrivKey() nodeKey := &NodeKey{ PrivKey: privKey, } err := nodeKey.SaveAs(filePath) assert.NoError(t, err) assert.FileExists(t, filePath) } //---------------------------------------------------------- func padBytes(bz []byte, targetBytes int) []byte { return append(bz, bytes.Repeat([]byte{0xFF}, targetBytes-len(bz))...) } func TestPoWTarget(t *testing.T) { targetBytes := 20 cases := []struct { difficulty uint target []byte }{ {0, padBytes([]byte{}, targetBytes)}, {1, padBytes([]byte{127}, targetBytes)}, {8, padBytes([]byte{0}, targetBytes)}, {9, padBytes([]byte{0, 127}, targetBytes)}, {10, padBytes([]byte{0, 63}, targetBytes)}, {16, padBytes([]byte{0, 0}, targetBytes)}, {17, padBytes([]byte{0, 0, 127}, targetBytes)}, } for _, c := range cases { assert.Equal(t, MakePoWTarget(c.difficulty, 20*8), c.target) } }