84 lines
2.4 KiB
Go
84 lines
2.4 KiB
Go
package rspamc
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"git.vsu.ru/ai/rspamd-cgp/config"
|
|
)
|
|
|
|
func TestScan_HttpRequestConstruction(t *testing.T) {
|
|
// Создаем тестовое сообщение
|
|
tmpDir := t.TempDir()
|
|
msgPath := filepath.Join(tmpDir, "100.msg")
|
|
// Важно: HdrPos будет 24 (после \n\n)
|
|
os.WriteFile(msgPath, []byte("P <s@domain.name>\nR <r@domain.name>\n\nFrom: s@domain.name\n\nBody"), 0644)
|
|
|
|
// Проверяем, что заголовки из CGP Message долетели до Rspamd
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// CommuniGate хранит адреса в скобках, проверяем именно этот вариант
|
|
expectedFrom := "s@domain.name"
|
|
if r.Header.Get("From") != expectedFrom {
|
|
t.Errorf("Expected From header %s, got %s", expectedFrom, r.Header.Get("From"))
|
|
}
|
|
if r.Header.Get("MTA-Tag") != "test-mta" {
|
|
t.Errorf("Expected MTA-Tag, got %s", r.Header.Get("MTA-Tag"))
|
|
}
|
|
|
|
// Возвращаем мок-ответ
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(RspamdResponse{
|
|
Action: "no action",
|
|
Score: 0.1,
|
|
})
|
|
}))
|
|
defer ts.Close()
|
|
|
|
// Настраиваем конфиг на этот сервер
|
|
conf := &config.Config{
|
|
Host: ts.URL,
|
|
AuthservId: "test-mta",
|
|
NotifyFrom: "postmaster@domain.name",
|
|
}
|
|
config.SetGlobal(conf)
|
|
|
|
// Запускаем скан.
|
|
// Мы не проверяем stdout (это требует сложного перехвата),
|
|
// но убеждаемся, что цепочка вызовов проходит без ошибок и паник.
|
|
Scan(1, msgPath)
|
|
}
|
|
|
|
func TestRspamdResponse_Unmarshalling(t *testing.T) {
|
|
// Проверяем, что наша структура корректно ест сложный JSON от Rspamd
|
|
rawJSON := `{
|
|
"action": "add header",
|
|
"score": 5.5,
|
|
"required_score": 7.0,
|
|
"milter": {
|
|
"add_headers": {
|
|
"X-Spam": {"value": "Yes"}
|
|
}
|
|
},
|
|
"symbols": {
|
|
"TEST_SYM": {"score": 1.2, "description": "some sym"}
|
|
}
|
|
}`
|
|
|
|
var res RspamdResponse
|
|
err := json.Unmarshal([]byte(rawJSON), &res)
|
|
if err != nil {
|
|
t.Fatalf("Unmarshall failed: %v", err)
|
|
}
|
|
|
|
if res.Milter.AddHeaders["X-Spam"].Value != "Yes" {
|
|
t.Error("Failed to parse milter headers")
|
|
}
|
|
if res.Symbols["TEST_SYM"].Score != 1.2 {
|
|
t.Error("Failed to parse symbols")
|
|
}
|
|
}
|