File: input_socket_test.go

package info (click to toggle)
fever 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 920 kB
  • sloc: sh: 41; makefile: 18
file content (81 lines) | stat: -rw-r--r-- 1,549 bytes parent folder | download
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)
		}
	}
}