mirror of
https://github.com/aclindsa/moneygo.git
synced 2024-12-25 23:23:21 -05:00
Add tests for reading config files
This commit is contained in:
parent
ac0ff45f7f
commit
ac8afec6c1
@ -59,8 +59,9 @@ script:
|
|||||||
- touch $GOPATH/src/github.com/aclindsa/moneygo/internal/handlers/cusip_list.csv
|
- touch $GOPATH/src/github.com/aclindsa/moneygo/internal/handlers/cusip_list.csv
|
||||||
# Build and test MoneyGo
|
# Build and test MoneyGo
|
||||||
- go generate -v github.com/aclindsa/moneygo/internal/handlers
|
- go generate -v github.com/aclindsa/moneygo/internal/handlers
|
||||||
- go test -v -covermode=count -coverpkg github.com/aclindsa/moneygo/internal/config,github.com/aclindsa/moneygo/internal/handlers,github.com/aclindsa/moneygo/internal/models,github.com/aclindsa/moneygo/internal/store,github.com/aclindsa/moneygo/internal/store/db -coverprofile=coverage.out github.com/aclindsa/moneygo/internal/integration
|
- go test -v -covermode=count -coverpkg github.com/aclindsa/moneygo/internal/config,github.com/aclindsa/moneygo/internal/handlers,github.com/aclindsa/moneygo/internal/models,github.com/aclindsa/moneygo/internal/store,github.com/aclindsa/moneygo/internal/store/db -coverprofile=integration_coverage.out github.com/aclindsa/moneygo/internal/integration
|
||||||
|
- go test -v -covermode=count -coverpkg github.com/aclindsa/moneygo/internal/config,github.com/aclindsa/moneygo/internal/handlers,github.com/aclindsa/moneygo/internal/models,github.com/aclindsa/moneygo/internal/store,github.com/aclindsa/moneygo/internal/store/db -coverprofile=config_coverage.out github.com/aclindsa/moneygo/internal/config
|
||||||
|
|
||||||
# Report the test coverage
|
# Report the test coverage
|
||||||
after_script:
|
after_script:
|
||||||
- $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN
|
- $GOPATH/bin/goveralls -coverprofile=integration_coverage.out,config_coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN
|
||||||
|
@ -65,14 +65,14 @@ cusip_list.csv file and re-run the `go generate ...` command.
|
|||||||
|
|
||||||
MoneyGo requires HTTPS or FCGI (no HTTP). Before starting the server, you will
|
MoneyGo requires HTTPS or FCGI (no HTTP). Before starting the server, you will
|
||||||
want to edit the example configuration file
|
want to edit the example configuration file
|
||||||
(src/github.com/aclindsa/moneygo/example_config.ini) to point to your own SSL
|
(src/github.com/aclindsa/moneygo/internal/config/example_config.ini) to point to
|
||||||
certificate/key OR set 'generate-certs-if-absent = true' in the '[http]' section
|
your own SSL certificate/key OR set 'generate-certs-if-absent = true' in the
|
||||||
of the config file.
|
'[http]' section of the config file.
|
||||||
|
|
||||||
Then, assuming you're in the same directory you ran the above installation
|
Then, assuming you're in the same directory you ran the above installation
|
||||||
commands from, running MoneyGo is as easy as:
|
commands from, running MoneyGo is as easy as:
|
||||||
|
|
||||||
./bin/moneygo -config src/github.com/aclindsa/moneygo/example_config.ini
|
./bin/moneygo -config src/github.com/aclindsa/moneygo/internal/config/example_config.ini
|
||||||
|
|
||||||
You should then be able to explore MoneyGo by visiting https://localhost:8443 in
|
You should then be able to explore MoneyGo by visiting https://localhost:8443 in
|
||||||
your browser. Editing the configuration file supplied will allow you to modify
|
your browser. Editing the configuration file supplied will allow you to modify
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
[moneygo]
|
|
||||||
|
|
||||||
# Whether to serve as FastCGI (default is false, for HTTPS)
|
|
||||||
fcgi = false
|
|
||||||
|
|
||||||
# Port on which to serve HTTPS or FCGI
|
|
||||||
port = 8443
|
|
||||||
|
|
||||||
# Base directory for serving files out of. This should point to the root of the
|
|
||||||
# moneygo source directory
|
|
||||||
base-directory = src/github.com/aclindsa/moneygo/
|
|
||||||
|
|
||||||
# Type of database being used (sqlite3, mysql, postgres)
|
|
||||||
db-type = sqlite3
|
|
||||||
|
|
||||||
# 'Data Source Name' for the database being used. This is driver-specific. See
|
|
||||||
# the following examples and external resources for more information about
|
|
||||||
# configuring this for your particular database configuration:
|
|
||||||
#
|
|
||||||
# Sqlite example DSN: "file:moneygo.sqlite?cache=shared&mode=rwc"
|
|
||||||
# MySQL documentation: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
|
|
||||||
# example DSN: "user:password@tcp(localhost)/dbname&parseTime=true"
|
|
||||||
# (Note: MySQL DSN's *must* include the
|
|
||||||
# "parseTime=true" parameter)
|
|
||||||
# Postgres documentation: https://godoc.org/github.com/lib/pq
|
|
||||||
# example DSN: "postgres://user:password@localhost/dbname"
|
|
||||||
db-dsn = file:moneygo.sqlite?cache=shared&mode=rwc
|
|
||||||
|
|
||||||
|
|
||||||
[https]
|
|
||||||
# If 'fcgi = false', the following paths to a SSL certificate and the paired
|
|
||||||
# private key are used when serving HTTPS
|
|
||||||
cert-file = ./cert.pem
|
|
||||||
key-file = ./key.pem
|
|
||||||
|
|
||||||
# Attempt to generate self-signed certificates if the certificate files
|
|
||||||
# specified above are missing or invalid. This should *never* be set to 'true'
|
|
||||||
# for any environment where security is important (including but not limited to
|
|
||||||
# production systems)
|
|
||||||
generate-certs-if-absent = false
|
|
||||||
# A CSV list of hostnames to generate the above certs for
|
|
||||||
generate-certs-hosts = localhost,127.0.0.1
|
|
1
example_config.ini
Symbolic link
1
example_config.ini
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
internal/config/testdata/sqlite_https_config.ini
|
92
internal/config/config_test.go
Normal file
92
internal/config/config_test.go
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
package config_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aclindsa/moneygo/internal/config"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSqliteHTTPSConfig(t *testing.T) {
|
||||||
|
cfg, err := config.ReadConfig("./testdata/sqlite_https_config.ini")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error parsing config: %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.MoneyGo.Fcgi {
|
||||||
|
t.Errorf("MoneyGo.Fcgi unexpectedly true")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.Port != 8443 {
|
||||||
|
t.Errorf("MoneyGo.Port %d instead of 8443", cfg.MoneyGo.Port)
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.Basedir != "src/github.com/aclindsa/moneygo/" {
|
||||||
|
t.Errorf("MoneyGo.Basedir not correct")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.DBType != config.SQLite {
|
||||||
|
t.Errorf("MoneyGo.DBType not config.SQLite")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.DSN != "file:moneygo.sqlite?cache=shared&mode=rwc" {
|
||||||
|
t.Errorf("MoneyGo.DSN not correct")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.Https.CertFile != "./cert.pem" {
|
||||||
|
t.Errorf("Https.CertFile '%s', not ./cert.pem", cfg.Https.CertFile)
|
||||||
|
}
|
||||||
|
if cfg.Https.KeyFile != "./key.pem" {
|
||||||
|
t.Errorf("Https.KeyFile '%s', not ./key.pem", cfg.Https.KeyFile)
|
||||||
|
}
|
||||||
|
if cfg.Https.GenerateCerts {
|
||||||
|
t.Errorf("Https.GenerateCerts not false")
|
||||||
|
}
|
||||||
|
if cfg.Https.GenerateCertsHosts != "localhost,127.0.0.1" {
|
||||||
|
t.Errorf("Https.GenerateCertsHosts '%s', not localhost", cfg.Https.GenerateCertsHosts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPostgresFcgiConfig(t *testing.T) {
|
||||||
|
cfg, err := config.ReadConfig("./testdata/postgres_fcgi_config.ini")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error parsing config: %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !cfg.MoneyGo.Fcgi {
|
||||||
|
t.Errorf("MoneyGo.Fcgi unexpectedly false")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.Port != 9001 {
|
||||||
|
t.Errorf("MoneyGo.Port %d instead of 9001", cfg.MoneyGo.Port)
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.Basedir != "src/github.com/aclindsa/moneygo/" {
|
||||||
|
t.Errorf("MoneyGo.Basedir not correct")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.DBType != config.Postgres {
|
||||||
|
t.Errorf("MoneyGo.DBType not config.Postgres")
|
||||||
|
}
|
||||||
|
if cfg.MoneyGo.DSN != "postgres://moneygo_test@localhost/moneygo_test?sslmode=disable" {
|
||||||
|
t.Errorf("MoneyGo.DSN not correct")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGenerateCertsConfig(t *testing.T) {
|
||||||
|
cfg, err := config.ReadConfig("./testdata/generate_certs_config.ini")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error parsing config: %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.Https.CertFile != "./local_cert.pem" {
|
||||||
|
t.Errorf("Https.CertFile '%s', not ./local_cert.pem", cfg.Https.CertFile)
|
||||||
|
}
|
||||||
|
if cfg.Https.KeyFile != "./local_key.pem" {
|
||||||
|
t.Errorf("Https.KeyFile '%s', not ./local_key.pem", cfg.Https.KeyFile)
|
||||||
|
}
|
||||||
|
if !cfg.Https.GenerateCerts {
|
||||||
|
t.Errorf("Https.GenerateCerts not true")
|
||||||
|
}
|
||||||
|
if cfg.Https.GenerateCertsHosts != "example.com" {
|
||||||
|
t.Errorf("Https.GenerateCertsHosts '%s', not example.com", cfg.Https.GenerateCertsHosts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNonexistentConfig(t *testing.T) {
|
||||||
|
cfg, err := config.ReadConfig("./testdata/nonexistent_config.ini")
|
||||||
|
if err == nil || cfg != nil {
|
||||||
|
t.Fatalf("Expected error parsing nonexistent config")
|
||||||
|
}
|
||||||
|
}
|
42
internal/config/testdata/generate_certs_config.ini
vendored
Normal file
42
internal/config/testdata/generate_certs_config.ini
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[moneygo]
|
||||||
|
|
||||||
|
# Whether to serve as FastCGI (default is false, for HTTPS)
|
||||||
|
fcgi = false
|
||||||
|
|
||||||
|
# Port on which to serve HTTPS or FCGI
|
||||||
|
port = 8443
|
||||||
|
|
||||||
|
# Base directory for serving files out of. This should point to the root of the
|
||||||
|
# moneygo source directory
|
||||||
|
base-directory = src/github.com/aclindsa/moneygo/
|
||||||
|
|
||||||
|
# Type of database being used (sqlite3, mysql, postgres)
|
||||||
|
db-type = sqlite3
|
||||||
|
|
||||||
|
# 'Data Source Name' for the database being used. This is driver-specific. See
|
||||||
|
# the following examples and external resources for more information about
|
||||||
|
# configuring this for your particular database configuration:
|
||||||
|
#
|
||||||
|
# Sqlite example DSN: "file:moneygo.sqlite?cache=shared&mode=rwc"
|
||||||
|
# MySQL documentation: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
|
||||||
|
# example DSN: "user:password@tcp(localhost)/dbname&parseTime=true"
|
||||||
|
# (Note: MySQL DSN's *must* include the
|
||||||
|
# "parseTime=true" parameter)
|
||||||
|
# Postgres documentation: https://godoc.org/github.com/lib/pq
|
||||||
|
# example DSN: "postgres://user:password@localhost/dbname"
|
||||||
|
db-dsn = file:moneygo.sqlite?cache=shared&mode=rwc
|
||||||
|
|
||||||
|
|
||||||
|
[https]
|
||||||
|
# If 'fcgi = false', the following paths to a SSL certificate and the paired
|
||||||
|
# private key are used when serving HTTPS
|
||||||
|
cert-file = ./local_cert.pem
|
||||||
|
key-file = ./local_key.pem
|
||||||
|
|
||||||
|
# Attempt to generate self-signed certificates if the certificate files
|
||||||
|
# specified above are missing or invalid. This should *never* be set to 'true'
|
||||||
|
# for any environment where security is important (including but not limited to
|
||||||
|
# production systems)
|
||||||
|
generate-certs-if-absent = true
|
||||||
|
# A CSV list of hostnames to generate the above certs for
|
||||||
|
generate-certs-hosts = example.com
|
42
internal/config/testdata/postgres_fcgi_config.ini
vendored
Normal file
42
internal/config/testdata/postgres_fcgi_config.ini
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[moneygo]
|
||||||
|
|
||||||
|
# Whether to serve as FastCGI (default is false, for HTTPS)
|
||||||
|
fcgi = true
|
||||||
|
|
||||||
|
# Port on which to serve HTTPS or FCGI
|
||||||
|
port = 9001
|
||||||
|
|
||||||
|
# Base directory for serving files out of. This should point to the root of the
|
||||||
|
# moneygo source directory
|
||||||
|
base-directory = src/github.com/aclindsa/moneygo/
|
||||||
|
|
||||||
|
# Type of database being used (sqlite3, mysql, postgres)
|
||||||
|
db-type = postgres
|
||||||
|
|
||||||
|
# 'Data Source Name' for the database being used. This is driver-specific. See
|
||||||
|
# the following examples and external resources for more information about
|
||||||
|
# configuring this for your particular database configuration:
|
||||||
|
#
|
||||||
|
# Sqlite example DSN: "file:moneygo.sqlite?cache=shared&mode=rwc"
|
||||||
|
# MySQL documentation: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
|
||||||
|
# example DSN: "user:password@tcp(localhost)/dbname&parseTime=true"
|
||||||
|
# (Note: MySQL DSN's *must* include the
|
||||||
|
# "parseTime=true" parameter)
|
||||||
|
# Postgres documentation: https://godoc.org/github.com/lib/pq
|
||||||
|
# example DSN: "postgres://user:password@localhost/dbname"
|
||||||
|
db-dsn = postgres://moneygo_test@localhost/moneygo_test?sslmode=disable
|
||||||
|
|
||||||
|
|
||||||
|
[https]
|
||||||
|
# If 'fcgi = false', the following paths to a SSL certificate and the paired
|
||||||
|
# private key are used when serving HTTPS
|
||||||
|
cert-file = ./cert.pem
|
||||||
|
key-file = ./key.pem
|
||||||
|
|
||||||
|
# Attempt to generate self-signed certificates if the certificate files
|
||||||
|
# specified above are missing or invalid. This should *never* be set to 'true'
|
||||||
|
# for any environment where security is important (including but not limited to
|
||||||
|
# production systems)
|
||||||
|
generate-certs-if-absent = false
|
||||||
|
# A CSV list of hostnames to generate the above certs for
|
||||||
|
generate-certs-hosts = localhost,127.0.0.1
|
42
internal/config/testdata/sqlite_https_config.ini
vendored
Normal file
42
internal/config/testdata/sqlite_https_config.ini
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[moneygo]
|
||||||
|
|
||||||
|
# Whether to serve as FastCGI (default is false, for HTTPS)
|
||||||
|
fcgi = false
|
||||||
|
|
||||||
|
# Port on which to serve HTTPS or FCGI
|
||||||
|
port = 8443
|
||||||
|
|
||||||
|
# Base directory for serving files out of. This should point to the root of the
|
||||||
|
# moneygo source directory
|
||||||
|
base-directory = src/github.com/aclindsa/moneygo/
|
||||||
|
|
||||||
|
# Type of database being used (sqlite3, mysql, postgres)
|
||||||
|
db-type = sqlite3
|
||||||
|
|
||||||
|
# 'Data Source Name' for the database being used. This is driver-specific. See
|
||||||
|
# the following examples and external resources for more information about
|
||||||
|
# configuring this for your particular database configuration:
|
||||||
|
#
|
||||||
|
# Sqlite example DSN: "file:moneygo.sqlite?cache=shared&mode=rwc"
|
||||||
|
# MySQL documentation: https://github.com/go-sql-driver/mysql/#dsn-data-source-name
|
||||||
|
# example DSN: "user:password@tcp(localhost)/dbname&parseTime=true"
|
||||||
|
# (Note: MySQL DSN's *must* include the
|
||||||
|
# "parseTime=true" parameter)
|
||||||
|
# Postgres documentation: https://godoc.org/github.com/lib/pq
|
||||||
|
# example DSN: "postgres://user:password@localhost/dbname"
|
||||||
|
db-dsn = file:moneygo.sqlite?cache=shared&mode=rwc
|
||||||
|
|
||||||
|
|
||||||
|
[https]
|
||||||
|
# If 'fcgi = false', the following paths to a SSL certificate and the paired
|
||||||
|
# private key are used when serving HTTPS
|
||||||
|
cert-file = ./cert.pem
|
||||||
|
key-file = ./key.pem
|
||||||
|
|
||||||
|
# Attempt to generate self-signed certificates if the certificate files
|
||||||
|
# specified above are missing or invalid. This should *never* be set to 'true'
|
||||||
|
# for any environment where security is important (including but not limited to
|
||||||
|
# production systems)
|
||||||
|
generate-certs-if-absent = false
|
||||||
|
# A CSV list of hostnames to generate the above certs for
|
||||||
|
generate-certs-hosts = localhost,127.0.0.1
|
Loading…
Reference in New Issue
Block a user