http-add-on/pkg/queue/queue_rpc_test.go

79 lines
2.0 KiB
Go

package queue
import (
"context"
"encoding/json"
"errors"
"testing"
"github.com/go-logr/logr"
pkghttp "github.com/kedacore/http-add-on/pkg/http"
kedanet "github.com/kedacore/http-add-on/pkg/net"
"github.com/stretchr/testify/require"
)
func TestQueueSizeHandlerSuccess(t *testing.T) {
lggr := logr.Discard()
r := require.New(t)
reader := &FakeCountReader{
current: 123,
err: nil,
}
handler := newSizeHandler(lggr, reader)
req, rec := pkghttp.NewTestCtx("GET", "/queue")
handler.ServeHTTP(rec, req)
r.Equal(200, rec.Code, "response code")
respMap := map[string]int{}
decodeErr := json.NewDecoder(rec.Body).Decode(&respMap)
r.NoError(decodeErr)
r.Equalf(1, len(respMap), "response JSON length was not 1")
sizeVal, ok := respMap["sample.com"]
r.Truef(ok, "'sample.com' entry not available in return JSON")
r.Equalf(reader.current, sizeVal, "returned JSON queue size was wrong")
reader.err = errors.New("test error")
req, rec = pkghttp.NewTestCtx("GET", "/queue")
handler.ServeHTTP(rec, req)
r.Equal(500, rec.Code, "response code was not expected")
}
func TestQueueSizeHandlerFail(t *testing.T) {
lggr := logr.Discard()
r := require.New(t)
reader := &FakeCountReader{
current: 0,
err: errors.New("test error"),
}
handler := newSizeHandler(lggr, reader)
req, rec := pkghttp.NewTestCtx("GET", "/queue")
handler.ServeHTTP(rec, req)
r.Equal(500, rec.Code, "response code")
}
func TestQueueSizeHandlerIntegration(t *testing.T) {
ctx := context.Background()
lggr := logr.Discard()
r := require.New(t)
reader := &FakeCountReader{
current: 50,
err: nil,
}
hdl := kedanet.NewTestHTTPHandlerWrapper(newSizeHandler(lggr, reader))
srv, url, err := kedanet.StartTestServer(hdl)
r.NoError(err)
defer srv.Close()
httpCl := srv.Client()
counts, err := GetCounts(ctx, lggr, httpCl, *url)
r.NoError(err)
r.Equal(1, len(counts.Counts))
for _, val := range counts.Counts {
r.Equal(reader.current, val)
}
reqs := hdl.IncomingRequests()
r.Equal(1, len(reqs))
}