1 package ldservices 2 3 import ( 4 "net/http" 5 6 "github.com/launchdarkly/go-test-helpers/v3/httphelpers" 7 ) 8 9 const ( 10 // ServerSideSDKStreamingPath is the expected request path for server-side SDK stream requests. 11 ServerSideSDKStreamingPath = "/all" 12 ) 13 14 // ServerSideStreamingServiceHandler creates an HTTP handler to mimic the LaunchDarkly server-side streaming service. 15 // It uses httphelpers.SSEHandler(), while also enforcing that the request path is ServerSideSDKStreamingPath and 16 // that the method is GET. 17 // 18 // There must always be an initial event, since LaunchDarkly streams always start with a "put". 19 // 20 // initialData := ldservices.NewServerSDKData().Flags(flag1, flag2) // all clients will get this in a "put" event 21 // handler, stream := ldservices.ServerSideStreamingHandler(initialData.ToPutEvent()) 22 // server := httptest.NewServer(handler) 23 // stream.Enqueue(httphelpers.SSEEvent{Event: "patch", Data: myPatchData}) // push an update 24 // stream.Close() // force any current stream connections to be closed 25 func ServerSideStreamingServiceHandler( 26 initialEvent httphelpers.SSEEvent, 27 ) (http.Handler, httphelpers.SSEStreamControl) { 28 handler, stream := httphelpers.SSEHandler(&initialEvent) 29 return httphelpers.HandlerForPath(ServerSideSDKStreamingPath, httphelpers.HandlerForMethod("GET", handler, nil), nil), 30 stream 31 } 32