Add test for ca config http endpoint

This commit is contained in:
Kyle Havlovitz 2018-05-04 15:28:11 -07:00 committed by Mitchell Hashimoto
parent de72834b8c
commit 988510f53c
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 63 additions and 3 deletions

View File

@ -114,7 +114,7 @@ func NewConsulCAProvider(rawConfig map[string]interface{}, delegate ConsulCAStat
} }
func ParseConsulCAConfig(raw map[string]interface{}) (*structs.ConsulCAProviderConfig, error) { func ParseConsulCAConfig(raw map[string]interface{}) (*structs.ConsulCAProviderConfig, error) {
var config *structs.ConsulCAProviderConfig var config structs.ConsulCAProviderConfig
if err := mapstructure.WeakDecode(raw, &config); err != nil { if err := mapstructure.WeakDecode(raw, &config); err != nil {
return nil, fmt.Errorf("error decoding config: %s", err) return nil, fmt.Errorf("error decoding config: %s", err)
} }
@ -123,7 +123,7 @@ func ParseConsulCAConfig(raw map[string]interface{}) (*structs.ConsulCAProviderC
return nil, fmt.Errorf("must provide a private key when providing a root cert") return nil, fmt.Errorf("must provide a private key when providing a root cert")
} }
return config, nil return &config, nil
} }
// Return the active root CA and generate a new one if needed // Return the active root CA and generate a new one if needed

View File

@ -1,11 +1,14 @@
package agent package agent
import ( import (
"bytes"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"testing" "testing"
"time"
"github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/connect"
connect_ca "github.com/hashicorp/consul/agent/connect/ca"
"github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/structs"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -42,7 +45,7 @@ func TestConnectCARoots_list(t *testing.T) {
req, _ := http.NewRequest("GET", "/v1/connect/ca/roots", nil) req, _ := http.NewRequest("GET", "/v1/connect/ca/roots", nil)
resp := httptest.NewRecorder() resp := httptest.NewRecorder()
obj, err := a.srv.ConnectCARoots(resp, req) obj, err := a.srv.ConnectCARoots(resp, req)
assert.Nil(err) assert.NoError(err)
value := obj.(structs.IndexedCARoots) value := obj.(structs.IndexedCARoots)
assert.Equal(value.ActiveRootID, ca2.ID) assert.Equal(value.ActiveRootID, ca2.ID)
@ -54,3 +57,60 @@ func TestConnectCARoots_list(t *testing.T) {
assert.Equal("", r.SigningKey) assert.Equal("", r.SigningKey)
} }
} }
func TestConnectCAConfig(t *testing.T) {
t.Parallel()
assert := assert.New(t)
a := NewTestAgent(t.Name(), "")
defer a.Shutdown()
expected := &structs.ConsulCAProviderConfig{
RotationPeriod: 90 * 24 * time.Hour,
}
// Get the initial config.
{
req, _ := http.NewRequest("GET", "/v1/connect/ca/configuration", nil)
resp := httptest.NewRecorder()
obj, err := a.srv.ConnectCAConfiguration(resp, req)
assert.NoError(err)
value := obj.(structs.CAConfiguration)
parsed, err := connect_ca.ParseConsulCAConfig(value.Config)
assert.NoError(err)
assert.Equal("consul", value.Provider)
assert.Equal(expected, parsed)
}
// Set the config.
{
body := bytes.NewBuffer([]byte(`
{
"Provider": "consul",
"Config": {
"RotationPeriod": 3600000000000
}
}`))
req, _ := http.NewRequest("PUT", "/v1/connect/ca/configuration", body)
resp := httptest.NewRecorder()
_, err := a.srv.ConnectCAConfiguration(resp, req)
assert.NoError(err)
}
// The config should be updated now.
{
expected.RotationPeriod = time.Hour
req, _ := http.NewRequest("GET", "/v1/connect/ca/configuration", nil)
resp := httptest.NewRecorder()
obj, err := a.srv.ConnectCAConfiguration(resp, req)
assert.NoError(err)
value := obj.(structs.CAConfiguration)
//t.Fatalf("%#v", value)
parsed, err := connect_ca.ParseConsulCAConfig(value.Config)
assert.NoError(err)
assert.Equal("consul", value.Provider)
assert.Equal(expected, parsed)
}
}