gogreen/certificates_test.go

254 lines
6.7 KiB
Go

package godo
import (
"encoding/json"
"fmt"
"net/http"
"path"
"testing"
"github.com/stretchr/testify/assert"
)
var certJSONResponse = `
{
"certificate": {
"id": "892071a0-bb95-49bc-8021-3afd67a210bf",
"name": "web-cert-01",
"dns_names": [
"somedomain.com",
"api.somedomain.com"
],
"not_after": "2017-02-22T00:23:00Z",
"sha1_fingerprint": "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
"created_at": "2017-02-08T16:02:37Z",
"state": "verified",
"type": "custom"
}
}
`
var certsJSONResponse = `
{
"certificates": [
{
"id": "892071a0-bb95-49bc-8021-3afd67a210bf",
"name": "web-cert-01",
"dns_names": [
"somedomain.com",
"api.somedomain.com"
],
"not_after": "2017-02-22T00:23:00Z",
"sha1_fingerprint": "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
"created_at": "2017-02-08T16:02:37Z",
"state": "verified",
"type": "custom"
},
{
"id": "992071a0-bb95-49bc-8021-3afd67a210bf",
"name": "web-cert-02",
"dns_names":["example.com"],
"not_after": "2017-02-22T00:23:00Z",
"sha1_fingerprint": "cfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
"created_at": "2017-02-08T16:02:37Z",
"state": "pending",
"type": "lets_encrypt"
}
],
"links": {},
"meta": {
"total": 1
}
}
`
func TestCertificates_Get(t *testing.T) {
setup()
defer teardown()
urlStr := "/v2/certificates"
cID := "892071a0-bb95-49bc-8021-3afd67a210bf"
urlStr = path.Join(urlStr, cID)
mux.HandleFunc(urlStr, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, certJSONResponse)
})
certificate, _, err := client.Certificates.Get(ctx, cID)
if err != nil {
t.Errorf("Certificates.Get returned error: %v", err)
}
expected := &Certificate{
ID: "892071a0-bb95-49bc-8021-3afd67a210bf",
Name: "web-cert-01",
DNSNames: []string{"somedomain.com", "api.somedomain.com"},
NotAfter: "2017-02-22T00:23:00Z",
SHA1Fingerprint: "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
Created: "2017-02-08T16:02:37Z",
State: "verified",
Type: "custom",
}
assert.Equal(t, expected, certificate)
}
func TestCertificates_List(t *testing.T) {
setup()
defer teardown()
urlStr := "/v2/certificates"
mux.HandleFunc(urlStr, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprint(w, certsJSONResponse)
})
certificates, _, err := client.Certificates.List(ctx, nil)
if err != nil {
t.Errorf("Certificates.List returned error: %v", err)
}
expected := []Certificate{
{
ID: "892071a0-bb95-49bc-8021-3afd67a210bf",
Name: "web-cert-01",
DNSNames: []string{"somedomain.com", "api.somedomain.com"},
NotAfter: "2017-02-22T00:23:00Z",
SHA1Fingerprint: "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
Created: "2017-02-08T16:02:37Z",
State: "verified",
Type: "custom",
},
{
ID: "992071a0-bb95-49bc-8021-3afd67a210bf",
Name: "web-cert-02",
DNSNames: []string{"example.com"},
NotAfter: "2017-02-22T00:23:00Z",
SHA1Fingerprint: "cfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
Created: "2017-02-08T16:02:37Z",
State: "pending",
Type: "lets_encrypt",
},
}
assert.Equal(t, expected, certificates)
}
func TestCertificates_Create(t *testing.T) {
tests := []struct {
desc string
createRequest *CertificateRequest
certJSONResponse string
expectedCertificate *Certificate
}{
{
desc: "creates custom certificate",
createRequest: &CertificateRequest{
Name: "web-cert-01",
PrivateKey: "-----BEGIN PRIVATE KEY-----",
LeafCertificate: "-----BEGIN CERTIFICATE-----",
CertificateChain: "-----BEGIN CERTIFICATE-----",
},
certJSONResponse: `{
"certificate": {
"id": "892071a0-bb95-49bc-8021-3afd67a210bf",
"name": "custom-cert",
"dns_names":[],
"not_after": "2017-02-22T00:23:00Z",
"sha1_fingerprint": "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
"created_at": "2017-02-08T16:02:37Z",
"state": "verified",
"type": "custom"
}
}`,
expectedCertificate: &Certificate{
ID: "892071a0-bb95-49bc-8021-3afd67a210bf",
Name: "custom-cert",
DNSNames: []string{},
NotAfter: "2017-02-22T00:23:00Z",
SHA1Fingerprint: "dfcc9f57d86bf58e321c2c6c31c7a971be244ac7",
Created: "2017-02-08T16:02:37Z",
State: "verified",
Type: "custom",
},
},
{
desc: "creates let's encrypt certificate",
createRequest: &CertificateRequest{
Name: "lets-encrypt-cert",
DNSNames: []string{"example.com", "api.example.com"},
Type: "lets_encrypt",
},
certJSONResponse: `{
"certificate": {
"id": "91bce928-a983-4c97-a5ee-78c585bf798d",
"name": "lets-encrypt-cert",
"dns_names":["example.com", "api.example.com"],
"not_after": "2022-01-26T15:50:00Z",
"sha1_fingerprint": "2e3c2ba8016faf80f431700ff2865ef6dba30a81",
"created_at": "2017-08-23T20:42:46Z",
"state": "pending",
"type": "lets_encrypt"
}
}`,
expectedCertificate: &Certificate{
ID: "91bce928-a983-4c97-a5ee-78c585bf798d",
Name: "lets-encrypt-cert",
DNSNames: []string{"example.com", "api.example.com"},
NotAfter: "2022-01-26T15:50:00Z",
SHA1Fingerprint: "2e3c2ba8016faf80f431700ff2865ef6dba30a81",
Created: "2017-08-23T20:42:46Z",
State: "pending",
Type: "lets_encrypt",
},
},
}
for _, test := range tests {
t.Run(test.desc, func(t *testing.T) {
setup()
defer teardown()
urlStr := "/v2/certificates"
mux.HandleFunc(urlStr, func(w http.ResponseWriter, r *http.Request) {
v := new(CertificateRequest)
err := json.NewDecoder(r.Body).Decode(v)
if err != nil {
t.Fatal(err)
}
testMethod(t, r, http.MethodPost)
assert.Equal(t, test.createRequest, v)
fmt.Fprint(w, test.certJSONResponse)
})
certificate, _, err := client.Certificates.Create(ctx, test.createRequest)
if err != nil {
t.Errorf("Certificates.Create returned error: %v", err)
}
assert.Equal(t, test.expectedCertificate, certificate)
})
}
}
func TestCertificates_Delete(t *testing.T) {
setup()
defer teardown()
cID := "892071a0-bb95-49bc-8021-3afd67a210bf"
urlStr := "/v2/certificates"
urlStr = path.Join(urlStr, cID)
mux.HandleFunc(urlStr, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodDelete)
})
_, err := client.Certificates.Delete(ctx, cID)
if err != nil {
t.Errorf("Certificates.Delete returned error: %v", err)
}
}