130 lines
3.2 KiB
Go
130 lines
3.2 KiB
Go
|
package jolokia2
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
)
|
||
|
|
||
|
func TestJolokia2_ClientAuthRequest(t *testing.T) {
|
||
|
var username string
|
||
|
var password string
|
||
|
var requests []map[string]interface{}
|
||
|
|
||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
username, password, _ = r.BasicAuth()
|
||
|
|
||
|
body, _ := ioutil.ReadAll(r.Body)
|
||
|
err := json.Unmarshal(body, &requests)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
|
||
|
w.WriteHeader(http.StatusOK)
|
||
|
}))
|
||
|
defer server.Close()
|
||
|
|
||
|
plugin := setupPlugin(t, fmt.Sprintf(`
|
||
|
[jolokia2_agent]
|
||
|
urls = ["%s/jolokia"]
|
||
|
username = "sally"
|
||
|
password = "seashore"
|
||
|
[[jolokia2_agent.metric]]
|
||
|
name = "hello"
|
||
|
mbean = "hello:foo=bar"
|
||
|
`, server.URL))
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
plugin.Gather(&acc)
|
||
|
|
||
|
if username != "sally" {
|
||
|
t.Errorf("Expected to post with username %s, but was %s", "sally", username)
|
||
|
}
|
||
|
if password != "seashore" {
|
||
|
t.Errorf("Expected to post with password %s, but was %s", "seashore", password)
|
||
|
}
|
||
|
if len(requests) == 0 {
|
||
|
t.Fatal("Expected to post a request body, but was empty.")
|
||
|
}
|
||
|
|
||
|
request := requests[0]
|
||
|
if expect := "hello:foo=bar"; request["mbean"] != expect {
|
||
|
t.Errorf("Expected to query mbean %s, but was %s", expect, request["mbean"])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestJolokia2_ClientProxyAuthRequest(t *testing.T) {
|
||
|
var requests []map[string]interface{}
|
||
|
|
||
|
var username string
|
||
|
var password string
|
||
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
username, password, _ = r.BasicAuth()
|
||
|
|
||
|
body, _ := ioutil.ReadAll(r.Body)
|
||
|
err := json.Unmarshal(body, &requests)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
}
|
||
|
|
||
|
w.WriteHeader(http.StatusOK)
|
||
|
}))
|
||
|
defer server.Close()
|
||
|
|
||
|
plugin := setupPlugin(t, fmt.Sprintf(`
|
||
|
[jolokia2_proxy]
|
||
|
url = "%s/jolokia"
|
||
|
username = "sally"
|
||
|
password = "seashore"
|
||
|
|
||
|
[[jolokia2_proxy.target]]
|
||
|
url = "service:jmx:rmi:///jndi/rmi://target:9010/jmxrmi"
|
||
|
username = "jack"
|
||
|
password = "benimble"
|
||
|
|
||
|
[[jolokia2_proxy.metric]]
|
||
|
name = "hello"
|
||
|
mbean = "hello:foo=bar"
|
||
|
`, server.URL))
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
plugin.Gather(&acc)
|
||
|
|
||
|
if username != "sally" {
|
||
|
t.Errorf("Expected to post with username %s, but was %s", "sally", username)
|
||
|
}
|
||
|
if password != "seashore" {
|
||
|
t.Errorf("Expected to post with password %s, but was %s", "seashore", password)
|
||
|
}
|
||
|
if len(requests) == 0 {
|
||
|
t.Fatal("Expected to post a request body, but was empty.")
|
||
|
}
|
||
|
|
||
|
request := requests[0]
|
||
|
if expect := "hello:foo=bar"; request["mbean"] != expect {
|
||
|
t.Errorf("Expected to query mbean %s, but was %s", expect, request["mbean"])
|
||
|
}
|
||
|
|
||
|
target, ok := request["target"].(map[string]interface{})
|
||
|
if !ok {
|
||
|
t.Fatal("Expected a proxy target, but was empty.")
|
||
|
}
|
||
|
|
||
|
if expect := "service:jmx:rmi:///jndi/rmi://target:9010/jmxrmi"; target["url"] != expect {
|
||
|
t.Errorf("Expected proxy target url %s, but was %s", expect, target["url"])
|
||
|
}
|
||
|
|
||
|
if expect := "jack"; target["user"] != expect {
|
||
|
t.Errorf("Expected proxy target username %s, but was %s", expect, target["user"])
|
||
|
}
|
||
|
|
||
|
if expect := "benimble"; target["password"] != expect {
|
||
|
t.Errorf("Expected proxy target password %s, but was %s", expect, target["password"])
|
||
|
}
|
||
|
}
|