Skip to content

Commit db95a46

Browse files
committed
Add more unit tests
1 parent 6584f87 commit db95a46

File tree

6 files changed

+166
-79
lines changed

6 files changed

+166
-79
lines changed

backend/internal/cache/cache.go

Lines changed: 0 additions & 51 deletions
This file was deleted.

backend/internal/config/acmesh.go

Lines changed: 0 additions & 16 deletions
This file was deleted.

backend/internal/config/config.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,23 @@ func Init(version, commit *string) {
1818
fmt.Printf("%+v\n", err)
1919
}
2020

21-
initLogger()
21+
if err := initLogger(); err != nil {
22+
logger.Error("LoggerConfigurationError", err)
23+
}
2224
}
2325

2426
// InitIPRanges will initialise the config for the ipranges command
2527
func InitIPRanges(version, commit *string) error {
2628
Version = *version
2729
Commit = *commit
2830
err := envconfig.InitWithPrefix(&Configuration, "NPM")
31+
// nolint: errcheck, gosec
2932
initLogger()
3033
return err
3134
}
3235

3336
// Init initialises the Log object and return it
34-
func initLogger() {
37+
func initLogger() error {
3538
// this removes timestamp prefixes from logs
3639
golog.SetFlags(0)
3740

@@ -46,14 +49,10 @@ func initLogger() {
4649
logLevel = logger.InfoLevel
4750
}
4851

49-
err := logger.Configure(&logger.Config{
52+
return logger.Configure(&logger.Config{
5053
LogThreshold: logLevel,
5154
Formatter: Configuration.Log.Format,
5255
})
53-
54-
if err != nil {
55-
logger.Error("LoggerConfigurationError", err)
56-
}
5756
}
5857

5958
// GetLogLevel returns the logger const level
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package config
2+
3+
import (
4+
"npm/internal/logger"
5+
"os"
6+
"strings"
7+
"testing"
8+
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestInit(t *testing.T) {
13+
t.Setenv("NPM_DATA_FOLDER", "/path/to/some/data/folder")
14+
t.Setenv("NPM_LOG_LEVEL", "warn")
15+
t.Setenv("NPM_DB_DRIVER", "postgres")
16+
t.Setenv("NPM_DB_HOST", "1.1.1.1")
17+
t.Setenv("NPM_DB_PORT", "5432")
18+
t.Setenv("NPM_DB_USERNAME", "rootuser")
19+
t.Setenv("NPM_DB_PASSWORD", "4metoremember")
20+
t.Setenv("NPM_DB_NAME", "npm")
21+
t.Setenv("NPM_DISABLE_IPV4", "false")
22+
t.Setenv("NPM_DISABLE_IPV6", "true")
23+
24+
version := "999.999.999"
25+
commit := "abcd123"
26+
Init(&version, &commit)
27+
err := InitIPRanges(&version, &commit)
28+
assert.Nil(t, err)
29+
30+
assert.Equal(t, "/path/to/some/data/folder", Configuration.DataFolder)
31+
assert.Equal(t, false, Configuration.DisableIPV4)
32+
assert.Equal(t, true, Configuration.DisableIPV6)
33+
assert.Equal(t, "/data/.acme.sh", Configuration.Acmesh.Home)
34+
assert.Equal(t, "disable", Configuration.DB.SSLMode)
35+
assert.Equal(t, logger.WarnLevel, logger.GetLogLevel())
36+
37+
assert.Equal(t, "postgres", Configuration.DB.Driver)
38+
assert.Equal(t, "1.1.1.1", Configuration.DB.Host)
39+
assert.Equal(t, 5432, Configuration.DB.Port)
40+
assert.Equal(t, "rootuser", Configuration.DB.Username)
41+
assert.Equal(t, "4metoremember", Configuration.DB.Password)
42+
assert.Equal(t, "npm", Configuration.DB.Name)
43+
assert.Equal(t, "postgres", Configuration.DB.GetDriver())
44+
}
45+
46+
func TestConnectURLs(t *testing.T) {
47+
type want struct {
48+
gorm string
49+
dbmate string
50+
}
51+
52+
tests := []struct {
53+
name string
54+
envs []string
55+
want want
56+
}{
57+
{
58+
name: "sqlite",
59+
envs: []string{
60+
"NPM_DB_DRIVER=sqlite",
61+
"NPM_DATA_FOLDER=/path/to/data",
62+
},
63+
want: want{
64+
gorm: "/path/to/data/nginxproxymanager.db",
65+
dbmate: "sqlite:/path/to/data/nginxproxymanager.db",
66+
},
67+
},
68+
{
69+
name: "postgres",
70+
envs: []string{
71+
"NPM_DB_DRIVER=postgres",
72+
"NPM_DB_HOST=2.2.2.2",
73+
"NPM_DB_PORT=9824",
74+
"NPM_DB_USERNAME=postgresuser",
75+
"NPM_DB_PASSWORD=pgpass",
76+
"NPM_DB_SSLMODE=strict",
77+
"NPM_DB_NAME=npm",
78+
},
79+
want: want{
80+
gorm: "host=2.2.2.2 user=postgresuser password=pgpass dbname=npm port=9824 sslmode=strict TimeZone=UTC",
81+
dbmate: "postgres://postgresuser:[email protected]:9824/npm?sslmode=strict",
82+
},
83+
},
84+
{
85+
name: "mysql",
86+
envs: []string{
87+
"NPM_DB_DRIVER=mysql",
88+
"NPM_DB_HOST=3.3.3.3",
89+
"NPM_DB_PORT=3307",
90+
"NPM_DB_USERNAME=mysqluser",
91+
"NPM_DB_PASSWORD=mypass",
92+
"NPM_DB_NAME=npm",
93+
},
94+
want: want{
95+
gorm: "mysqluser:mypass@tcp(3.3.3.3:3307)/npm?charset=utf8mb4&parseTime=True&loc=Local",
96+
dbmate: "mysql://mysqluser:[email protected]:3307/npm",
97+
},
98+
},
99+
}
100+
101+
version := "999.999.999"
102+
commit := "abcd123"
103+
104+
for _, tt := range tests {
105+
t.Run(tt.name, func(t *testing.T) {
106+
for _, env := range tt.envs {
107+
parts := strings.Split(env, "=")
108+
if len(parts) == 2 {
109+
t.Setenv(parts[0], parts[1])
110+
}
111+
}
112+
Init(&version, &commit)
113+
assert.Equal(t, tt.want.gorm, Configuration.DB.GetGormConnectURL())
114+
assert.Equal(t, tt.want.dbmate, Configuration.DB.GetDBMateConnectURL())
115+
})
116+
}
117+
}
118+
119+
func TestCreateDataFolders(t *testing.T) {
120+
t.Setenv("NPM_DATA_FOLDER", "/tmp/npmtest")
121+
122+
version := "999.999.999"
123+
commit := "abcd123"
124+
Init(&version, &commit)
125+
CreateDataFolders()
126+
127+
_, err := os.Stat("/tmp/npmtest/nginx/hosts")
128+
assert.Nil(t, err)
129+
}

backend/internal/config/vars.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package config
22

33
import (
4+
"fmt"
45
"npm/internal/logger"
56
)
67

@@ -15,11 +16,6 @@ var IsSetup bool
1516

1617
var logLevel logger.Level
1718

18-
type log struct {
19-
Level string `json:"level" envconfig:"optional,default=info"`
20-
Format string `json:"format" envconfig:"optional,default=nice"`
21-
}
22-
2319
// Configuration is the main configuration object
2420
var Configuration struct {
2521
DataFolder string `json:"data_folder" envconfig:"optional,default=/data"`
@@ -29,3 +25,19 @@ var Configuration struct {
2925
DB db `json:"db"`
3026
Log log `json:"log"`
3127
}
28+
29+
type log struct {
30+
Level string `json:"level" envconfig:"optional,default=info"`
31+
Format string `json:"format" envconfig:"optional,default=nice"`
32+
}
33+
34+
type acmesh struct {
35+
Home string `json:"home" envconfig:"optional,default=/data/.acme.sh"`
36+
ConfigHome string `json:"config_home" envconfig:"optional,default=/data/.acme.sh/config"`
37+
CertHome string `json:"cert_home" envconfig:"optional,default=/data/.acme.sh/certs"`
38+
}
39+
40+
// GetWellknown returns the well known path
41+
func (a *acmesh) GetWellknown() string {
42+
return fmt.Sprintf("%s/.well-known", a.Home)
43+
}

backend/internal/config/vars_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package config
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestAcmeshGetWellknown(t *testing.T) {
10+
a := acmesh{
11+
Home: "/data/.acme.sh",
12+
}
13+
assert.Equal(t, "/data/.acme.sh/.well-known", a.GetWellknown())
14+
}

0 commit comments

Comments
 (0)