Skip to content

Commit

Permalink
Factorization by introducing WithFleetAgentDataStreamsValidation() (#…
Browse files Browse the repository at this point in the history
…7497)

This commit refactors all validations done in Fleet E2E tests with
disabling the problematic validation based on version, so that all tests
benefit from it (in particular `TestAgentVersionUpgradeToLatest8x` 
which is affected by #7389).
  • Loading branch information
thbkrkr committed Jan 24, 2024
1 parent 35d381b commit 447ea8a
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 90 deletions.
25 changes: 2 additions & 23 deletions test/e2e/agent/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ func TestMultipleOutputConfig(t *testing.T) {
}

func TestFleetMode(t *testing.T) {
v := version.MustParse(test.Ctx().ElasticStackVersion)
name := "test-agent-fleet"

agentNS := test.Ctx().ManagedNamespace(0)
Expand All @@ -147,17 +146,7 @@ func TestFleetMode(t *testing.T) {
WithFleetServer().
WithElasticsearchRefs(agent.ToOutput(esBuilder.Ref(), "default")).
WithKibanaRef(kbBuilder.Ref()).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default"))

// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
fleetServerBuilder = fleetServerBuilder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default"))
}
WithFleetAgentDataStreamsValidation()

kbBuilder = kbBuilder.WithConfig(fleetConfigForKibana(t, fleetServerBuilder.Agent.Spec.Version, esBuilder.Ref(), fleetServerBuilder.Ref(), true))

Expand All @@ -183,17 +172,7 @@ func TestFleetMode(t *testing.T) {
WithFleetServer().
WithElasticsearchRefs(agent.ToOutput(esBuilder.Ref(), "default")).
WithKibanaRef(kbBuilder.Ref()).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default"))

// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
fleetServerBuilder = fleetServerBuilder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default"))
}
WithFleetAgentDataStreamsValidation()

kbBuilder = kbBuilder.WithConfig(fleetConfigForKibana(t, fleetServerBuilder.Agent.Spec.Version, esBuilder.Ref(), fleetServerBuilder.Ref(), true))

Expand Down
54 changes: 4 additions & 50 deletions test/e2e/agent/recipes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,21 +88,13 @@ func TestMultiOutputRecipe(t *testing.T) {
}

func TestFleetKubernetesIntegrationRecipe(t *testing.T) {
v := version.MustParse(test.Ctx().ElasticStackVersion)

customize := func(builder agent.Builder) agent.Builder {
if !builder.Agent.Spec.FleetServerEnabled {
return builder
}

builder = builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default")).
WithFleetAgentDataStreamsValidation().
// TODO API server should generate event in time but on kind we see repeatedly no metrics being reported in time
// see https://github.com/elastic/cloud-on-k8s/issues/4092
// WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "kubernetes.apiserver", "k8s")).
Expand All @@ -126,12 +118,6 @@ func TestFleetKubernetesIntegrationRecipe(t *testing.T) {
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "system.socket_summary", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "system.uptime", "default"))

// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
builder = builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default"))
}

return builder
}

Expand All @@ -157,14 +143,7 @@ func TestFleetKubernetesNonRootIntegrationRecipe(t *testing.T) {
}

return builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default")).
WithFleetAgentDataStreamsValidation().
// TODO API server should generate event in time but on kind we see repeatedly no metrics being reported in time
// see https://github.com/elastic/cloud-on-k8s/issues/4092
// WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "kubernetes.apiserver", "k8s")).
Expand Down Expand Up @@ -209,14 +188,8 @@ func TestFleetCustomLogsIntegrationRecipe(t *testing.T) {
}

return builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "generic", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default")).
WithFleetAgentDataStreamsValidation().
WithDefaultESValidation(agent.HasEvent("/_search?q=message:" + loggingPod.Logged)).
WithDefaultESValidation(agent.NoEvent("/_search?q=message:" + notLoggingPod.Logged))
}
Expand All @@ -225,31 +198,12 @@ func TestFleetCustomLogsIntegrationRecipe(t *testing.T) {
}

func TestFleetAPMIntegrationRecipe(t *testing.T) {
v := version.MustParse(test.Ctx().ElasticStackVersion)

customize := func(builder agent.Builder) agent.Builder {
if !builder.Agent.Spec.FleetServerEnabled {
return builder
}

builder = builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.apm_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.apm_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default"))

// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
builder = builder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default"))
}

return builder
return builder.WithFleetAgentDataStreamsValidation()
}

runAgentRecipe(t, "fleet-apm-integration.yaml", customize)
}

Expand Down
12 changes: 1 addition & 11 deletions test/e2e/agent/tls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,7 @@ func TestFleetAgentWithoutTLS(t *testing.T) {
WithElasticsearchRefs(agent.ToOutput(esBuilder.Ref(), "default")).
WithKibanaRef(kbBuilder.Ref()).
WithTLSDisabled(true).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default"))

// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
fleetServerBuilder = fleetServerBuilder.
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default"))
}
WithFleetAgentDataStreamsValidation()

kbBuilder = kbBuilder.WithConfig(fleetConfigForKibana(t, fleetServerBuilder.Agent.Spec.Version, esBuilder.Ref(), fleetServerBuilder.Ref(), false))

Expand Down
7 changes: 1 addition & 6 deletions test/e2e/agent/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,7 @@ func TestAgentVersionUpgradeToLatest8x(t *testing.T) {
WithFleetServer().
WithElasticsearchRefs(agent.ToOutput(esBuilder.Ref(), "default")).
WithKibanaRef(kbBuilder.Ref()).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(agent.HasWorkingDataStream(agent.MetricsType, "elastic_agent.metricbeat", "default"))
WithFleetAgentDataStreamsValidation()

kbBuilder = kbBuilder.WithConfig(fleetConfigForKibana(t, fleetServerBuilder.Agent.Spec.Version, esBuilder.Ref(), fleetServerBuilder.Ref(), true))

Expand Down
17 changes: 17 additions & 0 deletions test/e2e/test/agent/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,23 @@ func (b Builder) WithESValidation(validation ValidationFunc, outputName string)
return b
}

func (b Builder) WithFleetAgentDataStreamsValidation() Builder {
v := version.MustParse(test.Ctx().ElasticStackVersion)
b = b.
WithDefaultESValidation(HasWorkingDataStream(LogsType, "elastic_agent", "default")).
WithDefaultESValidation(HasWorkingDataStream(LogsType, "elastic_agent.filebeat", "default")).
WithDefaultESValidation(HasWorkingDataStream(LogsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(HasWorkingDataStream(LogsType, "elastic_agent.metricbeat", "default")).
WithDefaultESValidation(HasWorkingDataStream(MetricsType, "elastic_agent.elastic_agent", "default")).
WithDefaultESValidation(HasWorkingDataStream(MetricsType, "elastic_agent.fleet_server", "default")).
WithDefaultESValidation(HasWorkingDataStream(MetricsType, "elastic_agent.metricbeat", "default"))
// https://github.com/elastic/cloud-on-k8s/issues/7389
if v.LT(version.MinFor(8, 12, 0)) || v.GE(version.MinFor(8, 14, 0)) {
b = b.WithDefaultESValidation(HasWorkingDataStream(MetricsType, "elastic_agent.filebeat", "default"))
}
return b
}

func (b Builder) WithElasticsearchRefs(refs ...agentv1alpha1.Output) Builder {
b.Agent.Spec.ElasticsearchRefs = refs
return b
Expand Down

0 comments on commit 447ea8a

Please sign in to comment.