You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2016/11/04 14:30:46 UTC

[3/6] incubator-trafficcontrol git commit: add client methods for fetching SSL keys

add client methods for fetching SSL keys

This adds two methods for fetching SSL keys via
the `traffic_ops` delivery service client:

- `DeliveryServiceSSLKeysByID`
- `DeliveryServiceSSLKeysByHostname`


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/a731bbfd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/a731bbfd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/a731bbfd

Branch: refs/heads/master
Commit: a731bbfd29b290b2b597a231b3643ae15226d718
Parents: fe5b573
Author: Mike Ball <mi...@gmail.com>
Authored: Sun Oct 30 08:20:53 2016 -0400
Committer: Dave Neuman <ne...@apache.org>
Committed: Fri Nov 4 08:29:54 2016 -0600

----------------------------------------------------------------------
 traffic_ops/client/delivery_service.go          |  46 ++++++++
 .../client/delivery_service_endpoints.go        |   8 ++
 .../client/delivery_service_endpoints_test.go   |  24 +++++
 traffic_ops/client/fixtures/delivery_service.go |  24 +++++
 .../client/tests/delivery_service_test.go       | 106 +++++++++++++++++++
 5 files changed, 208 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a731bbfd/traffic_ops/client/delivery_service.go
----------------------------------------------------------------------
diff --git a/traffic_ops/client/delivery_service.go b/traffic_ops/client/delivery_service.go
index 7e716c3..8afb0ff 100644
--- a/traffic_ops/client/delivery_service.go
+++ b/traffic_ops/client/delivery_service.go
@@ -160,6 +160,30 @@ type DeliveryServiceServer struct {
 	DeliveryService string `json:"deliveryService"`
 }
 
+// DeliveryServiceSSLKeysResponse ...
+type DeliveryServiceSSLKeysResponse struct {
+	Response DeliveryServiceSSLKeys `json:"response"`
+}
+
+// DeliveryServiceSSLKeys ...
+type DeliveryServiceSSLKeys struct {
+	BusinessUnit string                            `json:"businessUnit"`
+	City         string                            `json:"city"`
+	Organization string                            `json:"organization"`
+	Hostname     string                            `json:"hostname"`
+	Country      string                            `json:"country"`
+	State        string                            `json:"state"`
+	Version      string                            `json:"version"`
+	Certificate  DeliveryServiceSSLKeysCertificate `json:"certificate"`
+}
+
+// DeliveryServiceSSLKeysCertificate ...
+type DeliveryServiceSSLKeysCertificate struct {
+	Crt string `json:"crt"`
+	Key string `json:"key"`
+	CSR string `json:"csr"`
+}
+
 // DeliveryServices gets an array of DeliveryServices
 func (to *Session) DeliveryServices() ([]DeliveryService, error) {
 	var data DeliveryServiceResponse
@@ -237,6 +261,28 @@ func (to *Session) DeliveryServiceServer(page, limit string) ([]DeliveryServiceS
 	return data.Response, nil
 }
 
+// DeliveryServiceSSLKeysByID gets the DeliveryServiceSSLKeys by ID
+func (to *Session) DeliveryServiceSSLKeysByID(id string) (*DeliveryServiceSSLKeys, error) {
+	var data DeliveryServiceSSLKeysResponse
+	err := get(to, deliveryServiceSSLKeysByIDEp(id), &data)
+	if err != nil {
+		return nil, err
+	}
+
+	return &data.Response, nil
+}
+
+// DeliveryServiceSSLKeysByHostname gets the DeliveryServiceSSLKeys by Hostname
+func (to *Session) DeliveryServiceSSLKeysByHostname(hostname string) (*DeliveryServiceSSLKeys, error) {
+	var data DeliveryServiceSSLKeysResponse
+	err := get(to, deliveryServiceSSLKeysByHostnameEp(hostname), &data)
+	if err != nil {
+		return nil, err
+	}
+
+	return &data.Response, nil
+}
+
 func get(to *Session, endpoint string, respStruct interface{}) error {
 	resp, err := to.request(endpoint, nil)
 	if err != nil {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a731bbfd/traffic_ops/client/delivery_service_endpoints.go
----------------------------------------------------------------------
diff --git a/traffic_ops/client/delivery_service_endpoints.go b/traffic_ops/client/delivery_service_endpoints.go
index 862a727..d07171f 100644
--- a/traffic_ops/client/delivery_service_endpoints.go
+++ b/traffic_ops/client/delivery_service_endpoints.go
@@ -49,3 +49,11 @@ func deliveryServiceRoutingEp(id string) string {
 func deliveryServiceServerEp(page, limit string) string {
 	return apiBase + "/deliveryserviceserver.json?page=" + page + "&limit=" + limit
 }
+
+func deliveryServiceSSLKeysByIDEp(id string) string {
+	return apiBase + dsPath + "/xmlId/" + id + "/sslkeys.json"
+}
+
+func deliveryServiceSSLKeysByHostnameEp(hostname string) string {
+	return apiBase + dsPath + "/hostname/" + hostname + "/sslkeys.json"
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a731bbfd/traffic_ops/client/delivery_service_endpoints_test.go
----------------------------------------------------------------------
diff --git a/traffic_ops/client/delivery_service_endpoints_test.go b/traffic_ops/client/delivery_service_endpoints_test.go
index 93163af..f698b72 100644
--- a/traffic_ops/client/delivery_service_endpoints_test.go
+++ b/traffic_ops/client/delivery_service_endpoints_test.go
@@ -104,3 +104,27 @@ func TestDeliveryServiceServerEp(t *testing.T) {
 		testHelper.Success(t, "Should be able to get the correct delivery service server endpoint")
 	}
 }
+
+func TestDeliveryServiceSSLKeysByIDEp(t *testing.T) {
+	testHelper.Context(t, "Given the need to test that DeliveryServiceSSLKeysByID uses the correct URL")
+
+	ep := deliveryServiceSSLKeysByIDEp("123")
+	expected := "/api/1.2/deliveryservices/xmlId/123/sslkeys.json"
+	if ep != expected {
+		testHelper.Error(t, "Should get back %s for \"deliveryServiceSSLKeysByIDEp\", got: %s", expected, ep)
+	} else {
+		testHelper.Success(t, "Should be able to get the correct delivery service SSL Keys by ID endpoint")
+	}
+}
+
+func TestDeliveryServiceSSLKeysByHostnameEp(t *testing.T) {
+	testHelper.Context(t, "Given the need to test that DeliveryServiceSSLKeysByHostname uses the correct URL")
+
+	ep := deliveryServiceSSLKeysByHostnameEp("some-host")
+	expected := "/api/1.2/deliveryservices/hostname/some-host/sslkeys.json"
+	if ep != expected {
+		testHelper.Error(t, "Should get back %s for \"deliveryServiceSSLKeysByHostnameEp\", got: %s", expected, ep)
+	} else {
+		testHelper.Success(t, "Should be able to get the correct delivery service SSL Keys by hostname endpoint")
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a731bbfd/traffic_ops/client/fixtures/delivery_service.go
----------------------------------------------------------------------
diff --git a/traffic_ops/client/fixtures/delivery_service.go b/traffic_ops/client/fixtures/delivery_service.go
index 98580d0..43f6f8c 100644
--- a/traffic_ops/client/fixtures/delivery_service.go
+++ b/traffic_ops/client/fixtures/delivery_service.go
@@ -142,3 +142,27 @@ func DeliveryServiceServer() *client.DeliveryServiceServerResponse {
 		Limit:    1,
 	}
 }
+
+// DeliveryServiceSSLKeys returns a default DeliveryServiceSSLKeysResponse to be used for testing.
+func DeliveryServiceSSLKeys() *client.DeliveryServiceSSLKeysResponse {
+	crt := client.DeliveryServiceSSLKeysCertificate{
+		Crt: "crt",
+		Key: "key",
+		CSR: "someService",
+	}
+
+	sslKeys := client.DeliveryServiceSSLKeys{
+		Certificate:  crt,
+		BusinessUnit: "businessUnit",
+		City:         "city",
+		Organization: "Kabletown",
+		Hostname:     "hostname",
+		Country:      "country",
+		State:        "state",
+		Version:      "version",
+	}
+
+	return &client.DeliveryServiceSSLKeysResponse{
+		Response: sslKeys,
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a731bbfd/traffic_ops/client/tests/delivery_service_test.go
----------------------------------------------------------------------
diff --git a/traffic_ops/client/tests/delivery_service_test.go b/traffic_ops/client/tests/delivery_service_test.go
index 03273fe..e5eefef 100644
--- a/traffic_ops/client/tests/delivery_service_test.go
+++ b/traffic_ops/client/tests/delivery_service_test.go
@@ -414,3 +414,109 @@ func TestDeliveryServiceServerUnauthorized(t *testing.T) {
 		testHelper.Success(t, "Should not be able to make a request to Traffic Ops")
 	}
 }
+
+func TestDeliveryServiceSSLKeysByID(t *testing.T) {
+	resp := fixtures.DeliveryServiceSSLKeys()
+	server := testHelper.ValidHTTPServer(resp)
+	defer server.Close()
+
+	var httpClient http.Client
+	to := client.Session{
+		URL:       server.URL,
+		UserAgent: &httpClient,
+	}
+
+	testHelper.Context(t, "Given the need to test a successful Traffic Ops request for a DeliveryServiceSSLKeysByID")
+
+	ssl, err := to.DeliveryServiceSSLKeysByID("123")
+	if err != nil {
+		testHelper.Error(t, "Should be able to make a request to Traffic Ops")
+	} else {
+		testHelper.Success(t, "Should be able to make a request to Traffic Ops")
+	}
+
+	if ssl.Certificate.Crt != "crt" {
+		testHelper.Error(t, "Should get back \"crt\" for \"Certificte.Crt\", got: %s", ssl.Certificate.Crt)
+	} else {
+		testHelper.Success(t, "Should get back \"crt\" for \"Certificate.Crt\"")
+	}
+
+	if ssl.Organization != "Kabletown" {
+		testHelper.Error(t, "Should get back \"Kabletown\" for \"Organization\", got: %s", ssl.Organization)
+	} else {
+		testHelper.Success(t, "Should get back \"Kabletown\" for \"Organization\"")
+	}
+}
+
+func TestDeliveryServiceSSLKeysByIDUnauthorized(t *testing.T) {
+	server := testHelper.InvalidHTTPServer(http.StatusUnauthorized)
+	defer server.Close()
+
+	var httpClient http.Client
+	to := client.Session{
+		URL:       server.URL,
+		UserAgent: &httpClient,
+	}
+
+	testHelper.Context(t, "Given the need to test a failed Traffic Ops request for a DeliveryServiceSSLKeysByID")
+
+	_, err := to.DeliveryServiceSSLKeysByID("123")
+	if err == nil {
+		testHelper.Error(t, "Should not be able to make a request to Traffic Ops")
+	} else {
+		testHelper.Success(t, "Should not be able to make a request to Traffic Ops")
+	}
+}
+
+func TestDeliveryServiceSSLKeysByHostname(t *testing.T) {
+	resp := fixtures.DeliveryServiceSSLKeys()
+	server := testHelper.ValidHTTPServer(resp)
+	defer server.Close()
+
+	var httpClient http.Client
+	to := client.Session{
+		URL:       server.URL,
+		UserAgent: &httpClient,
+	}
+
+	testHelper.Context(t, "Given the need to test a successful Traffic Ops request for a DeliveryServiceSSLKeysByHostname")
+
+	ssl, err := to.DeliveryServiceSSLKeysByHostname("hostname")
+	if err != nil {
+		testHelper.Error(t, "Should be able to make a request to Traffic Ops")
+	} else {
+		testHelper.Success(t, "Should be able to make a request to Traffic Ops")
+	}
+
+	if ssl.Certificate.Crt != "crt" {
+		testHelper.Error(t, "Should get back \"crt\" for \"Certificte.Crt\", got: %s", ssl.Certificate.Crt)
+	} else {
+		testHelper.Success(t, "Should get back \"crt\" for \"Certificate.Crt\"")
+	}
+
+	if ssl.Organization != "Kabletown" {
+		testHelper.Error(t, "Should get back \"Kabletown\" for \"Organization\", got: %s", ssl.Organization)
+	} else {
+		testHelper.Success(t, "Should get back \"Kabletown\" for \"Organization\"")
+	}
+}
+
+func TestDeliveryServiceSSLKeysByHostnameUnauthorized(t *testing.T) {
+	server := testHelper.InvalidHTTPServer(http.StatusUnauthorized)
+	defer server.Close()
+
+	var httpClient http.Client
+	to := client.Session{
+		URL:       server.URL,
+		UserAgent: &httpClient,
+	}
+
+	testHelper.Context(t, "Given the need to test a failed Traffic Ops request for a DeliveryServiceSSLKeysByHostname")
+
+	_, err := to.DeliveryServiceSSLKeysByHostname("hostname")
+	if err == nil {
+		testHelper.Error(t, "Should not be able to make a request to Traffic Ops")
+	} else {
+		testHelper.Success(t, "Should not be able to make a request to Traffic Ops")
+	}
+}