/
uzer_007
/
Rixea
Обзор
Документация
Войти
/
uzer_007
/
Rixea
Код
Запросы
0
Задачи
Вики
Пакеты
5
Релизы
2
CI/CD
Аналитика
Безопасность
master
modules/ssh/ssh_test.go
124 строки
3 KB
uzer_007
feat: первая версия Rixea
02 авг 2026, 22:16
02 авг 2026, 22:16
d4f7504
Код
Авторство
О чём код?
// Copyright 2026 Uzer_007. All rights reserved. // SPDX-License-Identifier: MIT package ssh import ( "crypto/ecdsa" "crypto/ed25519" "crypto/rsa" "os" "path/filepath" "testing" "gitverse.ru/uzer_007/Rixea/modules/generate" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" gossh "golang.org/x/crypto/ssh" ) func TestGenKeyPair(t *testing.T) { testCases := []struct { keyType generate.SSHKeyType expectedType any }{ { keyType: generate.SSHKeyRSA, expectedType: &rsa.PrivateKey{}, }, { keyType: generate.SSHKeyED25519, expectedType: &ed25519.PrivateKey{}, }, { keyType: generate.SSHKeyECDSA, expectedType: &ecdsa.PrivateKey{}, }, } tmpDir := t.TempDir() for _, tc := range testCases { name := "rixea." + string(tc.keyType) fn := filepath.Join(tmpDir, name) t.Run("Generate "+name, func(t *testing.T) { require.NoError(t, GenKeyPair(fn, tc.keyType, 0)) bytes, err := os.ReadFile(fn) require.NoError(t, err) privateKey, err := gossh.ParseRawPrivateKey(bytes) require.NoError(t, err) assert.IsType(t, tc.expectedType, privateKey) }) } t.Run("Generate unknown key type", func(t *testing.T) { err := GenKeyPair(t.TempDir()+"rixea.badkey", "badkey", 0) require.Error(t, err) }) } func TestInitKeys(t *testing.T) { tempDir := t.TempDir() keyTypes := []string{"rsa", "ecdsa", "ed25519"} for _, keyType := range keyTypes { privKeyPath := filepath.Join(tempDir, "rixea."+keyType) pubKeyPath := filepath.Join(tempDir, "rixea."+keyType+".pub") assert.NoFileExists(t, privKeyPath) assert.NoFileExists(t, pubKeyPath) } // Test basic creation keyFiles, err := InitDefaultHostKeys(tempDir) require.NoError(t, err) assert.Len(t, keyFiles, len(keyTypes)) // Record file contents so regeneration can be detected content := map[string][]byte{} for _, keyType := range keyTypes { privKeyPath := filepath.Join(tempDir, "rixea."+keyType) pubKeyPath := filepath.Join(tempDir, "rixea."+keyType+".pub") data, err := os.ReadFile(privKeyPath) require.NoError(t, err) content[privKeyPath] = data data, err = os.ReadFile(pubKeyPath) require.NoError(t, err) content[pubKeyPath] = data } // Test recreation on missing private key and noop for missing pub key require.NoError(t, os.Remove(filepath.Join(tempDir, "rixea.ecdsa.pub"))) require.NoError(t, os.Remove(filepath.Join(tempDir, "rixea.ed25519"))) keyFiles, err = InitDefaultHostKeys(tempDir) require.NoError(t, err) assert.Len(t, keyFiles, len(keyTypes)) for _, keyType := range keyTypes { privKeyPath := filepath.Join(tempDir, "rixea."+keyType) pubKeyPath := filepath.Join(tempDir, "rixea."+keyType+".pub") dataPriv, err := os.ReadFile(privKeyPath) require.NoError(t, err) switch keyType { case "rsa": // No modification to RSA key dataPub, err := os.ReadFile(pubKeyPath) require.NoError(t, err) assert.Equal(t, content[privKeyPath], dataPriv) assert.Equal(t, content[pubKeyPath], dataPub) case "ecdsa": // ECDSA public key should be missing, private unchanged assert.Equal(t, content[privKeyPath], dataPriv) assert.NoFileExists(t, pubKeyPath) case "ed25519": // ed25519 private key was removed, so both keys regenerated dataPub, err := os.ReadFile(pubKeyPath) require.NoError(t, err) assert.NotEqual(t, content[privKeyPath], dataPriv) assert.NotEqual(t, content[pubKeyPath], dataPub) } } }