@@ -10,8 +10,10 @@ import (
1010
1111 "github.com/stretchr/testify/assert"
1212 "github.com/thejerf/slogassert"
13+ ffclient "github.com/thomaspoignant/go-feature-flag"
1314 "github.com/thomaspoignant/go-feature-flag/exporter"
1415 "github.com/thomaspoignant/go-feature-flag/ffcontext"
16+ "github.com/thomaspoignant/go-feature-flag/retriever/fileretriever"
1517 "github.com/thomaspoignant/go-feature-flag/testutils/mock"
1618 "github.com/thomaspoignant/go-feature-flag/utils/fflog"
1719)
@@ -27,7 +29,7 @@ func TestDataExporterScheduler_flushWithTime(t *testing.T) {
2729 inputEvents := []exporter.FeatureEvent {
2830 exporter .NewFeatureEvent (
2931 ffcontext .NewEvaluationContextBuilder ("ABCD" ).AddCustom ("anonymous" , true ).Build (), "random-key" ,
30- "YO" , "defaultVar" , false , "" , "SERVER" ),
32+ "YO" , "defaultVar" , false , "" , "SERVER" , nil ),
3133 }
3234
3335 for _ , event := range inputEvents {
@@ -50,7 +52,7 @@ func TestDataExporterScheduler_flushWithNumberOfEvents(t *testing.T) {
5052 for i := 0 ; i <= 100 ; i ++ {
5153 inputEvents = append (inputEvents , exporter .NewFeatureEvent (
5254 ffcontext .NewEvaluationContextBuilder ("ABCD" ).AddCustom ("anonymous" , true ).Build (),
53- "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" ))
55+ "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" , nil ))
5456 }
5557 for _ , event := range inputEvents {
5658 dc .AddEvent (event )
@@ -70,7 +72,7 @@ func TestDataExporterScheduler_defaultFlush(t *testing.T) {
7072 for i := 0 ; i <= 100000 ; i ++ {
7173 inputEvents = append (inputEvents , exporter .NewFeatureEvent (
7274 ffcontext .NewEvaluationContextBuilder ("ABCD" ).AddCustom ("anonymous" , true ).Build (),
73- "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" ))
75+ "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" , nil ))
7476 }
7577 for _ , event := range inputEvents {
7678 dc .AddEvent (event )
@@ -97,7 +99,7 @@ func TestDataExporterScheduler_exporterReturnError(t *testing.T) {
9799 for i := 0 ; i <= 200 ; i ++ {
98100 inputEvents = append (inputEvents , exporter .NewFeatureEvent (
99101 ffcontext .NewEvaluationContextBuilder ("ABCD" ).AddCustom ("anonymous" , true ).Build (),
100- "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" ))
102+ "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" , nil ))
101103 }
102104 for _ , event := range inputEvents {
103105 dc .AddEvent (event )
@@ -117,7 +119,7 @@ func TestDataExporterScheduler_nonBulkExporter(t *testing.T) {
117119 for i := 0 ; i < 100 ; i ++ {
118120 inputEvents = append (inputEvents , exporter .NewFeatureEvent (
119121 ffcontext .NewEvaluationContextBuilder ("ABCD" ).AddCustom ("anonymous" , true ).Build (),
120- "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" ))
122+ "random-key" , "YO" , "defaultVar" , false , "" , "SERVER" , nil ))
121123 }
122124 for _ , event := range inputEvents {
123125 dc .AddEvent (event )
@@ -127,3 +129,57 @@ func TestDataExporterScheduler_nonBulkExporter(t *testing.T) {
127129
128130 assert .Equal (t , inputEvents [:100 ], mockExporter .GetExportedEvents ())
129131}
132+
133+ func TestAddExporterMetadataFromContextToExporter (t * testing.T ) {
134+ tests := []struct {
135+ name string
136+ ctx ffcontext.EvaluationContext
137+ want map [string ]interface {}
138+ }{
139+ {
140+ name : "extract exporter metadata from context" ,
141+ ctx : ffcontext .NewEvaluationContextBuilder ("targeting-key" ).AddCustom ("gofeatureflag" , map [string ]interface {}{
142+ "exporterMetadata" : map [string ]interface {}{
143+ "key1" : "value1" ,
144+ "key2" : 123 ,
145+ "key3" : true ,
146+ "key4" : 123.45 ,
147+ },
148+ }).Build (),
149+ want : map [string ]interface {}{
150+ "key1" : "value1" ,
151+ "key2" : 123 ,
152+ "key3" : true ,
153+ "key4" : 123.45 ,
154+ },
155+ },
156+ {
157+ name : "no exporter metadata in the context" ,
158+ ctx : ffcontext .NewEvaluationContextBuilder ("targeting-key" ).Build (),
159+ want : nil ,
160+ },
161+ }
162+
163+ for _ , tt := range tests {
164+ t .Run (tt .name , func (t * testing.T ) {
165+ mockExporter := & mock.Exporter {}
166+ config := ffclient.Config {
167+ Retriever : & fileretriever.Retriever {Path : "../testdata/flag-config.yaml" },
168+ DataExporter : ffclient.DataExporter {
169+ Exporter : mockExporter ,
170+ FlushInterval : 100 * time .Millisecond ,
171+ },
172+ }
173+ goff , err := ffclient .New (config )
174+ assert .NoError (t , err )
175+
176+ _ , err = goff .BoolVariation ("test-flag" , tt .ctx , false )
177+ assert .NoError (t , err )
178+
179+ time .Sleep (120 * time .Millisecond )
180+ assert .Equal (t , 1 , len (mockExporter .GetExportedEvents ()))
181+ got := mockExporter .GetExportedEvents ()[0 ].Metadata
182+ assert .Equal (t , tt .want , got )
183+ })
184+ }
185+ }
0 commit comments