package server
import (
"fmt"
"net/http"
"net/http/httptest"
"reflect"
"strings"
"testing"
)
func TestParseHtml(t1 *testing.T) {
var tests = []struct {
html string
plugins []string
arch string
error string
}{
{
html: `
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`,
arch: "arm64",
plugins: []string{"file", "influx"},
error: "",
},
{
html: `
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`,
arch: "arm7",
plugins: []string{},
error: "",
},
{
html: `
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`,
arch: "amd64",
plugins: []string{"file"},
error: "",
},
{
html: `
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`,
arch: "amd64",
plugins: []string{},
error: "",
},
{
html: ``,
arch: "amd64",
plugins: []string{},
error: "",
},
}
fmt.Printf("The test bucket size is %d.\n\n", len(tests))
for i, t := range tests {
result := extractFromHtml(t.html, t.arch)
if t.error == "" && !reflect.DeepEqual(t.plugins, result) {
t1.Errorf("%d. %q\n\nresult mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, t.html, t.plugins, result)
}
}
}
func TestFetchPluginList(t1 *testing.T) {
version = "0.9.1"
// Start a local HTTP server
server1 := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
// Send response to be tested
if _, err := rw.Write([]byte(`
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`)); err != nil {
fmt.Printf("%s", err)
}
}))
server2 := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
// Send response to be tested
if _, err := rw.Write([]byte(`
Directory listing for enterprise: /4.1.1/
Directory listing for enterprise: /4.1.1/
`)); err != nil {
fmt.Printf("%s", err)
}
}))
// Close the server when test finishes
defer server2.Close()
if e, r := fetchPluginList(strings.Join([]string{server1.URL, server2.URL}, ","), "sinks", "alpine", "arm64"); e != nil {
t1.Errorf("Error: %v", e)
} else {
exp := map[string]string{
"file": server1.URL + "/kuiper-plugins/" + version + "/alpine/sinks/file_arm64.zip",
"influx": server1.URL + "/kuiper-plugins/" + version + "/alpine/sinks/influx_arm64.zip",
"zmq": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/zmq_arm64.zip",
}
if !reflect.DeepEqual(exp, r) {
t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
}
}
if e, r := fetchPluginList(strings.Join([]string{server2.URL}, ","), "sinks", "alpine", "arm64"); e != nil {
t1.Errorf("Error: %v", e)
} else {
exp := map[string]string{
"zmq": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/zmq_arm64.zip",
"file": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/file_arm64.zip",
}
if !reflect.DeepEqual(exp, r) {
t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
}
}
if e, r := fetchPluginList(strings.Join([]string{server1.URL, server2.URL}, ","), "sinks", "alpine", "armv7"); e != nil {
t1.Errorf("Error: %v", e)
} else {
exp := map[string]string{}
if !reflect.DeepEqual(exp, r) {
t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
}
}
}