aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-07-15 09:25:31 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-07-15 16:04:04 +0200
commit4ad7e28c82c4f736c1066bb2dda270fc053478c1 (patch)
treef8cdc2be88788891d2b5215b1690c15420da4ae3
parent7444fb485bce374cbba8280de84f0c0a18cb39d0 (diff)
dashapi: add query mocking functionality
At the moment it's only possible to do by emulating http requests, which looks like an overkill for simple query mocking in unit tests.
-rw-r--r--dashboard/dashapi/dashapi.go27
1 files changed, 21 insertions, 6 deletions
diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go
index bcd964852..028448b33 100644
--- a/dashboard/dashapi/dashapi.go
+++ b/dashboard/dashapi/dashapi.go
@@ -23,12 +23,17 @@ import (
)
type Dashboard struct {
- Client string
- Addr string
- Key string
- ctor RequestCtor
- doer RequestDoer
- logger RequestLogger
+ Client string
+ Addr string
+ Key string
+ ctor RequestCtor
+ doer RequestDoer
+ logger RequestLogger
+ // Yes, we have the ability to set custom constructor, doer and logger, but
+ // there are also cases when we just want to mock the whole request processing.
+ // Implementing that on top of http.Request/http.Response would complicate the
+ // code too much.
+ mocker RequestMocker
errorHandler func(error)
}
@@ -36,10 +41,17 @@ func New(client, addr, key string) (*Dashboard, error) {
return NewCustom(client, addr, key, http.NewRequest, http.DefaultClient.Do, nil, nil)
}
+func NewMock(mocker RequestMocker) *Dashboard {
+ return &Dashboard{
+ mocker: mocker,
+ }
+}
+
type (
RequestCtor func(method, url string, body io.Reader) (*http.Request, error)
RequestDoer func(req *http.Request) (*http.Response, error)
RequestLogger func(msg string, args ...interface{})
+ RequestMocker func(method string, req, resp interface{}) error
)
// key == "" indicates that the ambient GCE service account authority
@@ -592,6 +604,9 @@ func (dash *Dashboard) Query(method string, req, reply interface{}) error {
if dash.logger != nil {
dash.logger("API(%v): %#v", method, req)
}
+ if dash.mocker != nil {
+ return dash.mocker(method, req, reply)
+ }
err := dash.queryImpl(method, req, reply)
if err != nil {
if dash.logger != nil {