@@ -16,6 +16,7 @@ package stackdriver
1616
1717import (
1818 "context"
19+ "fmt"
1920 "reflect"
2021 "testing"
2122 "time"
@@ -1014,6 +1015,62 @@ func TestExporter_makeReq_withCustomMonitoredResource(t *testing.T) {
10141015 }
10151016}
10161017
1018+ func TestExporter_customContext (t * testing.T ) {
1019+ oldCreateMetricDescriptor := createMetricDescriptor
1020+ oldCreateTimeSeries := createTimeSeries
1021+
1022+ defer func () {
1023+ createMetricDescriptor = oldCreateMetricDescriptor
1024+ createTimeSeries = oldCreateTimeSeries
1025+ }()
1026+
1027+ var timedOut = 0
1028+ createMetricDescriptor = func (ctx context.Context , c * monitoring.MetricClient , mdr * monitoringpb.CreateMetricDescriptorRequest ) (* metric.MetricDescriptor , error ) {
1029+ select {
1030+ case <- time .After (15 * time .Millisecond ):
1031+ fmt .Println ("createMetricDescriptor did not time out" )
1032+ case <- ctx .Done ():
1033+ timedOut ++
1034+ }
1035+ return & metric.MetricDescriptor {}, nil
1036+ }
1037+ createTimeSeries = func (ctx context.Context , c * monitoring.MetricClient , ts * monitoringpb.CreateTimeSeriesRequest ) error {
1038+ select {
1039+ case <- time .After (15 * time .Millisecond ):
1040+ fmt .Println ("createTimeSeries did not time out" )
1041+ case <- ctx .Done ():
1042+ timedOut ++
1043+ }
1044+ return nil
1045+ }
1046+
1047+ v := & view.View {
1048+ Name : "test_view_count" ,
1049+ Description : "view_description" ,
1050+ Measure : stats .Float64 ("test-measure/TestExporter_createMeasure" , "measure desc" , stats .UnitMilliseconds ),
1051+ Aggregation : view .Count (),
1052+ }
1053+
1054+ data := & view.CountData {Value : 0 }
1055+ vd := newTestViewData (v , time .Now (), time .Now (), data , data )
1056+
1057+ ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Millisecond )
1058+ defer cancel ()
1059+ e := & statsExporter {
1060+ createdViews : make (map [string ]* metricpb.MetricDescriptor ),
1061+ o : Options {ProjectID : "test_project" , Context : ctx },
1062+ }
1063+ if err := e .uploadStats ([]* view.Data {vd }); err != nil {
1064+ t .Errorf ("Exporter.uploadStats() error = %v" , err )
1065+ }
1066+ if ctx .Err () != context .DeadlineExceeded {
1067+ t .Errorf ("expected context to time out; got %v" , ctx .Err ())
1068+ }
1069+ if timedOut != 2 {
1070+ t .Errorf ("expected two functions to time out; got %d" , timedOut )
1071+ }
1072+ }
1073+
10171074func newTestViewData (v * view.View , start , end time.Time , data1 , data2 view.AggregationData ) * view.Data {
10181075 key , _ := tag .NewKey ("test-key" )
10191076 tag1 := tag.Tag {Key : key , Value : "test-value-1" }
0 commit comments