aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-02-20 12:12:07 +0000
committerArne Juul <arnej@yahooinc.com>2023-02-20 12:12:07 +0000
commit6d983f7cf92838ace741485f1714cbd8c38709eb (patch)
tree500f01c860697e19b193f4fb05b7ef1e0361fbcc /client
parentbec5e7ca0bcda7121554e5311b1932df90a8df00 (diff)
add some unit testing
Diffstat (limited to 'client')
-rw-r--r--client/go/internal/cli/cmd/visit_test.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/client/go/internal/cli/cmd/visit_test.go b/client/go/internal/cli/cmd/visit_test.go
index 9f4fbb66e00..0941fa858b2 100644
--- a/client/go/internal/cli/cmd/visit_test.go
+++ b/client/go/internal/cli/cmd/visit_test.go
@@ -3,9 +3,24 @@ package cmd
import (
"fmt"
+ "net/http"
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/vespa-engine/vespa/client/go/internal/mock"
+ "github.com/vespa-engine/vespa/client/go/internal/vespa"
+)
+
+const (
+ normalpre = `{"pathId":"/document/v1/","documents":[`
+ document1 = `{"id":"id:t:m::1","fields":{"title":"t"}}`
+ document2 = `{"id":"id:t:m::2","fields":{"title":"t2"}}`
+ document3 = `{"id":"id:t:m::3","fields":{"ar":"xyz","w":63,"title":"xyzzy","year":2000}}`
+
+ savedresponse = `{"pathId":"/document/v1/","documents":[{"id":"id:test:music::1921492307","fields":{"title":"song","year":2010}},{"id":"id:test:music::p_try-this-clean-bonus-dvd-_music_1922003403","fields":{"artist":"xyz","weight":600000,"song":"hate","title":"xyz","year":2000}}],"documentCount":2,"continuation":"AAAACAAAAAAAAAAJAAAAAAAAAAgAAAAAAAABAAAAAAEgAAAAAAAAEAAAAAAAAAAA"}`
+
+ saveddoc0 = `{"id":"id:test:music::1921492307","fields":{"title":"song","year":2010}}`
+ saveddoc1 = `{"id":"id:test:music::p_try-this-clean-bonus-dvd-_music_1922003403","fields":{"artist":"xyz","weight":600000,"song":"hate","title":"xyz","year":2000}}`
)
func TestQuoteFunc(t *testing.T) {
@@ -23,3 +38,89 @@ func TestQuoteFunc(t *testing.T) {
}
}
}
+
+// low-level (unit) test
+func TestRunOneVisit(t *testing.T) {
+ withResponse := func(client *mock.HTTPClient) {
+ client.NextResponseString(200, savedresponse)
+ }
+ op := func(service *vespa.Service) {
+ vArgs := visitArgs{
+ contentCluster: "fooCC",
+ }
+ vvo, res := runOneVisit(&vArgs, service, "BBBB")
+ assert.Equal(t, true, res.Success)
+ assert.Equal(t, "visited fooCC", res.Message)
+ assert.Equal(t, "/document/v1/", vvo.PathId)
+ assert.Equal(t, "", vvo.ErrorMsg)
+ assert.Equal(t, "AAAACAAAAAAAAAAJAAAAAAAAAAgAAAAAAAABAAAAAAEgAAAAAAAAEAAAAAAAAAAA", vvo.Continuation)
+ assert.Equal(t, 2, vvo.DocumentCount)
+ assert.Equal(t, 2, len(vvo.Documents))
+ assert.Equal(t, saveddoc0, string(vvo.Documents[0].blob))
+ assert.Equal(t, saveddoc1, string(vvo.Documents[1].blob))
+ }
+ req := withMockClient(t, withResponse, op)
+ assert.Equal(t, "cluster=fooCC&continuation=BBBB", req.URL.RawQuery)
+}
+
+func withMockClient(t *testing.T, prepCli func(*mock.HTTPClient), runOp func(*vespa.Service)) *http.Request {
+ client := &mock.HTTPClient{}
+ prepCli(client)
+ cli, _, _ := newTestCLI(t)
+ cli.httpClient = client
+ service, _ := documentService(cli)
+ runOp(service)
+ return client.LastRequest
+}
+
+func TestVisitCommand(t *testing.T) {
+ assertVisitResults(
+ []string{
+ "visit",
+ "--json-lines",
+ },
+ t,
+ []string{
+ normalpre +
+ document1 +
+ `],"documentCount":1,"continuation":"CAFE"}`,
+ normalpre +
+ document2 +
+ "," +
+ document3 +
+ `],"documentCount":2}`,
+ },
+ "cluster=fooCC&continuation=CAFE&wantedDocumentCount=1000",
+ document1+"\n"+
+ document2+"\n"+
+ document3+"\n")
+}
+
+func assertVisitResults(arguments []string, t *testing.T, responses []string, queryPart, output string) {
+ client := &mock.HTTPClient{}
+ client.NextResponseString(200, `{
+ "handlers" : [ {
+ "id" : "com.yahoo.container.usability.BindingsOverviewHandler",
+ "class" : "com.yahoo.container.usability.BindingsOverviewHandler",
+ "bundle" : "container-disc:8.0.0",
+ "serverBindings" : [ "http://*/" ]
+ }, {
+ "id" : "com.yahoo.document.restapi.resource.DocumentV1ApiHandler",
+ "class" : "com.yahoo.document.restapi.resource.DocumentV1ApiHandler",
+ "bundle" : "vespaclient-container-plugin:8.0.0",
+ "serverBindings" : [ "http://*/document/v1/*", "http://*/document/v1/*/" ]
+ }, {
+ } ] }`)
+ client.NextResponseString(400, `{"pathId":"/document/v1/","message":"Your Vespa deployment has no content cluster '*', only 'fooCC'"}`)
+ for _, resp := range responses {
+ client.NextResponseString(200, resp)
+ }
+ cli, stdout, stderr := newTestCLI(t)
+ cli.httpClient = client
+ assert.Nil(t, cli.Run(arguments...))
+ assert.Equal(t, output, stdout.String())
+ assert.Equal(t, "", stderr.String())
+ assert.Equal(t, queryPart, client.LastRequest.URL.RawQuery)
+ assert.Equal(t, "/document/v1/", client.LastRequest.URL.Path)
+ assert.Equal(t, "GET", client.LastRequest.Method)
+}