Files
cpone_midleware/internal/databaseconfig/registry_test.go

64 lines
1.8 KiB
Go

package databaseconfig
import (
"crypto/sha256"
"strings"
"testing"
)
func TestCredentialEncryptionRoundTrip(t *testing.T) {
registry := &Registry{credentialKey: sha256.Sum256([]byte("test-secret"))}
encrypted, err := registry.encrypt("database-password")
if err != nil {
t.Fatal(err)
}
if encrypted == "database-password" || strings.Contains(encrypted, "database-password") {
t.Fatalf("password was not encrypted: %q", encrypted)
}
decrypted, err := registry.decrypt(encrypted)
if err != nil {
t.Fatal(err)
}
if decrypted != "database-password" {
t.Fatalf("decrypted = %q", decrypted)
}
}
func TestCredentialCannotBeDecryptedWithDifferentKey(t *testing.T) {
first := &Registry{credentialKey: sha256.Sum256([]byte("first-secret"))}
second := &Registry{credentialKey: sha256.Sum256([]byte("second-secret"))}
encrypted, err := first.encrypt("database-password")
if err != nil {
t.Fatal(err)
}
if _, err := second.decrypt(encrypted); err == nil {
t.Fatal("expected decryption failure with a different key")
}
}
func TestValidateDatabaseSetting(t *testing.T) {
valid := Setting{RSCode: "rs_bekasi", Name: "RS Bekasi", Host: "host", Port: "3306", Database: "db", Username: "user"}
if err := Validate(valid); err != nil {
t.Fatalf("valid setting rejected: %v", err)
}
tests := []struct {
name string
mutate func(*Setting)
}{
{name: "blank code", mutate: func(s *Setting) { s.RSCode = " " }},
{name: "invalid code", mutate: func(s *Setting) { s.RSCode = "RS BEKASI" }},
{name: "blank hospital name", mutate: func(s *Setting) { s.Name = "" }},
{name: "invalid port", mutate: func(s *Setting) { s.Port = "70000" }},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
setting := valid
test.mutate(&setting)
if err := Validate(setting); err == nil {
t.Fatal("expected validation error")
}
})
}
}