64 lines
1.8 KiB
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")
|
|
}
|
|
})
|
|
}
|
|
}
|