fix: correction race conditions et amélioration robustesse
Some checks failed
Build RPM Package / Build RPM Packages (CentOS 7, Rocky 8/9/10) (push) Has been cancelled
Some checks failed
Build RPM Package / Build RPM Packages (CentOS 7, Rocky 8/9/10) (push) Has been cancelled
- Correction race condition dans tlsparse avec mutex par ConnectionFlow - Fix fuite mémoire buffer HelloBuffer - Ajout rotation de fichiers logs (100MB, 3 backups) - Implémentation queue asynchrone avec reconnexion exponentielle (socket UNIX) - Validation BPF (caractères, longueur, parenthèses) - Augmentation snapLen pcap de 1600 à 65535 bytes - Permissions fichiers sécurisées (0600) - Ajout 46 tests unitaires (capture, output, logging) - Passage go test -race sans erreur Tests: go test -race ./... ✓ Build: go build ./... ✓ Lint: go vet ./... ✓ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
19
api/types.go
19
api/types.go
@ -1,6 +1,9 @@
|
||||
package api
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ServiceLog represents internal service logging for diagnostics
|
||||
type ServiceLog struct {
|
||||
@ -190,7 +193,7 @@ type Logger interface {
|
||||
func NewLogRecord(ch TLSClientHello, fp *Fingerprints) LogRecord {
|
||||
opts := ""
|
||||
if len(ch.TCPMeta.Options) > 0 {
|
||||
opts = joinStringSlice(ch.TCPMeta.Options, ",")
|
||||
opts = strings.Join(ch.TCPMeta.Options, ",")
|
||||
}
|
||||
|
||||
// Helper to create pointer from value for optional fields
|
||||
@ -230,18 +233,6 @@ func NewLogRecord(ch TLSClientHello, fp *Fingerprints) LogRecord {
|
||||
return rec
|
||||
}
|
||||
|
||||
// Helper to join string slice with separator
|
||||
func joinStringSlice(slice []string, sep string) string {
|
||||
if len(slice) == 0 {
|
||||
return ""
|
||||
}
|
||||
result := slice[0]
|
||||
for _, s := range slice[1:] {
|
||||
result += sep + s
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// Default values and constants
|
||||
|
||||
const (
|
||||
|
||||
@ -200,55 +200,6 @@ func TestDefaultConfig(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestJoinStringSlice(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
slice []string
|
||||
sep string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "empty slice",
|
||||
slice: []string{},
|
||||
sep: ",",
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
name: "nil slice",
|
||||
slice: nil,
|
||||
sep: ",",
|
||||
want: "",
|
||||
},
|
||||
{
|
||||
name: "single element",
|
||||
slice: []string{"hello"},
|
||||
sep: ",",
|
||||
want: "hello",
|
||||
},
|
||||
{
|
||||
name: "multiple elements",
|
||||
slice: []string{"MSS", "WS", "SACK", "TS"},
|
||||
sep: ",",
|
||||
want: "MSS,WS,SACK,TS",
|
||||
},
|
||||
{
|
||||
name: "multiple elements with multi-char separator",
|
||||
slice: []string{"MSS", "WS", "SACK"},
|
||||
sep: ", ",
|
||||
want: "MSS, WS, SACK",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := joinStringSlice(tt.slice, tt.sep)
|
||||
if got != tt.want {
|
||||
t.Errorf("joinStringSlice() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogRecordConversion(t *testing.T) {
|
||||
// Test that NewLogRecord correctly converts TCPMeta options to comma-separated string
|
||||
clientHello := TLSClientHello{
|
||||
|
||||
Reference in New Issue
Block a user