Skip to content

Commit

Permalink
Service keys (#106)
Browse files Browse the repository at this point in the history
* Payload for test service keys

* Service keys

* Corrected indentation

* Payload for additional service key tests

* Additonal test cases for service keys
  • Loading branch information
ank19 authored and lnguyen committed May 17, 2017
1 parent 0fd8c4b commit 67a15bd
Show file tree
Hide file tree
Showing 3 changed files with 265 additions and 0 deletions.
97 changes: 97 additions & 0 deletions payloads_test.go
Expand Up @@ -2372,3 +2372,100 @@ const addOrgToIsolationSegmentPayload = `{
}
}
}`

const listServiceKeysPayload = `{
"total_results": 2,
"total_pages": 1,
"prev_url": null,
"next_url": null,
"resources": [
{
"metadata": {
"guid": "3b933598-64ed-4613-a0f5-b7e8c0379368",
"url": "/v2/service_keys/3b933598-64ed-4613-a0f5-b7e8c0379368",
"created_at": "2016-08-01T15:17:35Z",
"updated_at": "2016-08-01T15:17:35Z"
},
"entity": {
"name": "RedisMonitoringKey",
"service_instance_guid": "ad98f310-a3a0-47aa-9116-f8295d41a9b2",
"credentials": {
"host": "10.10.10.10",
"password": "some-password",
"port": 12345
},
"service_instance_url": "/v2/service_instances/ad98f310-a3a0-47aa-9116-f8295d41a9b2"
}
},
{
"metadata": {
"guid": "8be3911b-c621-4467-8866-f8b924aaee57",
"url": "/v2/service_keys/8be3911b-c621-4467-8866-f8b924aaee57",
"created_at": "2017-05-16T12:14:46Z",
"updated_at": "2017-05-16T12:14:46Z"
},
"entity": {
"name": "test01_key",
"service_instance_guid": "ecf26687-e176-4784-b181-b3c942fecb62",
"credentials": {
"jms": "nhp://100.100.100.100:9008",
"js_uri": "http://100.100.100.100:9008",
"amqp": "amqp://100.100.100.100:9008",
"nhp": "nhp://100.100.100.100:9009",
"mqtt": "tcp://100.100.100.100:9008",
"name": "fcf26687-e176-4784-b181-b3c942fecb62",
"nsp": "nsp://100.100.100.100:9008",
"userid": "cfu-9be3911b-c621-4467-8866-f8b924aaee57",
"uri": "nhp://100.100.100.100:9008",
"uriInfos": [
{
"host": "100.100.100.100",
"port": 9008
}
]
},
"service_instance_url": "/v2/service_instances/fcf26687-e176-4784-b181-b3c942fecb62"
}
}
]
}`

const getServiceKeyPayload = `{
"total_results": 1,
"total_pages": 1,
"prev_url": null,
"next_url": null,
"resources": [
{
"metadata": {
"guid": "8be3911b-c621-4467-8866-f8b924aaee57",
"url": "/v2/service_keys/8be3911b-c621-4467-8866-f8b924aaee57",
"created_at": "2017-05-16T12:14:46Z",
"updated_at": "2017-05-16T12:14:46Z"
},
"entity": {
"name": "test01_key",
"service_instance_guid": "ecf26687-e176-4784-b181-b3c942fecb62",
"credentials": {
"jms": "nhp://100.100.100.100:9008",
"js_uri": "http://100.100.100.100:9008",
"amqp": "amqp://100.100.100.100:9008",
"nhp": "nhp://100.100.100.100:9009",
"mqtt": "tcp://100.100.100.100:9008",
"name": "fcf26687-e176-4784-b181-b3c942fecb62",
"nsp": "nsp://100.100.100.100:9008",
"userid": "cfu-9be3911b-c621-4467-8866-f8b924aaee57",
"uri": "nhp://100.100.100.100:9008",
"uriInfos": [
{
"host": "100.100.100.100",
"port": 9008
}
]
},
"service_instance_url": "/v2/service_instances/fcf26687-e176-4784-b181-b3c942fecb62"
}
}
]
}`

87 changes: 87 additions & 0 deletions service_keys.go
@@ -0,0 +1,87 @@
package cfclient

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/url"

"github.com/pkg/errors"
)

type ServiceKeysResponse struct {
Count int `json:"total_results"`
Pages int `json:"total_pages"`
Resources []ServiceKeyResource `json:"resources"`
}

type ServiceKeyResource struct {
Meta Meta `json:"metadata"`
Entity ServiceKey `json:"entity"`
}

type ServiceKey struct {
Name string `json:"name"`
Guid string `json:"guid"`
ServiceInstanceGuid string `json:"service_instance_guid"`
Credentials interface{} `json:"credentials"`
ServiceInstanceUrl string `json:"service_instance_url"`
c *Client
}

func (c *Client) ListServiceKeysByQuery(query url.Values) ([]ServiceKey, error) {
var serviceKeys []ServiceKey
var serviceKeysResp ServiceKeysResponse
r := c.NewRequest("GET", "/v2/service_keys?"+query.Encode())
resp, err := c.DoRequest(r)
if err != nil {
return nil, errors.Wrap(err, "Error requesting service keys")
}
resBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, errors.Wrap(err, "Error reading service keys request:")
}

err = json.Unmarshal(resBody, &serviceKeysResp)
if err != nil {
return nil, errors.Wrap(err, "Error unmarshaling service keys")
}
for _, serviceKey := range serviceKeysResp.Resources {
serviceKey.Entity.Guid = serviceKey.Meta.Guid
serviceKey.Entity.c = c
serviceKeys = append(serviceKeys, serviceKey.Entity)
}
return serviceKeys, nil
}

func (c *Client) ListServiceKeys() ([]ServiceKey, error) {
return c.ListServiceKeysByQuery(nil)
}

func (c *Client) GetServiceKeyByName(name string) (ServiceKey, error) {
var serviceKey ServiceKey
q := url.Values{}
q.Set("q", "name:"+name)
serviceKeys, err := c.ListServiceKeysByQuery(q)
if err != nil {
return serviceKey, err
}
if len(serviceKeys) == 0 {
return serviceKey, fmt.Errorf("Unable to find service key %s", name)
}
return serviceKeys[0], nil
}

func (c *Client) GetServiceKeyByInstanceGuid(guid string) (ServiceKey, error) {
var serviceKey ServiceKey
q := url.Values{}
q.Set("q", "service_instance_guid:"+guid)
serviceKeys, err := c.ListServiceKeysByQuery(q)
if err != nil {
return serviceKey, err
}
if len(serviceKeys) == 0 {
return serviceKey, fmt.Errorf("Unable to find service key for guid %s", guid)
}
return serviceKeys[0], nil
}
81 changes: 81 additions & 0 deletions service_keys_test.go
@@ -0,0 +1,81 @@
package cfclient

import (
"testing"

. "github.com/smartystreets/goconvey/convey"
)

func TestListServiceKeys(t *testing.T) {
Convey("List Service Keys", t, func() {
setup(MockRoute{"GET", "/v2/service_keys", listServiceKeysPayload, "", 200, "", nil}, t)
defer teardown()
c := &Config{
ApiAddress: server.URL,
Token: "foobar",
}
client, err := NewClient(c)
So(err, ShouldBeNil)

serviceKeys, err := client.ListServiceKeys()
So(err, ShouldBeNil)

So(len(serviceKeys), ShouldEqual, 2)
So(serviceKeys[0].Guid, ShouldEqual, "3b933598-64ed-4613-a0f5-b7e8c0379368")
So(serviceKeys[0].Name, ShouldEqual, "RedisMonitoringKey")
So(serviceKeys[0].ServiceInstanceGuid, ShouldEqual, "ad98f310-a3a0-47aa-9116-f8295d41a9b2")
So(serviceKeys[0].Credentials, ShouldNotEqual, nil)
So(serviceKeys[0].ServiceInstanceUrl, ShouldEqual, "/v2/service_instances/ad98f310-a3a0-47aa-9116-f8295d41a9b2")
So(serviceKeys[1].Guid, ShouldEqual, "8be3911b-c621-4467-8866-f8b924aaee57")
So(serviceKeys[1].Name, ShouldEqual, "test01_key")
So(serviceKeys[1].ServiceInstanceGuid, ShouldEqual, "ecf26687-e176-4784-b181-b3c942fecb62")
So(serviceKeys[1].Credentials, ShouldNotEqual, nil)
m := serviceKeys[1].Credentials.(map[string]interface{})
So(m["uri"], ShouldEqual, "nhp://100.100.100.100:9008")
So(serviceKeys[1].ServiceInstanceUrl, ShouldEqual, "/v2/service_instances/fcf26687-e176-4784-b181-b3c942fecb62")
})
}

func TestGetServiceKeyByName(t *testing.T) {
Convey("Get service key by name", t, func() {
setup(MockRoute{"GET", "/v2/service_keys", getServiceKeyPayload, "", 200, "q=name:test01_key", nil}, t)
defer teardown()
c := &Config{
ApiAddress: server.URL,
Token: "foobar",
}
client, err := NewClient(c)
So(err, ShouldBeNil)

serviceKey, err := client.GetServiceKeyByName("test01_key")
So(err, ShouldBeNil)

So(serviceKey, ShouldNotBeNil)
So(serviceKey.Name, ShouldEqual, "test01_key")
So(serviceKey.ServiceInstanceGuid, ShouldEqual, "ecf26687-e176-4784-b181-b3c942fecb62")
So(serviceKey.Credentials, ShouldNotEqual, nil)
So(serviceKey.ServiceInstanceUrl, ShouldEqual, "/v2/service_instances/fcf26687-e176-4784-b181-b3c942fecb62")
})
}

func TestGetServiceKeyByGuid(t *testing.T) {
Convey("Get service key by guid", t, func() {
setup(MockRoute{"GET", "/v2/service_keys", getServiceKeyPayload, "", 200, "q=service_instance_guid:ecf26687-e176-4784-b181-b3c942fecb62", nil}, t)
defer teardown()
c := &Config{
ApiAddress: server.URL,
Token: "foobar",
}
client, err := NewClient(c)
So(err, ShouldBeNil)

serviceKey, err := client.GetServiceKeyByInstanceGuid("ecf26687-e176-4784-b181-b3c942fecb62")
So(err, ShouldBeNil)

So(serviceKey, ShouldNotBeNil)
So(serviceKey.Name, ShouldEqual, "test01_key")
So(serviceKey.ServiceInstanceGuid, ShouldEqual, "ecf26687-e176-4784-b181-b3c942fecb62")
So(serviceKey.Credentials, ShouldNotEqual, nil)
So(serviceKey.ServiceInstanceUrl, ShouldEqual, "/v2/service_instances/fcf26687-e176-4784-b181-b3c942fecb62")
})
}

0 comments on commit 67a15bd

Please sign in to comment.