Skip to content

Commit 4e44f24

Browse files
authored
Fix expected dataset check in test runners (#1072)
1 parent 5370fcb commit 4e44f24

File tree

6 files changed

+74
-20
lines changed

6 files changed

+74
-20
lines changed

internal/packages/packages.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,12 @@ func ReadDataStreamManifest(path string) (*DataStreamManifest, error) {
254254
return &m, nil
255255
}
256256

257+
// ReadDataStreamManifestFromPackageRoot reads and parses the manifest of the given
258+
// data stream from the given package root.
259+
func ReadDataStreamManifestFromPackageRoot(packageRoot string, name string) (*DataStreamManifest, error) {
260+
return ReadDataStreamManifest(filepath.Join(packageRoot, "data_stream", name, DataStreamManifestFile))
261+
}
262+
257263
// GetPipelineNameOrDefault returns the name of the data stream's pipeline, if one is explicitly defined in the
258264
// data stream manifest. If not, the default pipeline name is returned.
259265
func (dsm *DataStreamManifest) GetPipelineNameOrDefault() string {

internal/testrunner/runners/pipeline/runner.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,16 @@ func (r *runner) run() ([]testrunner.TestResult, error) {
9999
return nil, errors.Wrap(err, "failed to read manifest")
100100
}
101101

102+
dsManifest, err := packages.ReadDataStreamManifestFromPackageRoot(r.options.PackageRootPath, r.options.TestFolder.DataStream)
103+
if err != nil {
104+
return nil, errors.Wrap(err, "failed to read data stream manifest")
105+
}
106+
107+
expectedDataset := dsManifest.Dataset
108+
if expectedDataset == "" {
109+
expectedDataset = pkgManifest.Name + "." + r.options.TestFolder.DataStream
110+
}
111+
102112
results := make([]testrunner.TestResult, 0)
103113
for _, testCaseFile := range testCaseFiles {
104114
tr := testrunner.TestResult{
@@ -140,7 +150,6 @@ func (r *runner) run() ([]testrunner.TestResult, error) {
140150
result := &testResult{events: processedEvents}
141151

142152
tr.TimeElapsed = time.Since(startTime)
143-
expectedDataset := pkgManifest.Name + "." + r.options.TestFolder.DataStream
144153
fieldsValidator, err := fields.CreateValidatorForDirectory(dataStreamPath,
145154
fields.WithSpecVersion(pkgManifest.SpecVersion),
146155
fields.WithNumericKeywordFields(tc.config.NumericKeywordFields),

internal/testrunner/runners/static/runner.go

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,33 @@ func (r runner) run() ([]testrunner.TestResult, error) {
7070
return result.WithError(errors.Wrap(err, "failed to read manifest"))
7171
}
7272

73-
var results []testrunner.TestResult
74-
results = append(results, r.verifySampleEvent(pkgManifest)...)
75-
return results, nil
73+
return r.verifySampleEvent(pkgManifest), nil
7674
}
7775

7876
func (r runner) verifySampleEvent(pkgManifest *packages.PackageManifest) []testrunner.TestResult {
79-
dataStreamPath := filepath.Join(r.options.PackageRootPath, "data_stream", r.options.TestFolder.DataStream)
80-
sampleEventPath := filepath.Join(dataStreamPath, sampleEventJSON)
81-
_, err := os.Stat(sampleEventPath)
82-
if errors.Is(err, os.ErrNotExist) {
83-
return []testrunner.TestResult{} // nothing to succeed, nothing to skip
84-
}
85-
8677
resultComposer := testrunner.NewResultComposer(testrunner.TestResult{
8778
Name: "Verify " + sampleEventJSON,
8879
TestType: TestType,
8980
Package: r.options.TestFolder.Package,
9081
DataStream: r.options.TestFolder.DataStream,
9182
})
9283

84+
sampleEventPath, found, err := r.getSampleEventPath()
9385
if err != nil {
94-
results, _ := resultComposer.WithError(errors.Wrap(err, "stat file failed"))
86+
results, _ := resultComposer.WithError(err)
9587
return results
9688
}
89+
if !found {
90+
// Nothing to do.
91+
return []testrunner.TestResult{}
92+
}
9793

98-
expectedDataset := pkgManifest.Name + "." + r.options.TestFolder.DataStream
99-
fieldsValidator, err := fields.CreateValidatorForDirectory(dataStreamPath,
94+
expectedDataset, err := r.getExpectedDataset(pkgManifest)
95+
if err != nil {
96+
results, _ := resultComposer.WithError(err)
97+
return results
98+
}
99+
fieldsValidator, err := fields.CreateValidatorForDirectory(filepath.Dir(sampleEventPath),
100100
fields.WithSpecVersion(pkgManifest.SpecVersion),
101101
fields.WithDefaultNumericConversion(),
102102
fields.WithExpectedDataset(expectedDataset),
@@ -125,6 +125,46 @@ func (r runner) verifySampleEvent(pkgManifest *packages.PackageManifest) []testr
125125
return results
126126
}
127127

128+
func (r runner) getSampleEventPath() (string, bool, error) {
129+
var sampleEventPath string
130+
if r.options.TestFolder.DataStream != "" {
131+
sampleEventPath = filepath.Join(
132+
r.options.PackageRootPath,
133+
"data_stream",
134+
r.options.TestFolder.DataStream,
135+
sampleEventJSON)
136+
} else {
137+
sampleEventPath = filepath.Join(r.options.PackageRootPath, sampleEventJSON)
138+
}
139+
_, err := os.Stat(sampleEventPath)
140+
if errors.Is(err, os.ErrNotExist) {
141+
return "", false, nil
142+
}
143+
if err != nil {
144+
return "", false, errors.Wrap(err, "stat file failed")
145+
}
146+
return sampleEventPath, true, nil
147+
}
148+
149+
func (r runner) getExpectedDataset(pkgManifest *packages.PackageManifest) (string, error) {
150+
dsName := r.options.TestFolder.DataStream
151+
if dsName == "" {
152+
// TODO: This should return the package name plus the policy name, but we don't know
153+
// what policy created this event, so we cannot reliably know it here. Skip the check
154+
// by now.
155+
return "", nil
156+
}
157+
158+
dataStreamManifest, err := packages.ReadDataStreamManifestFromPackageRoot(r.options.PackageRootPath, dsName)
159+
if err != nil {
160+
return "", errors.Wrap(err, "failed to read data stream manifest")
161+
}
162+
if ds := dataStreamManifest.Dataset; ds != "" {
163+
return ds, nil
164+
}
165+
return pkgManifest.Name + "." + dsName, nil
166+
}
167+
128168
func (r runner) TearDown() error {
129169
return nil // it's a static test runner, no state is stored
130170
}

internal/testrunner/runners/system/runner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ func (r *runner) runTest(config *testConfig, ctxt servicedeployer.ServiceContext
464464
// Validate fields in docs
465465
var expectedDataset string
466466
if ds := r.options.TestFolder.DataStream; ds != "" {
467-
expectedDataset = pkgManifest.Name + "." + ds
467+
expectedDataset = getDataStreamDataset(*pkgManifest, *dataStreamManifest)
468468
} else {
469469
expectedDataset = pkgManifest.Name + "." + policyTemplateName
470470
}

test/packages/other/with_dataset/changelog.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
- version: "0.0.1"
1+
- version: "0.0.2"
22
changes:
33
- description: initial release
44
type: enhancement

test/packages/other/with_dataset/manifest.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
format_version: 1.0.0
1+
format_version: 2.2.0
22
name: with_dataset
33
title: With dataset test
4-
version: 0.0.1
4+
version: 0.0.2
55
description: Package that defines system test for data streams with an overwriting dataset
66
categories:
77
- custom
8-
release: experimental
9-
license: basic
108
type: integration
119
conditions:
1210
kibana.version: '^8.0.0'
11+
elastic.subscription: basic
1312
policy_templates:
1413
- name: sample
1514
title: Sample logs

0 commit comments

Comments
 (0)