Skip to content

Commit 47c8c5a

Browse files
authored
[System tests] [input packages] Ensure dataStreamManifest is not filled with values from package manifest (#2946)
This PR ensures that the dataStreamManifest field from the system tester is not filled with the values from the package manifest when testing with input packages.
1 parent 681ee07 commit 47c8c5a

File tree

2 files changed

+39
-13
lines changed

2 files changed

+39
-13
lines changed

internal/testrunner/runners/system/tester.go

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,15 @@ func NewSystemTester(options SystemTesterOptions) (*tester, error) {
277277
return nil, fmt.Errorf("reading package manifest failed: %w", err)
278278
}
279279

280-
r.dataStreamManifest, err = packages.ReadDataStreamManifest(filepath.Join(r.dataStreamPath, packages.DataStreamManifestFile))
281-
if err != nil {
282-
return nil, fmt.Errorf("reading data stream manifest failed: %w", err)
280+
logger.Debugf("Data stream path: %q", r.dataStreamPath)
281+
if r.dataStreamPath != "" {
282+
// Avoid reading data stream manifest if path is empty (e.g. input packages) to avoid
283+
// filling "r.dataStreamManifest" with values from package manifest since the resulting path will point to
284+
// the package manifest instead of the data stream manifest.
285+
r.dataStreamManifest, err = packages.ReadDataStreamManifest(filepath.Join(r.dataStreamPath, packages.DataStreamManifestFile))
286+
if err != nil {
287+
return nil, fmt.Errorf("reading data stream manifest failed: %w", err)
288+
}
283289
}
284290

285291
// If the environment variable is present, it always has preference over the root
@@ -463,7 +469,8 @@ func (r *tester) createAgentInfo(policy *kibana.Policy, config *testConfig, runI
463469

464470
// If user is defined in the configuration file, it has preference
465471
// and it should not be overwritten by the value in the package or DataStream manifest
466-
if info.Agent.User == "" && (r.pkgManifest.Agent.Privileges.Root || r.dataStreamManifest.Agent.Privileges.Root) {
472+
if info.Agent.User == "" && r.agentRequiresRootPrivileges() {
473+
logger.Debugf(" >>> Setting agent user to 'root' as defined in the package or data stream manifest")
467474
info.Agent.User = "root"
468475
}
469476

@@ -482,6 +489,16 @@ func (r *tester) createAgentInfo(policy *kibana.Policy, config *testConfig, runI
482489
return info, nil
483490
}
484491

492+
func (r *tester) agentRequiresRootPrivileges() bool {
493+
if r.pkgManifest.Agent.Privileges.Root {
494+
return true
495+
}
496+
if r.dataStreamManifest != nil && r.dataStreamManifest.Agent.Privileges.Root {
497+
return true
498+
}
499+
return false
500+
}
501+
485502
func (r *tester) createServiceInfo() (servicedeployer.ServiceInfo, error) {
486503
var svcInfo servicedeployer.ServiceInfo
487504
svcInfo.Name = r.testFolder.Package
@@ -1000,7 +1017,7 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
10001017

10011018
policyTemplateName := config.PolicyTemplate
10021019
if policyTemplateName == "" {
1003-
policyTemplateName, err = findPolicyTemplateForInput(*r.pkgManifest, *r.dataStreamManifest, config.Input)
1020+
policyTemplateName, err = findPolicyTemplateForInput(*r.pkgManifest, r.dataStreamManifest, config.Input)
10041021
if err != nil {
10051022
return nil, fmt.Errorf("failed to determine the associated policy_template: %w", err)
10061023
}
@@ -1058,7 +1075,10 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
10581075
scenario.startTestTime = time.Now()
10591076

10601077
logger.Debug("adding package data stream to test policy...")
1061-
ds := createPackageDatastream(*policyToTest, *r.pkgManifest, policyTemplate, *r.dataStreamManifest, *config, policyToTest.Namespace)
1078+
ds, err := createPackageDatastream(*policyToTest, *r.pkgManifest, policyTemplate, r.dataStreamManifest, *config, policyToTest.Namespace)
1079+
if err != nil {
1080+
return nil, fmt.Errorf("could not create package data stream: %w", err)
1081+
}
10621082
if r.runTearDown {
10631083
logger.Debug("Skip adding data stream config to policy")
10641084
} else {
@@ -1870,14 +1890,17 @@ func createPackageDatastream(
18701890
kibanaPolicy kibana.Policy,
18711891
pkg packages.PackageManifest,
18721892
policyTemplate packages.PolicyTemplate,
1873-
ds packages.DataStreamManifest,
1893+
ds *packages.DataStreamManifest,
18741894
config testConfig,
18751895
suffix string,
1876-
) kibana.PackageDataStream {
1896+
) (kibana.PackageDataStream, error) {
18771897
if pkg.Type == "input" {
1878-
return createInputPackageDatastream(kibanaPolicy, pkg, policyTemplate, config, suffix)
1898+
return createInputPackageDatastream(kibanaPolicy, pkg, policyTemplate, config, suffix), nil
1899+
}
1900+
if ds == nil {
1901+
return kibana.PackageDataStream{}, fmt.Errorf("data stream manifest is required for integration packages")
18791902
}
1880-
return createIntegrationPackageDatastream(kibanaPolicy, pkg, policyTemplate, ds, config, suffix)
1903+
return createIntegrationPackageDatastream(kibanaPolicy, pkg, policyTemplate, *ds, config, suffix), nil
18811904
}
18821905

18831906
func createIntegrationPackageDatastream(
@@ -2033,11 +2056,14 @@ func getDataStreamIndex(inputName string, ds packages.DataStreamManifest) int {
20332056
// findPolicyTemplateForInput returns the name of the policy_template that
20342057
// applies to the input under test. An error is returned if no policy template
20352058
// matches or if multiple policy templates match and the response is ambiguous.
2036-
func findPolicyTemplateForInput(pkg packages.PackageManifest, ds packages.DataStreamManifest, inputName string) (string, error) {
2059+
func findPolicyTemplateForInput(pkg packages.PackageManifest, ds *packages.DataStreamManifest, inputName string) (string, error) {
20372060
if pkg.Type == "input" {
20382061
return findPolicyTemplateForInputPackage(pkg, inputName)
20392062
}
2040-
return findPolicyTemplateForDataStream(pkg, ds, inputName)
2063+
if ds == nil {
2064+
return "", errors.New("data stream must be specified for integration packages")
2065+
}
2066+
return findPolicyTemplateForDataStream(pkg, *ds, inputName)
20412067
}
20422068

20432069
func findPolicyTemplateForDataStream(pkg packages.PackageManifest, ds packages.DataStreamManifest, inputName string) (string, error) {

internal/testrunner/runners/system/tester_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func TestFindPolicyTemplateForInput(t *testing.T) {
139139
},
140140
}
141141

142-
ds := packages.DataStreamManifest{
142+
ds := &packages.DataStreamManifest{
143143
Name: dataStreamName,
144144
Streams: []packages.Stream{
145145
{Input: inputName},

0 commit comments

Comments
 (0)