diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:18 +0000 |
commit | 5da14042f70711ea5cf66e034699730335462f66 (patch) | |
tree | 0f6354ccac934ed87a2d555f45be4c831cf92f4a /src/go/collectors/go.d.plugin/modules/activemq/activemq_test.go | |
parent | Releasing debian version 1.44.3-2. (diff) | |
download | netdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz netdata-5da14042f70711ea5cf66e034699730335462f66.zip |
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/activemq/activemq_test.go | 340 |
1 files changed, 340 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/activemq/activemq_test.go b/src/go/collectors/go.d.plugin/modules/activemq/activemq_test.go new file mode 100644 index 000000000..19f28fee4 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/activemq/activemq_test.go @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package activemq + +import ( + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/netdata/netdata/go/go.d.plugin/agent/module" + "github.com/netdata/netdata/go/go.d.plugin/pkg/web" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var ( + dataConfigJSON, _ = os.ReadFile("testdata/config.json") + dataConfigYAML, _ = os.ReadFile("testdata/config.yaml") +) + +func Test_testDataIsValid(t *testing.T) { + for name, data := range map[string][]byte{ + "dataConfigJSON": dataConfigJSON, + "dataConfigYAML": dataConfigYAML, + } { + require.NotNil(t, data, name) + + } +} + +func TestActiveMQ_ConfigurationSerialize(t *testing.T) { + module.TestConfigurationSerialize(t, &ActiveMQ{}, dataConfigJSON, dataConfigYAML) +} + +var ( + queuesData = []string{ + `<queues> +<queue name="sandra"> +<stats size="1" consumerCount="1" enqueueCount="2" dequeueCount="1"/> +<feed> +<atom>queueBrowse/sandra?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/sandra?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +<queue name="Test"> +<stats size="1" consumerCount="1" enqueueCount="2" dequeueCount="1"/> +<feed> +<atom>queueBrowse/Test?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/Test?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +</queues>`, + `<queues> +<queue name="sandra"> +<stats size="2" consumerCount="2" enqueueCount="3" dequeueCount="2"/> +<feed> +<atom>queueBrowse/sandra?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/sandra?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +<queue name="Test"> +<stats size="2" consumerCount="2" enqueueCount="3" dequeueCount="2"/> +<feed> +<atom>queueBrowse/Test?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/Test?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +<queue name="Test2"> +<stats size="0" consumerCount="0" enqueueCount="0" dequeueCount="0"/> +<feed> +<atom>queueBrowse/Test?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/Test?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +</queues>`, + `<queues> +<queue name="sandra"> +<stats size="3" consumerCount="3" enqueueCount="4" dequeueCount="3"/> +<feed> +<atom>queueBrowse/sandra?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/sandra?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +<queue name="Test"> +<stats size="3" consumerCount="3" enqueueCount="4" dequeueCount="3"/> +<feed> +<atom>queueBrowse/Test?view=rss&feedType=atom_1.0</atom> +<rss>queueBrowse/Test?view=rss&feedType=rss_2.0</rss> +</feed> +</queue> +</queues>`, + } + + topicsData = []string{ + `<topics> +<topic name="ActiveMQ.Advisory.MasterBroker "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="AAA "> +<stats size="1" consumerCount="1" enqueueCount="2" dequeueCount="1"/> +</topic> +<topic name="ActiveMQ.Advisory.Topic "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="ActiveMQ.Advisory.Queue "> +<stats size="0" consumerCount="0" enqueueCount="2" dequeueCount="0"/> +</topic> +<topic name="AAAA "> +<stats size="1" consumerCount="1" enqueueCount="2" dequeueCount="1"/> +</topic> +</topics>`, + `<topics> +<topic name="ActiveMQ.Advisory.MasterBroker "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="AAA "> +<stats size="2" consumerCount="2" enqueueCount="3" dequeueCount="2"/> +</topic> +<topic name="ActiveMQ.Advisory.Topic "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="ActiveMQ.Advisory.Queue "> +<stats size="0" consumerCount="0" enqueueCount="2" dequeueCount="0"/> +</topic> +<topic name="AAAA "> +<stats size="2" consumerCount="2" enqueueCount="3" dequeueCount="2"/> +</topic> +<topic name="BBB "> +<stats size="1" consumerCount="1" enqueueCount="2" dequeueCount="1"/> +</topic> +</topics>`, + `<topics> +<topic name="ActiveMQ.Advisory.MasterBroker "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="AAA "> +<stats size="3" consumerCount="3" enqueueCount="4" dequeueCount="3"/> +</topic> +<topic name="ActiveMQ.Advisory.Topic "> +<stats size="0" consumerCount="0" enqueueCount="1" dequeueCount="0"/> +</topic> +<topic name="ActiveMQ.Advisory.Queue "> +<stats size="0" consumerCount="0" enqueueCount="2" dequeueCount="0"/> +</topic> +<topic name="AAAA "> +<stats size="3" consumerCount="3" enqueueCount="4" dequeueCount="3"/> +</topic> +</topics>`, + } +) + +func TestActiveMQ_Init(t *testing.T) { + job := New() + + // NG case + job.Webadmin = "" + assert.Error(t, job.Init()) + + // OK case + job.Webadmin = "webadmin" + assert.NoError(t, job.Init()) + assert.NotNil(t, job.apiClient) +} + +func TestActiveMQ_Check(t *testing.T) { + ts := httptest.NewServer( + http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/webadmin/xml/queues.jsp": + _, _ = w.Write([]byte(queuesData[0])) + case "/webadmin/xml/topics.jsp": + _, _ = w.Write([]byte(topicsData[0])) + } + })) + defer ts.Close() + + job := New() + job.HTTP.Request = web.Request{URL: ts.URL} + job.Webadmin = "webadmin" + + require.NoError(t, job.Init()) + require.NoError(t, job.Check()) +} + +func TestActiveMQ_Charts(t *testing.T) { + assert.NotNil(t, New().Charts()) +} + +func TestActiveMQ_Cleanup(t *testing.T) { + New().Cleanup() +} + +func TestActiveMQ_Collect(t *testing.T) { + var collectNum int + getQueues := func() string { return queuesData[collectNum] } + getTopics := func() string { return topicsData[collectNum] } + + ts := httptest.NewServer( + http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/webadmin/xml/queues.jsp": + _, _ = w.Write([]byte(getQueues())) + case "/webadmin/xml/topics.jsp": + _, _ = w.Write([]byte(getTopics())) + } + })) + defer ts.Close() + + job := New() + job.HTTP.Request = web.Request{URL: ts.URL} + job.Webadmin = "webadmin" + + require.NoError(t, job.Init()) + require.NoError(t, job.Check()) + + cases := []struct { + expected map[string]int64 + numQueues int + numTopics int + numCharts int + }{ + { + expected: map[string]int64{ + "queues_sandra_consumers": 1, + "queues_sandra_dequeued": 1, + "queues_Test_enqueued": 2, + "queues_Test_unprocessed": 1, + "topics_AAA_dequeued": 1, + "topics_AAAA_unprocessed": 1, + "queues_Test_dequeued": 1, + "topics_AAA_enqueued": 2, + "topics_AAA_unprocessed": 1, + "topics_AAAA_consumers": 1, + "topics_AAAA_dequeued": 1, + "queues_Test_consumers": 1, + "queues_sandra_enqueued": 2, + "queues_sandra_unprocessed": 1, + "topics_AAA_consumers": 1, + "topics_AAAA_enqueued": 2, + }, + numQueues: 2, + numTopics: 2, + numCharts: 12, + }, + { + expected: map[string]int64{ + "queues_sandra_enqueued": 3, + "queues_Test_enqueued": 3, + "queues_Test_unprocessed": 1, + "queues_Test2_dequeued": 0, + "topics_BBB_enqueued": 2, + "queues_sandra_dequeued": 2, + "queues_sandra_unprocessed": 1, + "queues_Test2_enqueued": 0, + "topics_AAAA_enqueued": 3, + "topics_AAAA_dequeued": 2, + "topics_BBB_unprocessed": 1, + "topics_AAA_dequeued": 2, + "topics_AAAA_unprocessed": 1, + "queues_Test_consumers": 2, + "queues_Test_dequeued": 2, + "queues_Test2_consumers": 0, + "queues_Test2_unprocessed": 0, + "topics_AAA_consumers": 2, + "topics_AAA_enqueued": 3, + "topics_BBB_dequeued": 1, + "queues_sandra_consumers": 2, + "topics_AAA_unprocessed": 1, + "topics_AAAA_consumers": 2, + "topics_BBB_consumers": 1, + }, + numQueues: 3, + numTopics: 3, + numCharts: 18, + }, + { + expected: map[string]int64{ + "queues_sandra_unprocessed": 1, + "queues_Test_unprocessed": 1, + "queues_sandra_consumers": 3, + "topics_AAAA_enqueued": 4, + "queues_sandra_dequeued": 3, + "queues_Test_consumers": 3, + "queues_Test_enqueued": 4, + "queues_Test_dequeued": 3, + "topics_AAA_consumers": 3, + "topics_AAA_unprocessed": 1, + "topics_AAAA_consumers": 3, + "topics_AAAA_unprocessed": 1, + "queues_sandra_enqueued": 4, + "topics_AAA_enqueued": 4, + "topics_AAA_dequeued": 3, + "topics_AAAA_dequeued": 3, + }, + numQueues: 2, + numTopics: 2, + numCharts: 18, + }, + } + + for _, c := range cases { + require.Equal(t, c.expected, job.Collect()) + assert.Len(t, job.activeQueues, c.numQueues) + assert.Len(t, job.activeTopics, c.numTopics) + assert.Len(t, *job.charts, c.numCharts) + collectNum++ + } +} + +func TestActiveMQ_404(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(404) + })) + defer ts.Close() + + job := New() + job.Webadmin = "webadmin" + job.HTTP.Request = web.Request{URL: ts.URL} + + require.NoError(t, job.Init()) + assert.Error(t, job.Check()) +} + +func TestActiveMQ_InvalidData(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write([]byte("hello and goodbye!")) + })) + defer ts.Close() + + mod := New() + mod.Webadmin = "webadmin" + mod.HTTP.Request = web.Request{URL: ts.URL} + + require.NoError(t, mod.Init()) + assert.Error(t, mod.Check()) +} |