dal-license-server/internal/service/keygen_test.go
djuka dc0114e4b7 Inicijalni commit: kompletna implementacija + dokumentacija + testovi
- Kompletna Go implementacija licencnog servera (19 Go fajlova)
- Klijentski API: activate, deactivate, validate
- Admin API: CRUD licence, stats, audit log
- Admin dashboard: htmx + Go templates
- RSA-2048 potpisivanje licencnih podataka
- Rate limiting i API key autentifikacija
- MySQL migracije i seed podaci (ESIR, ARV, LIGHT_TICKET)
- Unit testovi: keygen, crypto, model, middleware (24 testa)
- Dokumentacija: SPEC.md, ARCHITECTURE.md, SETUP.md, API.md, TESTING.md, README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 07:42:25 +00:00

82 lines
1.8 KiB
Go

package service
import (
"strings"
"testing"
)
func TestGenerateKey_Format(t *testing.T) {
prefixes := []string{"ESIR-", "ARV-", "LT-"}
for _, prefix := range prefixes {
key, err := GenerateKey(prefix)
if err != nil {
t.Fatalf("GenerateKey(%q) error: %v", prefix, err)
}
if !strings.HasPrefix(key, prefix) {
t.Errorf("key %q nema prefix %q", key, prefix)
}
// Remove prefix, check 4 groups of 4 chars separated by dashes
rest := strings.TrimPrefix(key, prefix)
groups := strings.Split(rest, "-")
if len(groups) != 4 {
t.Errorf("key %q: ocekivano 4 grupe, dobijeno %d", key, len(groups))
}
for i, g := range groups {
if len(g) != 4 {
t.Errorf("key %q: grupa %d ima %d karaktera umesto 4", key, i, len(g))
}
}
}
}
func TestGenerateKey_ValidChars(t *testing.T) {
key, err := GenerateKey("TEST-")
if err != nil {
t.Fatal(err)
}
rest := strings.TrimPrefix(key, "TEST-")
rest = strings.ReplaceAll(rest, "-", "")
for _, c := range rest {
if !strings.ContainsRune(keyChars, c) {
t.Errorf("key sadrzi nedozvoljen karakter: %c", c)
}
}
}
func TestGenerateKey_NoConfusingChars(t *testing.T) {
// Generate multiple keys and check none contain O, 0, I, 1, L, Z
confusing := "OIL01Z"
for i := 0; i < 50; i++ {
key, err := GenerateKey("T-")
if err != nil {
t.Fatal(err)
}
rest := strings.TrimPrefix(key, "T-")
rest = strings.ReplaceAll(rest, "-", "")
for _, c := range rest {
if strings.ContainsRune(confusing, c) {
t.Errorf("key sadrzi konfuzan karakter %c: %s", c, key)
}
}
}
}
func TestGenerateKey_Uniqueness(t *testing.T) {
seen := make(map[string]bool)
for i := 0; i < 100; i++ {
key, err := GenerateKey("U-")
if err != nil {
t.Fatal(err)
}
if seen[key] {
t.Errorf("duplikat kljuca: %s", key)
}
seen[key] = true
}
}