Update config test

This commit is contained in:
Neil Alexander 2020-08-11 09:45:30 +01:00
parent c782197eed
commit d49d865ee0
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
2 changed files with 489 additions and 153 deletions

View file

@ -192,11 +192,11 @@ func loadConfig(
var err error var err error
if err = hjson.Unmarshal(configData, &c); err != nil { if err = hjson.Unmarshal(configData, &c); err != nil {
return nil, err return nil, fmt.Errorf("hjson.Unmarshal: %w", err)
} }
if err = c.check(monolithic); err != nil { if err = c.check(monolithic); err != nil {
return nil, err return nil, fmt.Errorf("c.check: %w", err)
} }
privateKeyPath := absPath(basePath, c.Global.PrivateKeyPath) privateKeyPath := absPath(basePath, c.Global.PrivateKeyPath)

View file

@ -33,157 +33,493 @@ func TestLoadConfigRelative(t *testing.T) {
} }
const testConfig = ` const testConfig = `
version: 1 {
global: Version: 1
server_name: localhost Global:
private_key: matrix_key.pem {
key_validity_period: 168h0m0s # The domain name of this homeserver.
trusted_third_party_id_servers: [] ServerName: localhost
kafka:
addresses: [] # The path to the signing private key file, used to sign requests and events.
use_naffka: true PrivateKeyPath: matrix.pem
naffka_database:
connection_string: file:naffka.db # A unique identifier for this private key. Must start with the prefix "ed25519:".
max_open_conns: 0 KeyID: ed25519:auto
max_idle_conns: 0
conn_max_lifetime: -1 # How long a remote server can cache our server signing key before requesting it
topics: # again. Increasing this number will reduce the number of requests made by other
output_room_event: OutputRoomEventTopic # servers for our key but increases the period that a compromised key will be
output_client_data: OutputClientDataTopic # considered valid by other homeservers.
output_typing_event: OutputTypingEventTopic KeyValidityPeriod: 604800000000000
output_send_to_device_event: OutputSendToDeviceEventTopic
output_key_change_event: OutputKeyChangeEventTopic # Lists of domains that the server will trust as identity servers to verify third
metrics: # party identifiers such as phone numbers and email addresses.
enabled: false TrustedIDServers: []
basic_auth:
username: metrics # Configuration for Kaffka/Naffka.
password: metrics Kafka:
app_service_api: {
listen: localhost:7777 # List of Kafka addresses to connect to.
bind: localhost:7777 Addresses: []
database:
connection_string: file:appservice.db # The prefix to use for Kafka topic names for this homeserver. Change this only if
max_open_conns: 0 # you are running more than one Dendrite homeserver on the same Kafka deployment.
max_idle_conns: 0 TopicPrefix: Dendrite
conn_max_lifetime: -1
config_files: [] # Whether to use Naffka instead of Kafka. Only available in monolith mode.
client_api: UseNaffka: true
listen: localhost:7771
bind: localhost:7771 # Naffka database options. Not required when using Kafka.
registration_shared_secret: "" NaffkaDatabase:
recaptcha_public_key: "" {
recaptcha_private_key: "" # Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
enable_registration_captcha: false ConnectionString: file:naffka.db
captcha_bypass_secret: ""
recaptcha_siteverify_api: "" # Maximum number of connections to open to the database (0 = use default,
registration_disabled: false # negative = unlimited).
turn: MaxOpenConnections: 100
turn_user_lifetime: ""
turn_uris: [] # Maximum number of idle connections permitted to the database (0 = use default,
turn_shared_secret: "" # negative = unlimited).
turn_username: "" MaxIdleConnections: 2
turn_password: ""
current_state_server: # Maximum amount of time, in seconds, that a database connection may be reused
listen: localhost:7782 # (negative = unlimited).
bind: localhost:7782 ConnMaxLifetimeSeconds: -1
database: }
connection_string: file:currentstate.db }
max_open_conns: 0
max_idle_conns: 0 # Configuration for Prometheus metric collection.
conn_max_lifetime: -1 Metrics:
edu_server: {
listen: localhost:7778 # Whether or not Prometheus metrics are enabled.
bind: localhost:7778 Enabled: false
federation_api:
listen: localhost:7772 # HTTP basic authentication to protect access to monitoring.
bind: localhost:7772 BasicAuth:
federation_certificates: [] {
federation_sender: Username: metrics
listen: localhost:7775 Password: metrics
bind: localhost:7775 }
database: }
connection_string: file:federationsender.db }
max_open_conns: 0 AppServiceAPI:
max_idle_conns: 0 {
conn_max_lifetime: -1 # Listen address for this component.
federation_max_retries: 16 Listen: localhost:7777
proxy_outbound:
enabled: false # Bind address for this component.
protocol: http Bind: localhost:7777
host: localhost
port: 8080 # Database options for this component.
key_server: Database:
listen: localhost:7779 {
bind: localhost:7779 # Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
database: ConnectionString: file:appservice.db
connection_string: file:keyserver.db
max_open_conns: 0 # Maximum number of connections to open to the database (0 = use default,
max_idle_conns: 0 # negative = unlimited).
conn_max_lifetime: -1 MaxOpenConnections: 100
media_api:
listen: localhost:7774 # Maximum number of idle connections permitted to the database (0 = use default,
bind: localhost:7774 # negative = unlimited).
database: MaxIdleConnections: 2
connection_string: file:mediaapi.db
max_open_conns: 0 # Maximum amount of time, in seconds, that a database connection may be reused
max_idle_conns: 0 # (negative = unlimited).
conn_max_lifetime: -1 ConnMaxLifetimeSeconds: -1
base_path: "" }
max_file_size_bytes: 10485760
dynamic_thumbnails: false # List of paths to appservice configuration files.
max_thumbnail_generators: 10 ConfigFiles: []
thumbnail_sizes: [] }
room_server: ClientAPI:
listen: localhost:7770 {
bind: localhost:7770 # The listen address for this component.
database: Listen: localhost:7771
connection_string: file:roomserver.db
max_open_conns: 0 # The bind address for this component.
max_idle_conns: 0 Bind: localhost:7771
conn_max_lifetime: -1
server_key_api: # Prevent new users from registering, except when using the shared secret from the
listen: localhost:7780 # RegistrationSharedSecret option below.
bind: localhost:7780 RegistrationDisabled: false
database:
connection_string: file:serverkeyapi.db # If set, allows registration by anyone who knows the shared secret, even if
max_open_conns: 0 # registration is otherwise disabled.
max_idle_conns: 0 RegistrationSharedSecret: ""
conn_max_lifetime: -1
key_perspectives: [] # Whether to require ReCAPTCHA for registration.
sync_api: RecaptchaEnabled: false
listen: localhost:7773
bind: localhost:7773 # This server's ReCAPTCHA public key.
database: RecaptchaPublicKey: ""
connection_string: file:syncapi.db
max_open_conns: 0 # This server's ReCAPTCHA private key.
max_idle_conns: 0 RecaptchaPrivateKey: ""
conn_max_lifetime: -1
user_api: # Secret used to bypass ReCAPTCHA entirely.
listen: localhost:7781 RecaptchaBypassSecret: ""
bind: localhost:7781
account_database: # The URL to use for verifying if the ReCAPTCHA response was successful.
connection_string: file:userapi_accounts.db RecaptchaSiteVerifyAPI: ""
max_open_conns: 0
max_idle_conns: 0 TURN:
conn_max_lifetime: -1 {
device_database: # How long the TURN authorisation should last.
connection_string: file:userapi_devices.db UserLifetime: ""
max_open_conns: 0
max_idle_conns: 0 # The list of TURN URIs to pass to clients.
conn_max_lifetime: -1 URIs: []
tracing:
enabled: false # Authorisation shared secret from coturn.
jaeger: SharedSecret: ""
serviceName: ""
disabled: false # Authorisation static username.
rpc_metrics: false Username: ""
tags: []
sampler: null # Authorisation static password.
reporter: null Password: ""
headers: null }
baggage_restrictions: null }
throttler: null CurrentStateServer:
logging: [] {
# Listen address for this component.
Listen: localhost:7782
# Bind address for this component.
Bind: localhost:7782
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:currentstate.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
}
EDUServer:
{
# Listen address for this component.
Listen: localhost:7778
# Bind address for this component.
Bind: localhost:7778
}
FederationAPI:
{
# Listen address for this component.
Listen: localhost:7772
# Bind address for this component.
Bind: localhost:7772
# List of paths to X.509 certificates to be used by the external federation listeners.
# These certificates will be used to calculate the TLS fingerprints and other servers
# will expect the certificate to match these fingerprints. Certificates must be in PEM
# format.
FederationCertificates: []
}
FederationSender:
{
# Listen address for this component.
Listen: localhost:7775
# Bind address for this component.
Bind: localhost:7775
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:federationsender.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
# How many times we will try to resend a failed transaction to a specific server. The
# backoff is 2**x seconds, so 1 = 2 seconds, 2 = 4 seconds, 3 = 8 seconds etc.
SendMaxRetries: 16
# Disable the validation of TLS certificates of remote federated homeservers. Do not
# enable this option in production as it presents a security risk!
DisableTLSValidation: false
# Use the following proxy server for outbound federation traffic.
ProxyOutbound:
{
Enabled: false
Protocol: http
Host: localhost
Port: 8080
}
}
KeyServer:
{
# Listen address for this component.
Listen: localhost:7779
# Bind address for this component.
Bind: localhost:7779
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:keyserver.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
}
MediaAPI:
{
# Listen address for this component.
Listen: localhost:7774
# Bind address for this component.
Bind: localhost:7774
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:mediaapi.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
# Storage path for uploaded media. May be relative or absolute.
BasePath: ./media_store
# The maximum allowed file size (in bytes) for media uploads to this homeserver
# (0 = unlimited).
MaxFileSizeBytes: 10485760
# Whether to dynamically generate thumbnails if needed.
DynamicThumbnails: false
# The maximum number of simultaneous thumbnail generators to run.
MaxThumbnailGenerators: 10
# A list of thumbnail sizes to be generated for media content.
ThumbnailSizes: []
}
RoomServer:
{
# Listen address for this component.
Listen: localhost:7770
# Bind address for this component.
Bind: localhost:7770
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:roomserver.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
}
ServerKeyAPI:
{
# Listen address for this component.
Listen: localhost:7780
# Bind address for this component.
Bind: localhost:7780
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:serverkeyapi.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
# Perspective keyservers to use as a backup when direct key fetches fail.
PerspectiveServers:
[
{
ServerName: matrix.org
TrustKeys:
[
{
KeyID: ed25519:auto
PublicKey: Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw
}
{
KeyID: ed25519:a_RXGa
PublicKey: l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ
}
]
}
]
}
SyncAPI:
{
# Listen address for this component.
Listen: localhost:7773
# Bind address for this component.
Bind: localhost:7773
# Database configuration for this component.
Database:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:syncapi.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
}
UserAPI:
{
# Listen address for this component.
Listen: localhost:7781
# Bind address for this component.
Bind: localhost:7781
# Database configuration for the account database.
AccountDatabase:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:userapi_accounts.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
# Database configuration for the device database.
DeviceDatabase:
{
# Connection string, e.g. file:filename.db or postgresql://user:pass@host/db etc.
ConnectionString: file:userapi_devices.db
# Maximum number of connections to open to the database (0 = use default,
# negative = unlimited).
MaxOpenConnections: 100
# Maximum number of idle connections permitted to the database (0 = use default,
# negative = unlimited).
MaxIdleConnections: 2
# Maximum amount of time, in seconds, that a database connection may be reused
# (negative = unlimited).
ConnMaxLifetimeSeconds: -1
}
}
Tracing:
{
Enabled: false
Jaeger:
{
ServiceName: ""
Disabled: false
RPCMetrics: false
Tags: []
Sampler: null
Reporter: null
Headers: null
BaggageRestrictions: null
Throttler: null
}
}
Logging:
[
{
Type: file
Level: info
Params:
{
path: /var/log/dendrite
}
}
]
}
` `
type mockReadFile map[string]string type mockReadFile map[string]string