@@ -177,7 +177,6 @@ func TestSignozProvider_RunQuery(t *testing.T) {
177177 queryResult string
178178 }{
179179 {name : "multiple series" , queryResult : `{"status":"success","data":{"data":{"results":[{"queryName":"A","aggregations":[{"series":[{"values":[{"timestamp":1714404069294,"value":1}]},{"values":[{"timestamp":1714404069294,"value":2}]}]}]}]}}}` },
180- {name : "multiple series" , queryResult : `{"status":"success","data":{"data":{"results":[{"queryName":"A","aggregations":[{"series":[{"values":[{"timestamp":1714404069294,"value":1}]},{"values":[{"timestamp":1714404069294,"value":2}]}]}]}]}}}` },
181180 }
182181
183182 for _ , tt := range multipleResultTests {
@@ -292,3 +291,54 @@ func TestSignozProvider_RunQueryWithProviderHeaders(t *testing.T) {
292291 assert .Equal (t , float64 (100 ), val )
293292 })
294293}
294+
295+ func TestSignozProvider_RunQueryWithPartialValues (t * testing.T ) {
296+ t .Run ("filters partial values and returns last non-partial value" , func (t * testing.T ) {
297+ ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
298+ // Response with multiple values including partial ones
299+ json := `{"status":"success","data":{"type":"time_series","data":{"results":[{"queryName":"A","aggregations":[{"index":0,"alias":"","series":[{"labels":[],"values":[{"timestamp":1742602572000,"value":50},{"timestamp":1742602573000,"value":75},{"timestamp":1742602574000,"value":100,"partial":true},{"timestamp":1742602575000,"value":200,"partial":true}]}]}]}]}}}`
300+ w .Write ([]byte (json ))
301+ }))
302+ defer ts .Close ()
303+
304+ clients := signozFake ()
305+
306+ template , err := clients .flaggerClient .FlaggerV1beta1 ().MetricTemplates ("default" ).Get (context .TODO (), "signoz" , metav1.GetOptions {})
307+ require .NoError (t , err )
308+ template .Spec .Provider .Address = ts .URL
309+
310+ secret , err := clients .kubeClient .CoreV1 ().Secrets ("default" ).Get (context .TODO (), "signoz" , metav1.GetOptions {})
311+ require .NoError (t , err )
312+
313+ sp , err := NewSignozProvider ("1m" , template .Spec .Provider , secret .Data )
314+ require .NoError (t , err )
315+
316+ val , err := sp .RunQuery (template .Spec .Query )
317+ require .NoError (t , err )
318+ // Should return 75, the last non-partial value, not 200
319+ assert .Equal (t , float64 (75 ), val )
320+ })
321+
322+ t .Run ("returns error when all values are partial" , func (t * testing.T ) {
323+ ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
324+ json := `{"status":"success","data":{"type":"time_series","data":{"results":[{"queryName":"A","aggregations":[{"index":0,"alias":"","series":[{"labels":[],"values":[{"timestamp":1742602572000,"value":50,"partial":true},{"timestamp":1742602573000,"value":75,"partial":true}]}]}]}]}}}`
325+ w .Write ([]byte (json ))
326+ }))
327+ defer ts .Close ()
328+
329+ clients := signozFake ()
330+
331+ template , err := clients .flaggerClient .FlaggerV1beta1 ().MetricTemplates ("default" ).Get (context .TODO (), "signoz" , metav1.GetOptions {})
332+ require .NoError (t , err )
333+ template .Spec .Provider .Address = ts .URL
334+
335+ secret , err := clients .kubeClient .CoreV1 ().Secrets ("default" ).Get (context .TODO (), "signoz" , metav1.GetOptions {})
336+ require .NoError (t , err )
337+
338+ sp , err := NewSignozProvider ("1m" , template .Spec .Provider , secret .Data )
339+ require .NoError (t , err )
340+
341+ _ , err = sp .RunQuery (template .Spec .Query )
342+ require .True (t , errors .Is (err , ErrNoValuesFound ))
343+ })
344+ }
0 commit comments