@@ -9,14 +9,31 @@ import (
99 "github.com/stretchr/testify/assert"
1010)
1111
12- type MockWriter struct {}
12+ // mockWriter implements Writer and Migrator interfaces
13+ type mockWriter struct {
14+ err error
15+ needsMigration bool
16+ needsMigrationErr error
17+ }
18+
19+ func (m * mockWriter ) SyncMetric (string , string , sinks.SyncOp ) error {
20+ return m .err
21+ }
22+
23+ func (m * mockWriter ) Write (metrics.MeasurementEnvelope ) error {
24+ return m .err
25+ }
26+
27+ func (m * mockWriter ) Migrate () error {
28+ return m .err
29+ }
1330
14- func (mw * MockWriter ) SyncMetric ( _ , _ string , _ sinks. SyncOp ) error {
15- return nil
31+ func (m * mockWriter ) NeedsMigration () ( bool , error ) {
32+ return m . needsMigration , m . needsMigrationErr
1633}
1734
18- func (mw * MockWriter ) Write ( _ metrics.MeasurementEnvelope ) error {
19- return nil
35+ func (m * mockWriter ) DefineMetrics ( * metrics.Metrics ) error {
36+ return m . err
2037}
2138
2239func TestNewMultiWriter (t * testing.T ) {
@@ -66,50 +83,27 @@ func TestNewMultiWriter(t *testing.T) {
6683
6784func TestAddWriter (t * testing.T ) {
6885 mw := & sinks.MultiWriter {}
69- mockWriter := & MockWriter {}
86+ mockWriter := & mockWriter {}
7087 mw .AddWriter (mockWriter )
7188 assert .Equal (t , 1 , mw .Count ())
7289}
7390
7491func TestSyncMetrics (t * testing.T ) {
7592 mw := & sinks.MultiWriter {}
76- mockWriter := & MockWriter {}
93+ mockWriter := & mockWriter {}
7794 mw .AddWriter (mockWriter )
7895 err := mw .SyncMetric ("db" , "metric" , sinks .InvalidOp )
7996 assert .NoError (t , err )
8097}
8198
8299func TestWriteMeasurements (t * testing.T ) {
83100 mw := & sinks.MultiWriter {}
84- mockWriter := & MockWriter {}
101+ mockWriter := & mockWriter {}
85102 mw .AddWriter (mockWriter )
86103 err := mw .Write (metrics.MeasurementEnvelope {})
87104 assert .NoError (t , err )
88105}
89106
90- // mockMigratableWriter implements Writer and Migrator interfaces
91- type mockMigratableWriter struct {
92- migrateErr error
93- needsMigration bool
94- needsMigrationErr error
95- }
96-
97- func (m * mockMigratableWriter ) SyncMetric (string , string , sinks.SyncOp ) error {
98- return nil
99- }
100-
101- func (m * mockMigratableWriter ) Write (metrics.MeasurementEnvelope ) error {
102- return nil
103- }
104-
105- func (m * mockMigratableWriter ) Migrate () error {
106- return m .migrateErr
107- }
108-
109- func (m * mockMigratableWriter ) NeedsMigration () (bool , error ) {
110- return m .needsMigration , m .needsMigrationErr
111- }
112-
113107func TestMultiWriterMigrate (t * testing.T ) {
114108 tests := []struct {
115109 name string
@@ -119,45 +113,45 @@ func TestMultiWriterMigrate(t *testing.T) {
119113 {
120114 name : "no migratable writers" ,
121115 writers : []sinks.Writer {
122- & MockWriter {},
116+ & mockWriter {},
123117 },
124118 expectError : false ,
125119 },
126120 {
127121 name : "single migratable writer success" ,
128122 writers : []sinks.Writer {
129- & mockMigratableWriter {},
123+ & mockWriter {},
130124 },
131125 expectError : false ,
132126 },
133127 {
134128 name : "single migratable writer error" ,
135129 writers : []sinks.Writer {
136- & mockMigratableWriter { migrateErr : assert .AnError },
130+ & mockWriter { err : assert .AnError },
137131 },
138132 expectError : true ,
139133 },
140134 {
141135 name : "multiple migratable writers success" ,
142136 writers : []sinks.Writer {
143- & mockMigratableWriter {},
144- & mockMigratableWriter {},
137+ & mockWriter {},
138+ & mockWriter {},
145139 },
146140 expectError : false ,
147141 },
148142 {
149143 name : "multiple writers with one error" ,
150144 writers : []sinks.Writer {
151- & mockMigratableWriter {},
152- & mockMigratableWriter { migrateErr : assert .AnError },
145+ & mockWriter {},
146+ & mockWriter { err : assert .AnError },
153147 },
154148 expectError : true ,
155149 },
156150 {
157151 name : "mixed writers with migration error" ,
158152 writers : []sinks.Writer {
159- & MockWriter {},
160- & mockMigratableWriter { migrateErr : assert .AnError },
153+ & mockWriter {},
154+ & mockWriter { err : assert .AnError },
161155 },
162156 expectError : true ,
163157 },
@@ -179,6 +173,69 @@ func TestMultiWriterMigrate(t *testing.T) {
179173 }
180174}
181175
176+ func TestDefineMetrics (t * testing.T ) {
177+ tests := []struct {
178+ name string
179+ writers []sinks.Writer
180+ expectError bool
181+ }{
182+ {
183+ name : "writer without DefineMetrics" ,
184+ writers : []sinks.Writer {& mockWriter {}},
185+ expectError : false ,
186+ },
187+ {
188+ name : "single definer success" ,
189+ writers : []sinks.Writer {& mockWriter {err : nil }},
190+ expectError : false ,
191+ },
192+ {
193+ name : "single definer error" ,
194+ writers : []sinks.Writer {& mockWriter {err : assert .AnError }},
195+ expectError : true ,
196+ },
197+ {
198+ name : "two definers errors" ,
199+ writers : []sinks.Writer {
200+ & mockWriter {err : assert .AnError },
201+ & mockWriter {err : assert .AnError },
202+ },
203+ expectError : true ,
204+ },
205+ {
206+ name : "mixed writers error" ,
207+ writers : []sinks.Writer {
208+ & mockWriter {},
209+ & mockWriter {err : assert .AnError },
210+ },
211+ expectError : true ,
212+ },
213+ {
214+ name : "mixed writers success" ,
215+ writers : []sinks.Writer {
216+ & mockWriter {},
217+ & mockWriter {err : nil },
218+ },
219+ expectError : false ,
220+ },
221+ }
222+
223+ for _ , tt := range tests {
224+ t .Run (tt .name , func (t * testing.T ) {
225+ mw := & sinks.MultiWriter {}
226+ for _ , w := range tt .writers {
227+ mw .AddWriter (w )
228+ }
229+ err := mw .DefineMetrics (& metrics.Metrics {})
230+ if tt .expectError {
231+ assert .Error (t , err )
232+ } else {
233+ assert .NoError (t , err )
234+ }
235+ })
236+ }
237+ }
238+
182239func TestMultiWriterNeedsMigration (t * testing.T ) {
183240 tests := []struct {
184241 name string
@@ -189,49 +246,49 @@ func TestMultiWriterNeedsMigration(t *testing.T) {
189246 {
190247 name : "no migratable writers" ,
191248 writers : []sinks.Writer {
192- & MockWriter {},
249+ & mockWriter {},
193250 },
194251 expectNeedsMigrate : false ,
195252 expectError : false ,
196253 },
197254 {
198255 name : "single writer needs migration" ,
199256 writers : []sinks.Writer {
200- & mockMigratableWriter {needsMigration : true },
257+ & mockWriter {needsMigration : true },
201258 },
202259 expectNeedsMigrate : true ,
203260 expectError : false ,
204261 },
205262 {
206263 name : "single writer no migration needed" ,
207264 writers : []sinks.Writer {
208- & mockMigratableWriter {needsMigration : false },
265+ & mockWriter {needsMigration : false },
209266 },
210267 expectNeedsMigrate : false ,
211268 expectError : false ,
212269 },
213270 {
214271 name : "multiple writers one needs migration" ,
215272 writers : []sinks.Writer {
216- & mockMigratableWriter {needsMigration : false },
217- & mockMigratableWriter {needsMigration : true },
273+ & mockWriter {needsMigration : false },
274+ & mockWriter {needsMigration : true },
218275 },
219276 expectNeedsMigrate : true ,
220277 expectError : false ,
221278 },
222279 {
223280 name : "error checking migration" ,
224281 writers : []sinks.Writer {
225- & mockMigratableWriter {needsMigrationErr : assert .AnError },
282+ & mockWriter {needsMigrationErr : assert .AnError },
226283 },
227284 expectNeedsMigrate : false ,
228285 expectError : true ,
229286 },
230287 {
231288 name : "mixed writers one needs migration" ,
232289 writers : []sinks.Writer {
233- & MockWriter {},
234- & mockMigratableWriter {needsMigration : true },
290+ & mockWriter {},
291+ & mockWriter {needsMigration : true },
235292 },
236293 expectNeedsMigrate : true ,
237294 expectError : false ,
0 commit comments