mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
@@ -0,0 +1,160 @@
|
||||
package context
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"cosmossdk.io/log"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/sonr-io/sonr/crypto/vrf"
|
||||
)
|
||||
|
||||
// TestSonrContextInitialization tests SonrContext initialization with VRF keys
|
||||
func TestSonrContextInitialization(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
// Create temporary directory for test
|
||||
tmpDir := t.TempDir()
|
||||
|
||||
// Test initialization without VRF keys
|
||||
t.Setenv("HOME", tmpDir)
|
||||
logger := log.NewNopLogger()
|
||||
ctx := NewSonrContext(logger)
|
||||
|
||||
err := ctx.Initialize()
|
||||
require.Error(err, "Should fail to initialize without VRF keys")
|
||||
require.False(ctx.IsInitialized(), "Context should not be initialized without VRF keys")
|
||||
}
|
||||
|
||||
// TestSonrContextWithValidKeys tests SonrContext with valid VRF keys
|
||||
func TestSonrContextWithValidKeys(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
// Create temporary directory for test
|
||||
tmpDir := t.TempDir()
|
||||
t.Setenv("HOME", tmpDir)
|
||||
|
||||
// Create .sonr directory
|
||||
sonrDir := filepath.Join(tmpDir, ".sonr")
|
||||
err := os.MkdirAll(sonrDir, 0o750)
|
||||
require.NoError(err)
|
||||
|
||||
// Generate VRF keys
|
||||
privateKey, err := vrf.GenerateKey(nil)
|
||||
require.NoError(err)
|
||||
|
||||
// Write VRF keys
|
||||
vrfKeyPath := filepath.Join(sonrDir, "vrf_secret.key")
|
||||
err = os.WriteFile(vrfKeyPath, privateKey, 0o600)
|
||||
require.NoError(err)
|
||||
|
||||
// Test initialization with valid VRF keys
|
||||
logger := log.NewNopLogger()
|
||||
ctx := NewSonrContext(logger)
|
||||
|
||||
err = ctx.Initialize()
|
||||
require.NoError(err, "Should initialize successfully with valid VRF keys")
|
||||
require.True(ctx.IsInitialized(), "Context should be initialized")
|
||||
|
||||
// Test VRF key retrieval
|
||||
privKey, err := ctx.GetVRFPrivateKey()
|
||||
require.NoError(err)
|
||||
require.Len(privKey, vrf.PrivateKeySize)
|
||||
|
||||
pubKey, err := ctx.GetVRFPublicKey()
|
||||
require.NoError(err)
|
||||
require.Len(pubKey, vrf.PublicKeySize)
|
||||
}
|
||||
|
||||
// TestSonrContextInvalidKeySize tests handling of invalid key size
|
||||
func TestSonrContextInvalidKeySize(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
// Create temporary directory for test
|
||||
tmpDir := t.TempDir()
|
||||
t.Setenv("HOME", tmpDir)
|
||||
|
||||
// Create .sonr directory
|
||||
sonrDir := filepath.Join(tmpDir, ".sonr")
|
||||
err := os.MkdirAll(sonrDir, 0o750)
|
||||
require.NoError(err)
|
||||
|
||||
// Write invalid VRF key (wrong size)
|
||||
vrfKeyPath := filepath.Join(sonrDir, "vrf_secret.key")
|
||||
invalidKey := make([]byte, 32) // Should be 64 bytes
|
||||
err = os.WriteFile(vrfKeyPath, invalidKey, 0o600)
|
||||
require.NoError(err)
|
||||
|
||||
// Test initialization with invalid key size
|
||||
logger := log.NewNopLogger()
|
||||
ctx := NewSonrContext(logger)
|
||||
|
||||
err = ctx.Initialize()
|
||||
require.Error(err, "Should fail to initialize with invalid key size")
|
||||
require.Contains(err.Error(), "invalid VRF private key size")
|
||||
require.False(ctx.IsInitialized(), "Context should not be initialized with invalid keys")
|
||||
}
|
||||
|
||||
// TestSonrContextThreadSafety tests thread-safe access to VRF keys
|
||||
func TestSonrContextThreadSafety(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
// Create temporary directory for test
|
||||
tmpDir := t.TempDir()
|
||||
t.Setenv("HOME", tmpDir)
|
||||
|
||||
// Create .sonr directory with valid keys
|
||||
sonrDir := filepath.Join(tmpDir, ".sonr")
|
||||
err := os.MkdirAll(sonrDir, 0o750)
|
||||
require.NoError(err)
|
||||
|
||||
privateKey, err := vrf.GenerateKey(nil)
|
||||
require.NoError(err)
|
||||
|
||||
vrfKeyPath := filepath.Join(sonrDir, "vrf_secret.key")
|
||||
err = os.WriteFile(vrfKeyPath, privateKey, 0o600)
|
||||
require.NoError(err)
|
||||
|
||||
// Initialize context
|
||||
logger := log.NewNopLogger()
|
||||
ctx := NewSonrContext(logger)
|
||||
err = ctx.Initialize()
|
||||
require.NoError(err)
|
||||
|
||||
// Test concurrent access (simple check - not exhaustive)
|
||||
done := make(chan bool, 10)
|
||||
for i := 0; i < 10; i++ {
|
||||
go func() {
|
||||
_, err := ctx.GetVRFPrivateKey()
|
||||
require.NoError(err)
|
||||
_, err = ctx.GetVRFPublicKey()
|
||||
require.NoError(err)
|
||||
done <- true
|
||||
}()
|
||||
}
|
||||
|
||||
// Wait for all goroutines
|
||||
for i := 0; i < 10; i++ {
|
||||
<-done
|
||||
}
|
||||
}
|
||||
|
||||
// TestSonrContextErrorMessages tests that error messages are helpful
|
||||
func TestSonrContextErrorMessages(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
// Create temporary directory for test
|
||||
tmpDir := t.TempDir()
|
||||
t.Setenv("HOME", tmpDir)
|
||||
|
||||
logger := log.NewNopLogger()
|
||||
ctx := NewSonrContext(logger)
|
||||
|
||||
err := ctx.Initialize()
|
||||
require.Error(err)
|
||||
require.Contains(err.Error(), "failed to read VRF secret key")
|
||||
require.Contains(err.Error(), "VRF keys are required")
|
||||
require.Contains(err.Error(), "snrd init")
|
||||
}
|
||||
Reference in New Issue
Block a user