@@ -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+
485502func (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
18831906func 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
20432069func findPolicyTemplateForDataStream (pkg packages.PackageManifest , ds packages.DataStreamManifest , inputName string ) (string , error ) {
0 commit comments