Files
opencloud/pkg/crypto/gencert_test.go
Ralf Haferkamp e07f0154bb Rebrand pkg
2025-01-20 10:59:08 +01:00

156 lines
3.0 KiB
Go

package crypto
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"crypto/rsa"
"os"
"path/filepath"
"testing"
"github.com/opencloud-eu/opencloud/pkg/log"
)
func TestEnsureExistsDir(t *testing.T) {
var tmpDir = t.TempDir()
type args struct {
uri string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "creates a dir if it does not exist",
args: args{
uri: filepath.Join(tmpDir, "example"),
},
wantErr: false,
},
{
name: "noop if the target directory exists",
args: args{
uri: filepath.Join(tmpDir, "example"),
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := ensureExistsDir(tt.args.uri); (err != nil) != tt.wantErr {
t.Errorf("ensureExistsDir() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestPersistKey(t *testing.T) {
p256 := elliptic.P256()
var (
tmpDir = t.TempDir()
keyPath = filepath.Join(tmpDir, "opencloud", "testKey")
rsaPk, _ = rsa.GenerateKey(rand.Reader, 2048)
ecdsaPk, _ = ecdsa.GenerateKey(p256, rand.Reader)
)
type args struct {
keyName string
pk interface{}
}
tests := []struct {
name string
args args
}{
{
name: "writes a private key (rsa) to the specified location",
args: args{
keyName: keyPath,
pk: rsaPk,
},
},
{
name: "writes a private key (ecdsa) to the specified location",
args: args{
keyName: keyPath,
pk: ecdsaPk,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := persistKey(tt.args.keyName, log.NopLogger(), tt.args.pk); err != nil {
t.Error(err)
}
})
// side effect: tt.args.keyName is created
if _, err := os.Stat(tt.args.keyName); err != nil {
t.Errorf("persistKey() error = %v", err)
}
}
}
func TestPersistCertificate(t *testing.T) {
p256 := elliptic.P256()
var (
tmpDir = t.TempDir()
certPath = filepath.Join(tmpDir, "opencloud", "testCert")
rsaPk, _ = rsa.GenerateKey(rand.Reader, 2048)
ecdsaPk, _ = ecdsa.GenerateKey(p256, rand.Reader)
)
type args struct {
certName string
pk interface{}
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "store a certificate with an rsa private key",
args: args{
certName: certPath,
pk: rsaPk,
},
wantErr: false,
},
{
name: "store a certificate with an ecdsa private key",
args: args{
certName: certPath,
pk: ecdsaPk,
},
wantErr: false,
},
{
name: "should fail",
args: args{
certName: certPath,
pk: 42,
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
if err := persistCertificate(tt.args.certName, log.NopLogger(), tt.args.pk); err != nil {
if !tt.wantErr {
t.Error(err)
}
}
})
// side effect: tt.args.keyName is created
if _, err := os.Stat(tt.args.certName); err != nil {
t.Errorf("persistCertificate() error = %v", err)
}
})
}
}