From 8c1b0137a71e3ebf1e2ce25dd2eab8a37c7bcce2 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Tue, 28 May 2024 11:45:20 +0200 Subject: [PATCH 01/11] add an e2e test to test the restart of the agent --- .gitlab-ci.yml | 12 ++++++ .../new-e2e/tests/ndm/snmp/config/public.yaml | 2 +- test/new-e2e/tests/ndm/snmp/snmp_test.go | 37 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f99100be8074..ab8a683b5a18 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -992,6 +992,18 @@ workflow: - when: manual allow_failure: true +.on_ndm_or_e2e_changes_or_manual: + - !reference [.on_e2e_main_release_or_rc] + - changes: + paths: + - pkg/collector/corechecks/snmp/**/* + - test/new-e2e/tests/ndm/snmp/**/* + - test/new-e2e/go.mod + compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 + when: on_success + - when: manual + allow_failure: true + .on_trace_agent_changes_or_manual: - !reference [.except_mergequeue] - changes: diff --git a/test/new-e2e/tests/ndm/snmp/config/public.yaml b/test/new-e2e/tests/ndm/snmp/config/public.yaml index ddf947f636e0..8f16017507cb 100644 --- a/test/new-e2e/tests/ndm/snmp/config/public.yaml +++ b/test/new-e2e/tests/ndm/snmp/config/public.yaml @@ -4,4 +4,4 @@ init_config: instances: - ip_address: dd-snmp port: 1161 - community_string: "public" + community_string: "cisco-nexus" diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 3917e7687d7a..62ad6ff7fa42 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -8,13 +8,17 @@ package snmp import ( "embed" + "fmt" "path" "testing" "time" + "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" + "github.com/DataDog/datadog-agent/test/fakeintake/client" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/DataDog/test-infra-definitions/components/datadog/agent" "github.com/DataDog/test-infra-definitions/components/datadog/dockeragentparams" @@ -155,3 +159,36 @@ func (s *snmpDockerSuite) TestSnmp() { assert.Contains(c, metrics, "snmp.sysUpTimeInstance", "metrics %v doesn't contain snmp.sysUpTimeInstance", metrics) }, 5*time.Minute, 10*time.Second) } + +func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { + fakeintake := s.Env().FakeIntake.Client() + initialMetrics, err := fakeintake.FilterMetrics("snmp.device.reachable", + client.WithTags[*aggregator.MetricSeries]([]string{}), + ) + initialTags := initialMetrics[0].Tags + _, err = s.Env().RemoteHost.Execute("docker stop dd-snmp") + require.NoError(s.T(), err) + + err = fakeintake.FlushServerAndResetAggregators() + require.NoError(s.T(), err) + + _, err = s.Env().RemoteHost.Execute(fmt.Sprintf("docker restart %s", s.Env().Agent.ContainerName)) + require.NoError(s.T(), err) + + err = fakeintake.FlushServerAndResetAggregators() + require.NoError(s.T(), err) + + require.EventuallyWithT(s.T(), func(t *assert.CollectT) { + metrics, err := fakeintake.FilterMetrics("snmp.device.reachable", + client.WithTags[*aggregator.MetricSeries]([]string{}), + ) + require.NoError(t, err) + assert.NotEmpty(t, metrics) + if len(metrics) == 0 { + return + } + tags := metrics[0].Tags + require.ElementsMatch(t, tags, initialTags) + require.Len(s.T(), tags, 9) + }, 5*time.Minute, 5*time.Second) +} From 344016c6897a781d5a95f79fe6f4e5093c8425a3 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Tue, 28 May 2024 13:25:47 +0200 Subject: [PATCH 02/11] change gitlab ci step name --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ab8a683b5a18..75ead15d5d1c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -992,7 +992,7 @@ workflow: - when: manual allow_failure: true -.on_ndm_or_e2e_changes_or_manual: +.on_ndm_snmp_or_e2e_changes_or_manual: - !reference [.on_e2e_main_release_or_rc] - changes: paths: From 69c9d2158aede578535c24fe7ad7c3e9efbfc0b3 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Tue, 28 May 2024 14:08:09 +0200 Subject: [PATCH 03/11] fix require and assert confusion --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 62ad6ff7fa42..3afe2e14b09c 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -165,6 +165,8 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { initialMetrics, err := fakeintake.FilterMetrics("snmp.device.reachable", client.WithTags[*aggregator.MetricSeries]([]string{}), ) + require.NoError(s.T(), err) + initialTags := initialMetrics[0].Tags _, err = s.Env().RemoteHost.Execute("docker stop dd-snmp") require.NoError(s.T(), err) @@ -183,11 +185,13 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { client.WithTags[*aggregator.MetricSeries]([]string{}), ) require.NoError(t, err) - assert.NotEmpty(t, metrics) - if len(metrics) == 0 { + if assert.NotEmpty(t, metrics) { return } + tags := metrics[0].Tags + + require.Zero(t, metrics[0].Points[0].Value) require.ElementsMatch(t, tags, initialTags) require.Len(s.T(), tags, 9) }, 5*time.Minute, 5*time.Second) From 2fd8dfd6aecdd24c2494b31bca3413fda7066156 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Tue, 28 May 2024 14:32:09 +0200 Subject: [PATCH 04/11] clean test --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 3afe2e14b09c..01ca874a4511 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -180,19 +180,19 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { err = fakeintake.FlushServerAndResetAggregators() require.NoError(s.T(), err) + var metrics []*aggregator.MetricSeries + require.EventuallyWithT(s.T(), func(t *assert.CollectT) { - metrics, err := fakeintake.FilterMetrics("snmp.device.reachable", + metrics, err = fakeintake.FilterMetrics("snmp.device.reachable", client.WithTags[*aggregator.MetricSeries]([]string{}), ) require.NoError(t, err) - if assert.NotEmpty(t, metrics) { - return - } + assert.NotEmpty(t, metrics) + }, 5*time.Minute, 5*time.Second) - tags := metrics[0].Tags + tags := metrics[0].Tags - require.Zero(t, metrics[0].Points[0].Value) - require.ElementsMatch(t, tags, initialTags) - require.Len(s.T(), tags, 9) - }, 5*time.Minute, 5*time.Second) + require.Zero(s.T(), metrics[0].Points[0].Value) + require.ElementsMatch(s.T(), tags, initialTags) + require.Len(s.T(), tags, 9) } From 8644d17d9379a50a336d33547956ec8ff72d27e7 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Tue, 28 May 2024 15:33:46 +0200 Subject: [PATCH 05/11] add commit in the ci --- .gitlab/e2e/e2e.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 2dcee6794fec..eac44bb43650 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -322,3 +322,12 @@ new-e2e-ndm-netflow: variables: TARGETS: ./tests/ndm/netflow TEAM: network-device-monitoring + +new-e2e-ndm-snmp: + extends: .new_e2e_template + rules: !reference [.on_ndm_snmp_or_e2e_changes_or_manual] + needs: + - qa_agent + variables: + TARGETS: ./tests/ndm/snmp + TEAM: network-device-monitoring From b80d861aef3411a269f1879233a24df81ba271db Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 10:40:41 +0200 Subject: [PATCH 06/11] change config filename --- .../tests/ndm/snmp/config/{public.yaml => cisco-nexus.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/new-e2e/tests/ndm/snmp/config/{public.yaml => cisco-nexus.yaml} (100%) diff --git a/test/new-e2e/tests/ndm/snmp/config/public.yaml b/test/new-e2e/tests/ndm/snmp/config/cisco-nexus.yaml similarity index 100% rename from test/new-e2e/tests/ndm/snmp/config/public.yaml rename to test/new-e2e/tests/ndm/snmp/config/cisco-nexus.yaml From 45ae6cc591eabe4ac00ffe4d6ea11cdb9ff89535 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 10:49:08 +0200 Subject: [PATCH 07/11] improve test behavior --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 01ca874a4511..e603b8fa36b6 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -14,7 +14,6 @@ import ( "time" "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" - "github.com/DataDog/datadog-agent/test/fakeintake/client" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" "github.com/stretchr/testify/assert" @@ -162,18 +161,13 @@ func (s *snmpDockerSuite) TestSnmp() { func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { fakeintake := s.Env().FakeIntake.Client() - initialMetrics, err := fakeintake.FilterMetrics("snmp.device.reachable", - client.WithTags[*aggregator.MetricSeries]([]string{}), - ) + initialMetrics, err := fakeintake.FilterMetrics("snmp.device.reachable") require.NoError(s.T(), err) initialTags := initialMetrics[0].Tags _, err = s.Env().RemoteHost.Execute("docker stop dd-snmp") require.NoError(s.T(), err) - err = fakeintake.FlushServerAndResetAggregators() - require.NoError(s.T(), err) - _, err = s.Env().RemoteHost.Execute(fmt.Sprintf("docker restart %s", s.Env().Agent.ContainerName)) require.NoError(s.T(), err) @@ -183,9 +177,7 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { var metrics []*aggregator.MetricSeries require.EventuallyWithT(s.T(), func(t *assert.CollectT) { - metrics, err = fakeintake.FilterMetrics("snmp.device.reachable", - client.WithTags[*aggregator.MetricSeries]([]string{}), - ) + metrics, err = fakeintake.FilterMetrics("snmp.device.reachable") require.NoError(t, err) assert.NotEmpty(t, metrics) }, 5*time.Minute, 5*time.Second) @@ -194,5 +186,4 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { require.Zero(s.T(), metrics[0].Points[0].Value) require.ElementsMatch(s.T(), tags, initialTags) - require.Len(s.T(), tags, 9) } From d8de7c0722c746a8da7036070e1c7fce2aaa4c8f Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 10:50:52 +0200 Subject: [PATCH 08/11] prevent potential flaky test --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index e603b8fa36b6..329b299910c2 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -161,8 +161,13 @@ func (s *snmpDockerSuite) TestSnmp() { func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { fakeintake := s.Env().FakeIntake.Client() - initialMetrics, err := fakeintake.FilterMetrics("snmp.device.reachable") - require.NoError(s.T(), err) + var initialMetrics []*aggregator.MetricSeries + var err error + + require.EventuallyWithT(s.T(), func(t *assert.CollectT) { + initialMetrics, err = fakeintake.FilterMetrics("snmp.device.reachable") + assert.NoError(s.T(), err) + }, 5*time.Minute, 5*time.Second) initialTags := initialMetrics[0].Tags _, err = s.Env().RemoteHost.Execute("docker stop dd-snmp") @@ -178,7 +183,7 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { require.EventuallyWithT(s.T(), func(t *assert.CollectT) { metrics, err = fakeintake.FilterMetrics("snmp.device.reachable") - require.NoError(t, err) + assert.NoError(t, err) assert.NotEmpty(t, metrics) }, 5*time.Minute, 5*time.Second) From bcdd43c235309f88115ee128e3c483c1334b21e8 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 11:05:08 +0200 Subject: [PATCH 09/11] fix test --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 329b299910c2..afdbe3fd1c16 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -33,7 +33,7 @@ import ( //go:embed compose/snmpCompose.yaml var snmpCompose string -//go:embed config/public.yaml +//go:embed config/cisco-nexus.yaml var snmpConfig string const ( From 114b9cb88ebd9c10a54bdd1bd821952036daf794 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 13:36:09 +0200 Subject: [PATCH 10/11] use container in cache --- test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml | 2 +- test/new-e2e/tests/ndm/snmp/snmp_test.go | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml b/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml index 0a6532391433..2e08038b9770 100644 --- a/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml +++ b/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml @@ -1,7 +1,7 @@ version: "3.9" services: snmp: - image: "datadog/docker-library:snmp" + image: "669783387624.dkr.ecr.us-east-1.amazonaws.com/dockerhub/datadog/docker-library:snmp" ports: - "1161:1161/udp" command: --args-from-file=/usr/snmpsim/data/args_list.txt --variation-modules-dir=/usr/local/snmpsim/variation diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index afdbe3fd1c16..3fe47d661c77 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -19,6 +19,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/DataDog/test-infra-definitions/common/utils" "github.com/DataDog/test-infra-definitions/components/datadog/agent" "github.com/DataDog/test-infra-definitions/components/datadog/dockeragentparams" "github.com/DataDog/test-infra-definitions/components/docker" @@ -101,7 +102,12 @@ func snmpDockerProvisioner() e2e.Provisioner { return err } - dockerManager, err := docker.NewManager(&awsEnv, host) + installEcrCredsHelperCmd, err := ec2.InstallECRCredentialsHelper(awsEnv, host) + if err != nil { + return err + } + + dockerManager, err := docker.NewManager(&awsEnv, host, utils.PulumiDependsOn(installEcrCredsHelperCmd)) if err != nil { return err } From 0cbe4239a32b07b1ae67d0ba54de0e013fa88658 Mon Sep 17 00:00:00 2001 From: Jean-Edouard Dupau Date: Wed, 29 May 2024 17:34:32 +0200 Subject: [PATCH 11/11] fix test --- test/new-e2e/tests/ndm/snmp/snmp_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/new-e2e/tests/ndm/snmp/snmp_test.go b/test/new-e2e/tests/ndm/snmp/snmp_test.go index 3fe47d661c77..8eea2218b6bf 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -172,7 +172,7 @@ func (s *snmpDockerSuite) TestSnmpTagsAreStoredOnRestart() { require.EventuallyWithT(s.T(), func(t *assert.CollectT) { initialMetrics, err = fakeintake.FilterMetrics("snmp.device.reachable") - assert.NoError(s.T(), err) + assert.NoError(t, err) }, 5*time.Minute, 5*time.Second) initialTags := initialMetrics[0].Tags