#12: implement Antispam & Antivirus scanning pipeline (Rspamd & ClamAV)
This commit is contained in:
1 parent
4c2e0b9563
commit
54d1ea5810
15 files changed
+825
-5
No files matched your search
@@ -0,0 +1,70 @@
|
||||
package clamav
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"lambdamail/protocols/internal/application/port"
|
||||
"lambdamail/protocols/internal/domain/valueobject"
|
||||
)
|
||||
|
||||
func TestClamAVAdapter_Scan_CleanAndVirus(t *testing.T) {
|
||||
// Clean mock server
|
||||
cleanLn, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatalf("listen clean server: %v", err)
|
||||
}
|
||||
defer cleanLn.Close()
|
||||
|
||||
go func() {
|
||||
conn, err := cleanLn.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
buf := make([]byte, 4096)
|
||||
for {
|
||||
_, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
conn.Write([]byte("stream: OK\x00"))
|
||||
}()
|
||||
|
||||
adapter := NewClamAVAdapter(cleanLn.Addr().String())
|
||||
res, err := adapter.Scan(context.Background(), port.ScanInput{Payload: []byte("clean content")})
|
||||
if err != nil || res.Verdict != valueobject.ScanVerdictClean {
|
||||
t.Fatalf("expected clean scan, got res=%+v, err=%v", res, err)
|
||||
}
|
||||
|
||||
// Virus mock server
|
||||
virusLn, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatalf("listen virus server: %v", err)
|
||||
}
|
||||
defer virusLn.Close()
|
||||
|
||||
go func() {
|
||||
conn, err := virusLn.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
buf := make([]byte, 4096)
|
||||
for {
|
||||
_, err := conn.Read(buf)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
conn.Write([]byte("stream: EICAR-Test-Signature FOUND\x00"))
|
||||
}()
|
||||
|
||||
virusAdapter := NewClamAVAdapter(virusLn.Addr().String())
|
||||
res, err = virusAdapter.Scan(context.Background(), port.ScanInput{Payload: []byte("virus content")})
|
||||
if err != nil || res.Verdict != valueobject.ScanVerdictVirusReject || res.VirusName != "EICAR-Test-Signature" {
|
||||
t.Fatalf("expected virus scan, got res=%+v, err=%v", res, err)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user