|
1 | 1 | package eventsink_test |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
| 5 | + "os" |
4 | 6 | "strconv" |
5 | 7 | "time" |
6 | 8 |
|
@@ -32,6 +34,7 @@ var _ = Describe("Splunk", func() { |
32 | 34 |
|
33 | 35 | memSink *testing.MemorySinkMock |
34 | 36 | sink *eventsink.Splunk |
| 37 | + config *eventsink.SplunkConfig |
35 | 38 |
|
36 | 39 | event map[string]interface{} |
37 | 40 | logger lager.Logger |
@@ -68,18 +71,63 @@ var _ = Describe("Splunk", func() { |
68 | 71 | mockClient2 = &testing.EventWriterMock{} |
69 | 72 |
|
70 | 73 | logger = lager.NewLogger("test") |
71 | | - config := &eventsink.SplunkConfig{ |
72 | | - FlushInterval: time.Millisecond, |
73 | | - QueueSize: 1000, |
74 | | - BatchSize: 1, |
75 | | - Retries: 1, |
76 | | - Hostname: "localhost", |
77 | | - ExtraFields: map[string]string{"env": "dev", "test": "field"}, |
78 | | - UUID: "0a956421-f2e1-4215-9d88-d15633bb3023", |
79 | | - Logger: logger, |
| 74 | + config = &eventsink.SplunkConfig{ |
| 75 | + FlushInterval: time.Millisecond, |
| 76 | + QueueSize: 1000, |
| 77 | + BatchSize: 1, |
| 78 | + Retries: 1, |
| 79 | + Hostname: "localhost", |
| 80 | + ExtraFields: map[string]string{"env": "dev", "test": "field"}, |
| 81 | + UUID: "0a956421-f2e1-4215-9d88-d15633bb3023", |
| 82 | + Logger: logger, |
| 83 | + DropWarnThreshold: 1000, |
80 | 84 | } |
81 | 85 | sink = eventsink.NewSplunk([]eventwriter.Writer{mockClient, mockClient2}, config) |
82 | 86 | }) |
| 87 | + Context("When LogStatus is executed", func() { |
| 88 | + BeforeEach(func() { |
| 89 | + config.StatusMonitorInterval = time.Second * 1 |
| 90 | + flushInterval := time.Second * 2 |
| 91 | + config.FlushInterval = flushInterval |
| 92 | + file, _ := os.OpenFile("lager.log", os.O_CREATE|os.O_RDWR, 0600) |
| 93 | + loggerSink := lager.NewReconfigurableSink(lager.NewWriterSink(file, lager.DEBUG), lager.DEBUG) |
| 94 | + myLogger := lager.NewLogger("LogStatus") |
| 95 | + myLogger.RegisterSink(loggerSink) |
| 96 | + config.Logger = myLogger |
| 97 | + defer file.Close() |
| 98 | + go sink.LogStatus() |
| 99 | + // low pressure |
| 100 | + for i := 0; i < int(float64(config.QueueSize)*0.12); i++ { |
| 101 | + sink.Write(make(map[string]interface{}), fmt.Sprintf("event %d", i)) |
| 102 | + } |
| 103 | + // medium pressure |
| 104 | + time.Sleep(flushInterval) |
| 105 | + for i := 0; i < int(float64(config.QueueSize)*0.40); i++ { |
| 106 | + sink.Write(make(map[string]interface{}), fmt.Sprintf("event %d", i)) |
| 107 | + } |
| 108 | + time.Sleep(flushInterval) |
| 109 | + // high pressure |
| 110 | + for i := 0; i < int(float64(config.QueueSize)*0.40); i++ { |
| 111 | + sink.Write(make(map[string]interface{}), fmt.Sprintf("event %d", i)) |
| 112 | + } |
| 113 | + time.Sleep(flushInterval) |
| 114 | + // too high pressure |
| 115 | + for i := 0; i < int(float64(config.QueueSize)*0.08); i++ { |
| 116 | + sink.Write(make(map[string]interface{}), fmt.Sprintf("event %d", i)) |
| 117 | + } |
| 118 | + time.Sleep(flushInterval) |
| 119 | + }) |
| 120 | + |
| 121 | + It("tests pressure status", func() { |
| 122 | + data, _ := os.ReadFile("lager.log") |
| 123 | + log := string(data) |
| 124 | + Expect(log).Should(ContainSubstring("status\":\"too high")) |
| 125 | + Expect(log).Should(ContainSubstring("status\":\"high")) |
| 126 | + Expect(log).Should(ContainSubstring("status\":\"medium")) |
| 127 | + Expect(log).Should(ContainSubstring("status\":\"low")) |
| 128 | + os.Remove("lager.log") |
| 129 | + }) |
| 130 | + }) |
83 | 131 |
|
84 | 132 | It("sends events to client", func() { |
85 | 133 | eventType = events.Envelope_Error |
|
0 commit comments