mirror of
https://github.com/eko/pihole-exporter.git
synced 2024-11-28 12:16:18 +01:00
155 lines
3.6 KiB
Go
155 lines
3.6 KiB
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
PIHOLE_HOSTNAME = "PIHOLE_HOSTNAME"
|
||
|
PIHOLE_PORT = "PIHOLE_PORT"
|
||
|
PIHOLE_API_TOKEN = "PIHOLE_API_TOKEN"
|
||
|
PIHOLE_PROTOCOL = "PIHOLE_PROTOCOL"
|
||
|
)
|
||
|
|
||
|
type EnvInitiazlier func(*testing.T)
|
||
|
|
||
|
type TestCase struct {
|
||
|
Name string
|
||
|
Initializer EnvInitiazlier
|
||
|
}
|
||
|
|
||
|
func TestSplitDefault(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
env := getDefaultEnvConfig()
|
||
|
|
||
|
clientConfigs, err := env.Split()
|
||
|
assert.NoError(err)
|
||
|
|
||
|
clientConfig := clientConfigs[0]
|
||
|
assert.Equal("127.0.0.1", clientConfig.PIHoleHostname)
|
||
|
assert.Equal("http", clientConfig.PIHoleProtocol)
|
||
|
assert.Equal(uint16(80), clientConfig.PIHolePort)
|
||
|
assert.Empty(clientConfig.PIHoleApiToken)
|
||
|
assert.Empty(clientConfig.PIHolePassword)
|
||
|
}
|
||
|
|
||
|
func TestSplitMultipleHostWithSameConfig(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
env := getDefaultEnvConfig()
|
||
|
env.PIHoleHostname = []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}
|
||
|
env.PIHoleApiToken = []string{"api-token"}
|
||
|
env.PIHolePort = []uint16{8080}
|
||
|
|
||
|
clientConfigs, err := env.Split()
|
||
|
assert.NoError(err)
|
||
|
assert.Len(clientConfigs, 3)
|
||
|
|
||
|
testCases := []struct {
|
||
|
Host string
|
||
|
Port uint16
|
||
|
Protocol string
|
||
|
}{
|
||
|
{
|
||
|
Host: "127.0.0.1",
|
||
|
Port: 8080,
|
||
|
Protocol: "http",
|
||
|
},
|
||
|
{
|
||
|
Host: "127.0.0.2",
|
||
|
Port: 8080,
|
||
|
Protocol: "http",
|
||
|
},
|
||
|
{
|
||
|
Host: "127.0.0.3",
|
||
|
Port: 8080,
|
||
|
Protocol: "http",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for i, tc := range testCases {
|
||
|
t.Run(fmt.Sprintf("Test %s", tc.Host), func(t *testing.T) {
|
||
|
clientConfig := clientConfigs[i]
|
||
|
|
||
|
assert.Equal(tc.Host, clientConfig.PIHoleHostname)
|
||
|
assert.Equal(tc.Protocol, clientConfig.PIHoleProtocol)
|
||
|
assert.Equal(tc.Port, clientConfig.PIHolePort)
|
||
|
assert.Equal("api-token", clientConfig.PIHoleApiToken)
|
||
|
assert.Empty(clientConfig.PIHolePassword)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestSplitMultipleHostWithMultipleConfigs(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
env := getDefaultEnvConfig()
|
||
|
env.PIHoleHostname = []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}
|
||
|
env.PIHoleApiToken = []string{"api-token1", "", "api-token3"}
|
||
|
env.PIHolePassword = []string{"", "password2", ""}
|
||
|
env.PIHolePort = []uint16{8081, 8082, 8083}
|
||
|
|
||
|
clientConfigs, err := env.Split()
|
||
|
assert.NoError(err)
|
||
|
assert.Len(clientConfigs, 3)
|
||
|
|
||
|
testCases := []struct {
|
||
|
Host string
|
||
|
Port uint16
|
||
|
Protocol string
|
||
|
ApiToken string
|
||
|
Password string
|
||
|
}{
|
||
|
{
|
||
|
Host: "127.0.0.1",
|
||
|
Port: 8081,
|
||
|
Protocol: "http",
|
||
|
ApiToken: "api-token1",
|
||
|
Password: "",
|
||
|
},
|
||
|
{
|
||
|
Host: "127.0.0.2",
|
||
|
Port: 8082,
|
||
|
Protocol: "http",
|
||
|
ApiToken: "",
|
||
|
Password: "password2",
|
||
|
},
|
||
|
{
|
||
|
Host: "127.0.0.3",
|
||
|
Port: 8083,
|
||
|
Protocol: "http",
|
||
|
ApiToken: "api-token3",
|
||
|
Password: "",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for i, tc := range testCases {
|
||
|
t.Run(fmt.Sprintf("Test %s", tc.Host), func(t *testing.T) {
|
||
|
clientConfig := clientConfigs[i]
|
||
|
|
||
|
assert.Equal(tc.Host, clientConfig.PIHoleHostname)
|
||
|
assert.Equal(tc.Protocol, clientConfig.PIHoleProtocol)
|
||
|
assert.Equal(tc.Port, clientConfig.PIHolePort)
|
||
|
assert.Equal(tc.ApiToken, clientConfig.PIHoleApiToken)
|
||
|
assert.Equal(tc.Password, clientConfig.PIHolePassword)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestWrongParams(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
env := getDefaultEnvConfig()
|
||
|
env.PIHoleHostname = []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}
|
||
|
env.PIHoleApiToken = []string{"api-token1", "api-token2"}
|
||
|
env.PIHolePort = []uint16{808}
|
||
|
|
||
|
clientConfigs, err := env.Split()
|
||
|
assert.Errorf(err, "Wrong number of PIHoleApiToken. PIHoleApiToken can be empty to use default, one value to use for all hosts, or match the number of hosts")
|
||
|
assert.Nil(clientConfigs)
|
||
|
}
|