103 lines
3.3 KiB
Go
103 lines
3.3 KiB
Go
package jolokia2
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
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, _ := io.ReadAll(r.Body)
|
|
require.NoError(t, json.Unmarshal(body, &requests))
|
|
|
|
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
|
|
require.NoError(t, plugin.Gather(&acc))
|
|
|
|
require.EqualValuesf(t, "sally", username, "Expected to post with username %s, but was %s", "sally", username)
|
|
require.EqualValuesf(t, "seashore", password, "Expected to post with password %s, but was %s", "seashore", password)
|
|
require.NotZero(t, len(requests), "Expected to post a request body, but was empty.")
|
|
|
|
request := requests[0]["mbean"]
|
|
require.EqualValuesf(t, "hello:foo=bar", request, "Expected to query mbean %s, but was %s", "hello:foo=bar", request)
|
|
}
|
|
|
|
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, _ := io.ReadAll(r.Body)
|
|
require.NoError(t, json.Unmarshal(body, &requests))
|
|
w.WriteHeader(http.StatusOK)
|
|
_, err := fmt.Fprintf(w, "[]")
|
|
require.NoError(t, err)
|
|
}))
|
|
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
|
|
require.NoError(t, plugin.Gather(&acc))
|
|
require.EqualValuesf(t, "sally", username, "Expected to post with username %s, but was %s", "sally", username)
|
|
require.EqualValuesf(t, "seashore", password, "Expected to post with password %s, but was %s", "seashore", password)
|
|
require.NotZero(t, len(requests), "Expected to post a request body, but was empty.")
|
|
|
|
request := requests[0]
|
|
expected := "hello:foo=bar"
|
|
require.EqualValuesf(t, expected, request["mbean"], "Expected to query mbean %s, but was %s", expected, request["mbean"])
|
|
|
|
target, ok := request["target"].(map[string]interface{})
|
|
require.True(t, ok, "Expected a proxy target, but was empty.")
|
|
|
|
expected = "service:jmx:rmi:///jndi/rmi://target:9010/jmxrmi"
|
|
require.Equalf(t, expected, target["url"], "Expected proxy target url %s, but was %s", expected, target["url"])
|
|
expected = "jack"
|
|
require.Equalf(t, expected, target["user"], "Expected proxy target username %s, but was %s", expected, target["user"])
|
|
expected = "benimble"
|
|
require.Equalf(t, expected, target["password"], "Expected proxy target username %s, but was %s", expected, target["password"])
|
|
}
|