mirror of
https://github.com/eko/pihole-exporter.git
synced 2025-02-16 00:21:34 +01:00
parent 8d5586558c
author Galorhallen <andrea.ponte1987@gmail.com> 1640558190 +0100
committer Galorhallen <andrea.ponte1987@gmail.com> 1640821760 +0100
Add test for multiple pihole
Add async mode for multiple piholes
Fixed GitHub Actions go versions
Add test for multiple pihole
Cleanup
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)
|
|
}
|