mirror of
https://github.com/cloudflare/redoctober.git
synced 2025-12-23 06:15:45 +00:00
This commit adds basic sentry reporting. If enabled by setting the appropriate configuration value, it will report panics and errors. Certain functions in the core package (Delegate, Encrypt, Decrypt, Restore, and ResetPersisted) have additional Sentry reporting as these are the most common errors.
202 lines
3.8 KiB
Go
202 lines
3.8 KiB
Go
package config
|
|
|
|
import "testing"
|
|
|
|
func (s *Server) equal(other *Server) bool {
|
|
if s.Addr != other.Addr {
|
|
return false
|
|
}
|
|
|
|
if s.CAPath != other.CAPath {
|
|
return false
|
|
}
|
|
|
|
if len(s.KeyPaths) != len(other.KeyPaths) {
|
|
return false
|
|
}
|
|
|
|
if len(s.CertPaths) != len(other.KeyPaths) {
|
|
return false
|
|
}
|
|
|
|
for i := range s.KeyPaths {
|
|
if s.KeyPaths[i] != other.KeyPaths[i] {
|
|
return false
|
|
}
|
|
}
|
|
|
|
for i := range s.CertPaths {
|
|
if s.CertPaths[i] != other.CertPaths[i] {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if s.Systemd != other.Systemd {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (ui *UI) equal(other *UI) bool {
|
|
if ui.Root != other.Root {
|
|
return false
|
|
}
|
|
|
|
if ui.Static != other.Static {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (hc *HipChat) equal(other *HipChat) bool {
|
|
if hc.Host != other.Host || hc.Room != other.Room || hc.APIKey != other.APIKey {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (m *Metrics) equal(other *Metrics) bool {
|
|
return m.Host == other.Host && m.Port == other.Port
|
|
}
|
|
|
|
func (r *Reporting) equal(other *Reporting) bool {
|
|
return r.SentryDSN == other.SentryDSN
|
|
}
|
|
|
|
func (d *Delegations) equal(other *Delegations) bool {
|
|
return d.Persist == other.Persist && d.Policy == other.Policy
|
|
}
|
|
|
|
func (c *Config) equal(other *Config) bool {
|
|
if !c.Server.equal(other.Server) {
|
|
return false
|
|
}
|
|
|
|
if !c.UI.equal(other.UI) {
|
|
return false
|
|
}
|
|
|
|
if !c.HipChat.equal(other.HipChat) {
|
|
return false
|
|
}
|
|
|
|
if !c.Metrics.equal(other.Metrics) {
|
|
return false
|
|
}
|
|
|
|
if !c.Reporting.equal(other.Reporting) {
|
|
return false
|
|
}
|
|
|
|
if !c.Delegations.equal(other.Delegations) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// TestEmptyEqual makes sure two empty configurations are equal.
|
|
func TestEmptyEqual(t *testing.T) {
|
|
a := New()
|
|
b := New()
|
|
|
|
if !a.equal(b) {
|
|
t.Fatal("empty configurations should be equivalent")
|
|
}
|
|
}
|
|
|
|
// TestLoadFile validates loading a configuration from disk.
|
|
func TestLoadFile(t *testing.T) {
|
|
goodConfig := "testdata/config.json"
|
|
badConfig := "testdata/bad_config.json"
|
|
expected := New()
|
|
expected.Server = &Server{
|
|
Addr: "localhost:8080",
|
|
KeyPaths: "testdata/server.key",
|
|
CertPaths: "testdata/server.pem",
|
|
}
|
|
|
|
_, err := Load("testdata/enoent.json")
|
|
if err == nil {
|
|
t.Fatal("attempt to load non-existent file should fail")
|
|
}
|
|
|
|
_, err = Load(badConfig)
|
|
if err == nil {
|
|
t.Fatal("attempt to load malformed JSON should fail")
|
|
}
|
|
|
|
cfg, err := Load(goodConfig)
|
|
if err != nil {
|
|
t.Fatalf("failed to load config: %s", err)
|
|
}
|
|
|
|
if !cfg.equal(expected) {
|
|
t.Fatal("loaded config is invalid")
|
|
}
|
|
}
|
|
|
|
// TestValid validates the Validate function.
|
|
func TestValid(t *testing.T) {
|
|
config := New()
|
|
|
|
if config.Valid() {
|
|
t.Fatal("empty config shouldn't be valid")
|
|
}
|
|
|
|
// Certs and no keys is an invalid config.
|
|
config.Server.CertPaths = "testdata/server.pem"
|
|
if config.Valid() {
|
|
t.Fatal("config shouldn't be valid")
|
|
}
|
|
|
|
// Keys and no certs is an invalid config.
|
|
config.Server.CertPaths = ""
|
|
config.Server.KeyPaths = "testdata/server.key"
|
|
if config.Valid() {
|
|
t.Fatal("config shouldn't be valid")
|
|
}
|
|
|
|
// Key pairs but no address information is an invalid config.
|
|
config.Server.CertPaths = "testdata/server.pem"
|
|
if config.Valid() {
|
|
t.Fatal("config shouldn't be valid")
|
|
}
|
|
|
|
config.Server.Addr = "localhost:8080"
|
|
if !config.Valid() {
|
|
t.Fatal("config should be valid")
|
|
}
|
|
|
|
config.Server.Addr = ""
|
|
config.Server.Systemd = true
|
|
if !config.Valid() {
|
|
t.Fatal("config should be valid")
|
|
}
|
|
}
|
|
|
|
func TestHipChatValid(t *testing.T) {
|
|
hc := &HipChat{}
|
|
if hc.Valid() {
|
|
t.Fatal("empty hipchat config shouldn't be valid")
|
|
}
|
|
|
|
hc.APIKey = "test"
|
|
if hc.Valid() {
|
|
t.Fatal("invalid hipchat config shouldn't be valid")
|
|
}
|
|
|
|
hc.Room = "test"
|
|
if hc.Valid() {
|
|
t.Fatal("invalid hipchat config shouldn't be valid")
|
|
}
|
|
|
|
hc.Host = "test"
|
|
if !hc.Valid() {
|
|
t.Fatal("valid hipchat config marked as invalid")
|
|
}
|
|
}
|