Skip to content

Commit 5b68fe4

Browse files
committed
chore: improve tests
1 parent c45ed33 commit 5b68fe4

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

pkg/metrics/providers/signoz.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package providers
1818

1919
import (
20+
"bytes"
2021
"context"
2122
"crypto/tls"
2223
"encoding/json"
@@ -26,7 +27,6 @@ import (
2627
"net/http"
2728
"net/url"
2829
"path"
29-
"strings"
3030
"time"
3131

3232
flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1"
@@ -136,7 +136,6 @@ func (p *SignozProvider) RunQuery(query string) (float64, error) {
136136
}
137137
q["start"] = start
138138
q["end"] = now
139-
q["requestType"] = "time_series"
140139

141140
payload, err := json.Marshal(q)
142141
if err != nil {
@@ -151,7 +150,7 @@ func (p *SignozProvider) RunQuery(query string) (float64, error) {
151150
u.Path = path.Join(p.url.Path, u.Path)
152151
u = p.url.ResolveReference(u)
153152

154-
req, err := http.NewRequest("POST", u.String(), io.NopCloser(strings.NewReader(string(payload))))
153+
req, err := http.NewRequest("POST", u.String(), bytes.NewReader(payload))
155154
if err != nil {
156155
return 0, fmt.Errorf("http.NewRequest failed: %w", err)
157156
}

pkg/metrics/providers/signoz_test.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)