forked from hhkbp2/go-logging
/
handler_thrift_test.go
73 lines (64 loc) · 1.8 KB
/
handler_thrift_test.go
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
package logging
import (
"container/list"
"fmt"
"git.apache.org/thrift.git/lib/go/thrift"
gen "github.com/hhkbp2/go-logging/gen-go/logging"
"github.com/hhkbp2/testify/require"
"testing"
)
type TestThriftServerHandler struct {
received *list.List
ch chan int
}
func NewTestThriftServerHandler(
received *list.List, ch chan int) *TestThriftServerHandler {
return &TestThriftServerHandler{
received: received,
ch: ch,
}
}
func (self *TestThriftServerHandler) Report(record *gen.ThriftLogRecord) error {
self.received.PushBack(record.Message)
self.ch <- 1
return nil
}
func _testSetupThriftServer(
t *testing.T, host string, port uint16, received *list.List, ch chan int) thrift.TServer {
handler := NewTestThriftServerHandler(received, ch)
processor := gen.NewThriftLoggingServiceProcessor(handler)
address := fmt.Sprintf("%s:%d", host, port)
serverTransport, err := thrift.NewTServerSocket(address)
require.Nil(t, err)
transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
server := thrift.NewTSimpleServer4(
processor,
serverTransport,
transportFactory,
protocolFactory)
go func() {
server.Serve()
}()
return server
}
func TestThriftHandler(t *testing.T) {
host := "127.0.0.1"
port := uint16(8082)
serverReceived := list.New()
ch := make(chan int, 1)
server := _testSetupThriftServer(t, host, port, serverReceived, ch)
require.Equal(t, 0, serverReceived.Len())
handler := NewThriftHandler(host, port)
logger := GetLogger("thrift")
logger.AddHandler(handler)
message := "test"
logger.Errorf(message)
handler.Close()
<-ch
server.Stop()
require.Equal(t, 1, serverReceived.Len())
m, ok := serverReceived.Front().Value.(string)
require.True(t, ok)
require.Equal(t, message, m)
}