1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
package input
// DCSO FEVER
// Copyright (c) 2017, DCSO GmbH
import (
"encoding/json"
"fmt"
"math/rand"
"net"
"os"
"path/filepath"
"testing"
"github.com/DCSO/fever/types"
log "github.com/sirupsen/logrus"
)
func TestSocketInput(t *testing.T) {
dir, err := os.MkdirTemp("", "test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63()))
evChan := make(chan types.Entry)
events := make([]string, 1000)
is, err := MakeSocketInput(tmpfn, evChan, false)
if err != nil {
t.Fatal(err)
}
is.Run()
submitDone := make(chan bool)
collectDone := make(chan bool)
go func() {
c, err := net.Dial("unix", tmpfn)
if err != nil {
log.Println(err)
}
for i := 0; i < 1000; i++ {
events[i] = makeEveEvent([]string{"http", "dns", "foo"}[rand.Intn(3)], i)
c.Write([]byte(events[i]))
c.Write([]byte("\n"))
}
c.Close()
close(submitDone)
}()
coll := make([]types.Entry, 0)
go func() {
for i := 0; i < 1000; i++ {
e := <-evChan
coll = append(coll, e)
}
close(collectDone)
}()
<-submitDone
<-collectDone
ch := make(chan bool)
is.Stop(ch)
<-ch
if len(coll) != 1000 {
t.Fatalf("unexpected number of items read from socket: %d != 1000",
len(coll))
}
for i := 0; i < 1000; i++ {
var checkEvent types.EveEvent
json.Unmarshal([]byte(events[i]), &checkEvent)
if coll[i].EventType != checkEvent.EventType {
t.Fatalf("wrong event type for test event %d: %s != %s", i,
coll[i].EventType, checkEvent.EventType)
}
}
}
|