cmd: accept URL as a configuration file

This commit is contained in:
Vincent Bernat
2022-04-10 15:14:13 +02:00
parent 59b75fd3a6
commit 56e30e478a
2 changed files with 124 additions and 21 deletions

View File

@@ -2,9 +2,13 @@ package cmd_test
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strings"
"testing"
"time"
@@ -40,21 +44,23 @@ type dummyModule2DetailsConfiguration struct {
IntervalValue time.Duration
}
var dummyDefaultConfiguration = dummyConfiguration{
Module1: dummyModule1Configuration{
Listen: "127.0.0.1:8080",
Topic: "nothingness",
Workers: 100,
},
Module2: dummyModule2Configuration{
MoreDetails: MoreDetails{
Stuff: "hello",
func dummyDefaultConfiguration() dummyConfiguration {
return dummyConfiguration{
Module1: dummyModule1Configuration{
Listen: "127.0.0.1:8080",
Topic: "nothingness",
Workers: 100,
},
Details: dummyModule2DetailsConfiguration{
Workers: 1,
IntervalValue: time.Minute,
Module2: dummyModule2Configuration{
MoreDetails: MoreDetails{
Stuff: "hello",
},
Details: dummyModule2DetailsConfiguration{
Workers: 1,
IntervalValue: time.Minute,
},
},
},
}
}
func TestDump(t *testing.T) {
@@ -80,7 +86,7 @@ module2:
Dump: true,
}
parsed := dummyDefaultConfiguration
parsed := dummyDefaultConfiguration()
out := bytes.NewBuffer([]byte{})
if err := c.Parse(out, "dummy", &parsed); err != nil {
t.Fatalf("Parse() error:\n%+v", err)
@@ -157,6 +163,15 @@ module2:
ioutil.WriteFile(configFile, []byte(config), 0644)
// Environment
clean := func() {
for _, env := range os.Environ() {
if strings.HasPrefix(env, "AKVORADO_DUMMY_") {
os.Unsetenv(strings.Split(env, "=")[0])
}
}
}
clean()
defer clean()
os.Setenv("AKVORADO_DUMMY_MODULE1_LISTEN", "127.0.0.1:9000")
os.Setenv("AKVORADO_DUMMY_MODULE1_TOPIC", "something")
os.Setenv("AKVORADO_DUMMY_MODULE2_DETAILS_INTERVALVALUE", "10m")
@@ -171,7 +186,7 @@ module2:
Dump: true,
}
parsed := dummyDefaultConfiguration
parsed := dummyDefaultConfiguration()
out := bytes.NewBuffer([]byte{})
if err := c.Parse(out, "dummy", &parsed); err != nil {
t.Fatalf("Parse() error:\n%+v", err)
@@ -201,3 +216,63 @@ module2:
t.Errorf("Parse() (-got, +want):\n%s", diff)
}
}
func TestHTTPConfiguration(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
fmt.Fprint(w, `
{
"module1": {
"topic": "flows"
},
"module2": {
"details": {
"workers": 5,
"interval-value": "20m"
},
"stuff": "bye",
"elements": [
{"name": "first", "gauge": 67},
{"name": "second"}
]
}
}
`)
}))
defer ts.Close()
c := cmd.ConfigRelatedOptions{
Path: ts.URL,
Dump: true,
}
parsed := dummyDefaultConfiguration()
out := bytes.NewBuffer([]byte{})
if err := c.Parse(out, "dummy", &parsed); err != nil {
t.Fatalf("Parse() error:\n%+v", err)
}
// Expected configuration
expected := dummyConfiguration{
Module1: dummyModule1Configuration{
Listen: "127.0.0.1:8080",
Topic: "flows",
Workers: 100,
},
Module2: dummyModule2Configuration{
MoreDetails: MoreDetails{
Stuff: "bye",
},
Details: dummyModule2DetailsConfiguration{
Workers: 5,
IntervalValue: 20 * time.Minute,
},
Elements: []dummyModule2ElementsConfiguration{
{"first", 67},
{"second", 0},
},
},
}
if diff := helpers.Diff(parsed, expected); diff != "" {
t.Errorf("Parse() (-got, +want):\n%s", diff)
}
}