1
16
17
18
19
20 package testing
21
22 import (
23 "testing"
24 "time"
25
26 logpb "cloud.google.com/go/logging/apiv2/loggingpb"
27 grpc "google.golang.org/grpc"
28 "google.golang.org/protobuf/proto"
29 tspb "google.golang.org/protobuf/types/known/timestamppb"
30 )
31
32 func TestNewServer(t *testing.T) {
33
34 addr, err := NewServer()
35 if err != nil {
36 t.Fatal(err)
37 }
38 conn, err := grpc.Dial(addr, grpc.WithInsecure())
39 if err != nil {
40 t.Fatal(err)
41 }
42
43 time.Sleep(300 * time.Millisecond)
44 conn.Close()
45 }
46
47 func TestParseFilter(t *testing.T) {
48 for _, test := range []struct {
49 filter string
50 want string
51 wantErr bool
52 }{
53 {"", "", false},
54 {"logName = syslog", "syslog", false},
55 {"logname = syslog", "", true},
56 {"logName = 'syslog'", "", true},
57 {"logName == syslog", "", true},
58 } {
59 got, err := parseFilter(test.filter)
60 if err != nil {
61 if !test.wantErr {
62 t.Errorf("%q: got %v, want no error", test.filter, err)
63 }
64 continue
65 }
66 if test.wantErr {
67 t.Errorf("%q: got no error, want one", test.filter)
68 continue
69 }
70 if got != test.want {
71 t.Errorf("%q: got %q, want %q", test.filter, got, test.want)
72 }
73 }
74 }
75
76 func TestSortEntries(t *testing.T) {
77 entries := []*logpb.LogEntry{
78 {Timestamp: &tspb.Timestamp{Seconds: 30}},
79 {Timestamp: &tspb.Timestamp{Seconds: 10}},
80 {Timestamp: &tspb.Timestamp{Seconds: 20}, InsertId: "b"},
81 {Timestamp: &tspb.Timestamp{Seconds: 20}, InsertId: "a"},
82 {Timestamp: &tspb.Timestamp{Seconds: 20}, InsertId: "c"},
83 }
84 for _, test := range []struct {
85 orderBy string
86 want []int
87 }{
88 {"", []int{1, 3, 2, 4, 0}},
89 {"timestamp asc", []int{1, 3, 2, 4, 0}},
90 {"timestamp desc", []int{0, 4, 2, 3, 1}},
91 {"something else", nil},
92 } {
93 got := make([]*logpb.LogEntry, len(entries))
94 copy(got, entries)
95 err := sortEntries(got, test.orderBy)
96 if err != nil {
97 if test.want != nil {
98 t.Errorf("%q: got %v, want nil error", test.orderBy, err)
99 }
100 continue
101 }
102 want := make([]*logpb.LogEntry, len(entries))
103 for i, j := range test.want {
104 want[i] = entries[j]
105 }
106 if !logEntriesEqual(got, want) {
107 t.Errorf("%q: got %v, want %v", test.orderBy, got, want)
108 }
109 }
110 }
111
112 func logEntriesEqual(a, b []*logpb.LogEntry) bool {
113 if len(a) != len(b) {
114 return false
115 }
116 for i, aa := range a {
117 if !proto.Equal(aa, b[i]) {
118 return false
119 }
120 }
121 return true
122 }
123
View as plain text