210 lines
4.7 KiB
Go
210 lines
4.7 KiB
Go
package config_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.benny.dog/torjus/ezshare/config"
|
|
)
|
|
|
|
var configStrExample = `
|
|
########################
|
|
# Server configuration #
|
|
########################
|
|
[Server]
|
|
# Set server log-level
|
|
# Must be one of: DEBUG, INFO, WARN, ERROR
|
|
# Default: INFO
|
|
LogLevel = "INFO"
|
|
|
|
# Server hostname
|
|
# Used for generating links
|
|
# Required
|
|
Hostname = "localhost"
|
|
|
|
# Endpoint reachable by clients
|
|
# Fetched by clients for automatic setup
|
|
# Required
|
|
GRPCEndpoint = "localhost:50051"
|
|
|
|
# File store configuration
|
|
[Server.FileStore]
|
|
# How server stores file
|
|
# Must be one of: filesystem, memory, bolt
|
|
# Required
|
|
Type = "bolt"
|
|
|
|
[Server.FileStore.Bolt]
|
|
# Where the bolt-db is stored
|
|
# Required if store-type is bolt
|
|
Path = "/data/files.db"
|
|
|
|
[Server.FileStore.Filesystem]
|
|
# Where files are stored
|
|
# Required if store-type is filesystem
|
|
Dir = "/data"
|
|
|
|
[Server.DataStore]
|
|
# What store to use for users, certs and binaries
|
|
# Must be one of: memory, bolt
|
|
# Required
|
|
Type = "bolt"
|
|
|
|
[Server.DataStore.Bolt]
|
|
# Path to bolt database-file
|
|
# Required if Server.Datastore is bolt
|
|
Path = "/data/users.db"
|
|
|
|
# GRPC Configuration
|
|
[Server.GRPC]
|
|
# Address to listen to
|
|
# Default: :50051
|
|
ListenAddr = ":50051"
|
|
|
|
# GRPC Certificate Configuration
|
|
[Server.GRPC.CACerts]
|
|
# Path of PEM-encoded certificate file
|
|
CertificatePath = "/data/ca.pem"
|
|
# Path of PEM-encoded private key
|
|
# Must be of type ecdsa
|
|
CertificateKeyPath = "/data/ca.key"
|
|
|
|
[Server.GRPC.Certs]
|
|
# Path of PEM-encoded certificate file
|
|
CertificatePath = "/data/server.pem"
|
|
# Path of PEM-encoded private key
|
|
# Must be of type ecdsa
|
|
CertificateKeyPath = "/data/server.key"
|
|
|
|
[Server.HTTP]
|
|
# Address to listen to
|
|
# Default: :8089
|
|
ListenAddr = ":8089"
|
|
|
|
|
|
########################
|
|
# Client configuration #
|
|
########################
|
|
[Client]
|
|
# Server used if not specified using command-line
|
|
DefaultServer = "localhost:50051"
|
|
# Path to PEM-encoder server-certificate
|
|
ServerCertPath = "/data/server.pem"
|
|
|
|
[Client.Certs]
|
|
# Path of PEM-encoded certificate file
|
|
CertificatePath = "/data/client.pem"
|
|
# Path of PEM-encoded private key
|
|
# Must be of type ecdsa
|
|
CertificateKeyPath = "/data/client.key"
|
|
`
|
|
|
|
var configStrValidClient = `
|
|
[Client]
|
|
DefaultServer = "localhost:50051"
|
|
ServerCertPath = "/data/server.pem"
|
|
[Client.Certs]
|
|
CertificatePath = "/data/client.pem"
|
|
CertificateKeyPath = "/data/client.key"
|
|
`
|
|
|
|
var configStrValidServerMinimal = `
|
|
[Server]
|
|
LogLevel = "INFO"
|
|
Hostname = "localhost"
|
|
GRPCEndpoint = "localhost:50051"
|
|
[Server.FileStore]
|
|
Type = "memory"
|
|
[Server.DataStore]
|
|
Type = "memory"
|
|
[Server.GRPC]
|
|
ListenAddr = ":50051"
|
|
[Server.GRPC.CACerts]
|
|
CertificatePath = "/data/ca.pem"
|
|
CertificateKeyPath = "/data/ca.key"
|
|
[Server.GRPC.Certs]
|
|
CertificatePath = "/data/server.pem"
|
|
CertificateKeyPath = "/data/server.key"
|
|
[Server.HTTP]
|
|
ListenAddr = ":8089"
|
|
`
|
|
|
|
var configStrInvalidServerMissingStoreConfig = `
|
|
[Server]
|
|
LogLevel = "INFO"
|
|
Hostname = "localhost"
|
|
GRPCEndpoint = "localhost:50051"
|
|
[Server.FileStore]
|
|
Type = "bolt"
|
|
[Server.DataStore]
|
|
Type = "memory"
|
|
[Server.GRPC]
|
|
ListenAddr = ":50051"
|
|
[Server.GRPC.CACerts]
|
|
CertificatePath = "/data/ca.pem"
|
|
CertificateKeyPath = "/data/ca.key"
|
|
[Server.GRPC.Certs]
|
|
CertificatePath = "/data/server.pem"
|
|
CertificateKeyPath = "/data/server.key"
|
|
[Server.HTTP]
|
|
ListenAddr = ":8089"
|
|
`
|
|
|
|
func TestConfig(t *testing.T) {
|
|
t.Run("TestValid", func(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
Name string
|
|
ConfigString string
|
|
ValidForClient bool
|
|
ValidForServer bool
|
|
}{
|
|
{
|
|
Name: "ExampleConfig",
|
|
ConfigString: configStrExample,
|
|
ValidForClient: true,
|
|
ValidForServer: true,
|
|
},
|
|
{
|
|
Name: "ServerValidMinimal",
|
|
ConfigString: configStrValidServerMinimal,
|
|
ValidForServer: true,
|
|
},
|
|
{
|
|
Name: "ClientValidMinimal",
|
|
ConfigString: configStrValidClient,
|
|
ValidForClient: true,
|
|
},
|
|
{
|
|
Name: "ServerInvalidMissingStoreConfig",
|
|
ConfigString: configStrInvalidServerMissingStoreConfig,
|
|
},
|
|
}
|
|
|
|
for _, c := range testCases {
|
|
t.Run(c.Name, func(t *testing.T) {
|
|
sr := strings.NewReader(c.ConfigString)
|
|
cfg, err := config.FromReader(sr)
|
|
if err != nil {
|
|
t.Fatalf("Error reading config: %s", err)
|
|
}
|
|
clientErr := cfg.ValidForClient()
|
|
serverErr := cfg.ValidForServer()
|
|
|
|
if c.ValidForClient && !(clientErr == nil) {
|
|
t.Errorf("Valid config ValidClientConfig returned wrong result: %s", clientErr)
|
|
}
|
|
if !c.ValidForClient && (clientErr == nil) {
|
|
t.Errorf("Invalid config ValidClientConfig returned wrong result: %s", clientErr)
|
|
}
|
|
if c.ValidForServer && !(serverErr == nil) {
|
|
t.Errorf("Valid config ValidServerConfig returned wrong result: %s", clientErr)
|
|
}
|
|
if !c.ValidForServer && (serverErr == nil) {
|
|
t.Errorf("Invalid config ValidServerConfig returned wrong result: %s", clientErr)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|