diff --git a/acceptance/fixtures/var/lib/jerakia/data/common/keyless.yaml b/acceptance/fixtures/var/lib/jerakia/data/common/keyless.yaml new file mode 100644 index 0000000..ffe744d --- /dev/null +++ b/acceptance/fixtures/var/lib/jerakia/data/common/keyless.yaml @@ -0,0 +1,2 @@ +foo: bar +hello: world \ No newline at end of file diff --git a/acceptance/lookup_test.go b/acceptance/lookup_test.go index feffe8c..76c7b2e 100644 --- a/acceptance/lookup_test.go +++ b/acceptance/lookup_test.go @@ -81,3 +81,26 @@ func TestLookupMetadata(t *testing.T) { expected := fixtures.LookupMetadataResult assert.Equal(t, expected, *actual) } + +func TestLookupKeyless(t *testing.T) { + if v := os.Getenv("JERAKIA_ACC"); v == "" { + t.Skip("JERAKIA_ACC not set") + } + + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + + lookupOpts := &jerakia.LookupOpts{ + Namespace: "keyless", + } + + actual, err := jerakia.Lookup(client, "", lookupOpts) + if err != nil { + t.Fatal(err) + } + + expected := fixtures.LookupKeylessResult + assert.Equal(t, expected, *actual) +} diff --git a/lookup.go b/lookup.go index 1d04623..8cf0377 100644 --- a/lookup.go +++ b/lookup.go @@ -91,7 +91,11 @@ type LookupResult struct { // Lookup performs a lookup. func Lookup(client *Client, key string, opts *LookupOpts) (*LookupResult, error) { var r LookupResult - url := client.config.URL + "/" + LookupURL + "/" + key + url := client.config.URL + "/" + LookupURL + + if key != "" { + url += ("/" + key) + } if opts != nil { query, err := opts.ToLookupQuery() diff --git a/testing/lookup_fixtures.go b/testing/lookup_fixtures.go index 8e2b381..014760c 100644 --- a/testing/lookup_fixtures.go +++ b/testing/lookup_fixtures.go @@ -110,3 +110,40 @@ func HandleLookupMetadata(t *testing.T) { fmt.Fprintf(w, LookupMetadataResponse) }) } + +// LookupKeylessResponse is the expected response of a keyless lookup. +const LookupKeylessResponse = ` +{ + "found": true, + "payload": { + "foo": "bar", + "hello": "world" + }, + "status": "ok" +} +` + +// LookupKeylessResult is the expected result of a keyless lookup. +var LookupKeylessResult = jerakia.LookupResult{ + Status: "ok", + Found: true, + Payload: map[string]interface{}{ + "foo": "bar", + "hello": "world", + }, +} + +// HandleLookupKeyless tests a keyless lookup. +func HandleLookupKeyless(t *testing.T) { + th.Mux.HandleFunc("/lookup", func(w http.ResponseWriter, r *http.Request) { + + assert.Equal(t, "GET", r.Method) + assert.Equal(t, fake.Token, r.Header.Get("X-Authentication")) + assert.Equal(t, []string{"keyless"}, r.URL.Query()["namespace"]) + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, LookupKeylessResponse) + }) +} + diff --git a/testing/lookup_requests_test.go b/testing/lookup_requests_test.go index a7769b3..66b0439 100644 --- a/testing/lookup_requests_test.go +++ b/testing/lookup_requests_test.go @@ -66,3 +66,21 @@ func TestLookupMetadata(t *testing.T) { expected := LookupMetadataResult assert.Equal(t, expected, *actual) } + +func TestLookupKeyless(t *testing.T) { + th.SetupHTTP() + defer th.TeardownHTTP() + HandleLookupKeyless(t) + + lookupOpts := &jerakia.LookupOpts{ + Namespace: "keyless", + } + + actual, err := jerakia.Lookup(fake.FakeClient(), "", lookupOpts) + if err != nil { + t.Fatal(err) + } + + expected := LookupKeylessResult + assert.Equal(t, expected, *actual) +}