diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f99100be8074a..75ead15d5d1c5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -992,6 +992,18 @@ workflow: - when: manual allow_failure: true +.on_ndm_snmp_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/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 2dcee6794fecb..eac44bb43650b 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 diff --git a/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml b/test/new-e2e/tests/ndm/snmp/compose/snmpCompose.yaml index 0a65323914335..2e08038b9770c 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/config/public.yaml b/test/new-e2e/tests/ndm/snmp/config/cisco-nexus.yaml similarity index 75% rename from test/new-e2e/tests/ndm/snmp/config/public.yaml rename to test/new-e2e/tests/ndm/snmp/config/cisco-nexus.yaml index ddf947f636e04..8f16017507cb9 100644 --- a/test/new-e2e/tests/ndm/snmp/config/public.yaml +++ b/test/new-e2e/tests/ndm/snmp/config/cisco-nexus.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 3917e7687d7aa..8eea2218b6bfd 100644 --- a/test/new-e2e/tests/ndm/snmp/snmp_test.go +++ b/test/new-e2e/tests/ndm/snmp/snmp_test.go @@ -8,14 +8,18 @@ package snmp import ( "embed" + "fmt" "path" "testing" "time" + "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" "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/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" @@ -30,7 +34,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 ( @@ -98,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 } @@ -155,3 +164,37 @@ 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() + var initialMetrics []*aggregator.MetricSeries + var err error + + require.EventuallyWithT(s.T(), func(t *assert.CollectT) { + initialMetrics, err = fakeintake.FilterMetrics("snmp.device.reachable") + assert.NoError(t, err) + }, 5*time.Minute, 5*time.Second) + + initialTags := initialMetrics[0].Tags + _, err = s.Env().RemoteHost.Execute("docker stop dd-snmp") + 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) + + var metrics []*aggregator.MetricSeries + + require.EventuallyWithT(s.T(), func(t *assert.CollectT) { + metrics, err = fakeintake.FilterMetrics("snmp.device.reachable") + assert.NoError(t, err) + assert.NotEmpty(t, metrics) + }, 5*time.Minute, 5*time.Second) + + tags := metrics[0].Tags + + require.Zero(s.T(), metrics[0].Points[0].Value) + require.ElementsMatch(s.T(), tags, initialTags) +}