@@ -41,40 +41,75 @@ import (
41
41
"github.com/elastic/elastic-package/internal/wait"
42
42
)
43
43
44
+ const FieldsQuery = `{
45
+ "fields": [
46
+ "*"
47
+ ],
48
+ "runtime_mappings": {
49
+ "my_ignored": {
50
+ "type": "keyword",
51
+ "script": {
52
+ "source": "for (def v : params['_fields']._ignored.values) { emit(v); }"
53
+ }
54
+ }
55
+ },
56
+ "aggs": {
57
+ "all_ignored": {
58
+ "filter": {
59
+ "exists": {
60
+ "field": "_ignored"
61
+ }
62
+ },
63
+ "aggs": {
64
+ "ignored_fields": {
65
+ "terms": {
66
+ "size": 100,
67
+ "field": "my_ignored"
68
+ }
69
+ },
70
+ "ignored_docs": {
71
+ "top_hits": {
72
+ "size": 5
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }`
79
+
80
+ type FieldsQueryResult struct {
81
+ Hits struct {
82
+ Total struct {
83
+ Value int
84
+ }
85
+ Hits []struct {
86
+ Source common.MapStr `json:"_source"`
87
+ Fields common.MapStr `json:"fields"`
88
+ }
89
+ }
90
+ Aggregations struct {
91
+ AllIgnored struct {
92
+ DocCount int `json:"doc_count"`
93
+ IgnoredFields struct {
94
+ Buckets []struct {
95
+ Key string `json:"key"`
96
+ } `json:"buckets"`
97
+ } `json:"ignored_fields"`
98
+ IgnoredDocs struct {
99
+ Hits struct {
100
+ Hits []common.MapStr `json:"hits"`
101
+ } `json:"hits"`
102
+ } `json:"ignored_docs"`
103
+ } `json:"all_ignored"`
104
+ } `json:"aggregations"`
105
+ Error * struct {
106
+ Type string
107
+ Reason string
108
+ }
109
+ Status int
110
+ }
111
+
44
112
const (
45
- checkFieldsBody = `{
46
- "fields": ["*"],
47
- "runtime_mappings": {
48
- "my_ignored": {
49
- "type": "keyword",
50
- "script": {
51
- "source": "for (def v : params['_fields']._ignored.values) { emit(v); }"
52
- }
53
- }
54
- },
55
- "aggs": {
56
- "all_ignored": {
57
- "filter": {
58
- "exists": {
59
- "field": "_ignored"
60
- }
61
- },
62
- "aggs": {
63
- "ignored_fields": {
64
- "terms": {
65
- "size": 100,
66
- "field": "my_ignored"
67
- }
68
- },
69
- "ignored_docs": {
70
- "top_hits": {
71
- "size": 5
72
- }
73
- }
74
- }
75
- }
76
- }
77
- }`
78
113
DevDeployDir = "_dev/deploy"
79
114
80
115
// TestType defining system tests
@@ -764,7 +799,7 @@ func (r *tester) getDocs(ctx context.Context, dataStream string) (*hits, error)
764
799
r .esAPI .Search .WithSort ("@timestamp:asc" ),
765
800
r .esAPI .Search .WithSize (elasticsearchQuerySize ),
766
801
r .esAPI .Search .WithSource ("true" ),
767
- r .esAPI .Search .WithBody (strings .NewReader (checkFieldsBody )),
802
+ r .esAPI .Search .WithBody (strings .NewReader (FieldsQuery )),
768
803
r .esAPI .Search .WithIgnoreUnavailable (true ),
769
804
)
770
805
if err != nil {
@@ -781,38 +816,7 @@ func (r *tester) getDocs(ctx context.Context, dataStream string) (*hits, error)
781
816
return nil , fmt .Errorf ("failed to search docs for data stream %s: %s" , dataStream , resp .String ())
782
817
}
783
818
784
- var results struct {
785
- Hits struct {
786
- Total struct {
787
- Value int
788
- }
789
- Hits []struct {
790
- Source common.MapStr `json:"_source"`
791
- Fields common.MapStr `json:"fields"`
792
- }
793
- }
794
- Aggregations struct {
795
- AllIgnored struct {
796
- DocCount int `json:"doc_count"`
797
- IgnoredFields struct {
798
- Buckets []struct {
799
- Key string `json:"key"`
800
- } `json:"buckets"`
801
- } `json:"ignored_fields"`
802
- IgnoredDocs struct {
803
- Hits struct {
804
- Hits []common.MapStr `json:"hits"`
805
- } `json:"hits"`
806
- } `json:"ignored_docs"`
807
- } `json:"all_ignored"`
808
- } `json:"aggregations"`
809
- Error * struct {
810
- Type string
811
- Reason string
812
- }
813
- Status int
814
- }
815
-
819
+ var results FieldsQueryResult
816
820
if err := json .NewDecoder (resp .Body ).Decode (& results ); err != nil {
817
821
return nil , fmt .Errorf ("could not decode search results response: %w" , err )
818
822
}
@@ -1013,17 +1017,16 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
1013
1017
}
1014
1018
1015
1019
serviceOptions .DeployIndependentAgent = r .runIndependentElasticAgent
1016
-
1017
1020
policyTemplateName := config .PolicyTemplate
1018
1021
if policyTemplateName == "" {
1019
- policyTemplateName , err = findPolicyTemplateForInput ( * r .pkgManifest , r .dataStreamManifest , config .Input )
1022
+ policyTemplateName , err = FindPolicyTemplateForInput ( r .pkgManifest , r .dataStreamManifest , config .Input )
1020
1023
if err != nil {
1021
1024
return nil , fmt .Errorf ("failed to determine the associated policy_template: %w" , err )
1022
1025
}
1023
1026
}
1024
1027
scenario .policyTemplateName = policyTemplateName
1025
1028
1026
- policyTemplate , err := selectPolicyTemplateByName (r .pkgManifest .PolicyTemplates , scenario .policyTemplateName )
1029
+ policyTemplate , err := SelectPolicyTemplateByName (r .pkgManifest .PolicyTemplates , scenario .policyTemplateName )
1027
1030
if err != nil {
1028
1031
return nil , fmt .Errorf ("failed to find the selected policy_template: %w" , err )
1029
1032
}
@@ -1074,7 +1077,7 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
1074
1077
scenario .startTestTime = time .Now ()
1075
1078
1076
1079
logger .Debug ("adding package data stream to test policy..." )
1077
- ds , err := createPackageDatastream ( * policyToTest , * r .pkgManifest , policyTemplate , r .dataStreamManifest , * config , policyToTest .Namespace )
1080
+ ds , err := CreatePackageDatastream ( policyToTest , r .pkgManifest , policyTemplate , r .dataStreamManifest , config . Input , config . Vars , config . DataStream . Vars , policyToTest .Namespace )
1078
1081
if err != nil {
1079
1082
return nil , fmt .Errorf ("could not create package data stream: %w" , err )
1080
1083
}
@@ -1087,8 +1090,8 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
1087
1090
}
1088
1091
scenario .kibanaDataStream = ds
1089
1092
1090
- scenario .indexTemplateName = r . buildIndexTemplateName (ds , config )
1091
- scenario .dataStream = r . buildDataStreamName (scenario .policyTemplateInput , ds , config )
1093
+ scenario .indexTemplateName = BuildIndexTemplateName (ds , r . pkgManifest . Type , config . Vars )
1094
+ scenario .dataStream = BuildDataStreamName (scenario .policyTemplateInput , ds , r . pkgManifest . Type , config . Vars )
1092
1095
1093
1096
r .cleanTestScenarioHandler = func (ctx context.Context ) error {
1094
1097
logger .Debugf ("Deleting data stream for testing %s" , scenario .dataStream )
@@ -1255,10 +1258,10 @@ func (r *tester) prepareScenario(ctx context.Context, config *testConfig, stackC
1255
1258
return & scenario , nil
1256
1259
}
1257
1260
1258
- // buildIndexTemplateName builds the expected index template name that is installed in Elasticsearch
1261
+ // BuildIndexTemplateName builds the expected index template name that is installed in Elasticsearch
1259
1262
// when the package data stream is added to the policy.
1260
- func ( r * tester ) buildIndexTemplateName ( ds kibana.PackageDataStream , config * testConfig ) string {
1261
- dataStreamDataset := getExpectedDatasetForTest (r . pkgManifest . Type , ds .Inputs [0 ].Streams [0 ].DataStream .Dataset , config )
1263
+ func BuildIndexTemplateName ( ds kibana.PackageDataStream , manType string , cfgVars common. MapStr ) string {
1264
+ dataStreamDataset := getExpectedDatasetForTest (manType , ds .Inputs [0 ].Streams [0 ].DataStream .Dataset , cfgVars )
1262
1265
1263
1266
indexTemplateName := fmt .Sprintf (
1264
1267
"%s-%s" ,
@@ -1268,11 +1271,13 @@ func (r *tester) buildIndexTemplateName(ds kibana.PackageDataStream, config *tes
1268
1271
return indexTemplateName
1269
1272
}
1270
1273
1271
- func (r * tester ) buildDataStreamName (policyTemplateInput string , ds kibana.PackageDataStream , config * testConfig ) string {
1272
- dataStreamDataset := getExpectedDatasetForTest (r .pkgManifest .Type , ds .Inputs [0 ].Streams [0 ].DataStream .Dataset , config )
1274
+ // BuildDataStreamName builds the expected data stream name that is installed in Elasticsearch
1275
+ // when the package data stream is added to the policy.
1276
+ func BuildDataStreamName (policyTemplateInput string , ds kibana.PackageDataStream , manType string , cfgVars common.MapStr ) string {
1277
+ dataStreamDataset := getExpectedDatasetForTest (manType , ds .Inputs [0 ].Streams [0 ].DataStream .Dataset , cfgVars )
1273
1278
1274
1279
// Input packages using the otel collector input require to add a specific dataset suffix
1275
- if r . pkgManifest . Type == "input" && policyTemplateInput == otelCollectorInputName {
1280
+ if manType == "input" && policyTemplateInput == otelCollectorInputName {
1276
1281
dataStreamDataset = fmt .Sprintf ("%s.%s" , dataStreamDataset , otelSuffixDataset )
1277
1282
}
1278
1283
@@ -1285,10 +1290,10 @@ func (r *tester) buildDataStreamName(policyTemplateInput string, ds kibana.Packa
1285
1290
return dataStreamName
1286
1291
}
1287
1292
1288
- func getExpectedDatasetForTest (pkgType , dataset string , config * testConfig ) string {
1293
+ func getExpectedDatasetForTest (pkgType , dataset string , cfgVars common. MapStr ) string {
1289
1294
if pkgType == "input" {
1290
1295
// Input packages can set `data_stream.dataset` by convention to customize the dataset.
1291
- v , _ := config . Vars .GetValue ("data_stream.dataset" )
1296
+ v , _ := cfgVars .GetValue ("data_stream.dataset" )
1292
1297
if ds , ok := v .(string ); ok && ds != "" {
1293
1298
return ds
1294
1299
}
@@ -1904,29 +1909,31 @@ func (r *tester) checkEnrolledAgents(ctx context.Context, agentInfo agentdeploye
1904
1909
return & agent , nil
1905
1910
}
1906
1911
1907
- func createPackageDatastream (
1908
- kibanaPolicy kibana.Policy ,
1909
- pkg packages.PackageManifest ,
1912
+ func CreatePackageDatastream (
1913
+ kibanaPolicy * kibana.Policy ,
1914
+ pkg * packages.PackageManifest ,
1910
1915
policyTemplate packages.PolicyTemplate ,
1911
1916
ds * packages.DataStreamManifest ,
1912
- config testConfig ,
1917
+ cfgName string ,
1918
+ cfgVars , cfgDSVars common.MapStr ,
1913
1919
suffix string ,
1914
1920
) (kibana.PackageDataStream , error ) {
1915
1921
if pkg .Type == "input" {
1916
- return createInputPackageDatastream (kibanaPolicy , pkg , policyTemplate , config , suffix ), nil
1922
+ return createInputPackageDatastream (kibanaPolicy , pkg , policyTemplate , cfgVars , cfgDSVars , suffix ), nil
1917
1923
}
1918
1924
if ds == nil {
1919
1925
return kibana.PackageDataStream {}, fmt .Errorf ("data stream manifest is required for integration packages" )
1920
1926
}
1921
- return createIntegrationPackageDatastream (kibanaPolicy , pkg , policyTemplate , * ds , config , suffix ), nil
1927
+ return createIntegrationPackageDatastream (kibanaPolicy , pkg , policyTemplate , ds , cfgName , cfgVars , cfgDSVars , suffix ), nil
1922
1928
}
1923
1929
1924
1930
func createIntegrationPackageDatastream (
1925
- kibanaPolicy kibana.Policy ,
1926
- pkg packages.PackageManifest ,
1931
+ kibanaPolicy * kibana.Policy ,
1932
+ pkg * packages.PackageManifest ,
1927
1933
policyTemplate packages.PolicyTemplate ,
1928
- ds packages.DataStreamManifest ,
1929
- config testConfig ,
1934
+ ds * packages.DataStreamManifest ,
1935
+ cfgName string ,
1936
+ cfgVars , cfgDSVars common.MapStr ,
1930
1937
suffix string ,
1931
1938
) kibana.PackageDataStream {
1932
1939
r := kibana.PackageDataStream {
@@ -1945,7 +1952,7 @@ func createIntegrationPackageDatastream(
1945
1952
r .Package .Title = pkg .Title
1946
1953
r .Package .Version = pkg .Version
1947
1954
1948
- stream := ds .Streams [getDataStreamIndex (config . Input , ds )]
1955
+ stream := ds .Streams [getDataStreamIndex (cfgName , ds )]
1949
1956
streamInput := stream .Input
1950
1957
r .Inputs [0 ].Type = streamInput
1951
1958
@@ -1965,26 +1972,26 @@ func createIntegrationPackageDatastream(
1965
1972
}
1966
1973
1967
1974
// Add dataStream-level vars
1968
- streams [0 ].Vars = setKibanaVariables (stream .Vars , config . DataStream . Vars )
1975
+ streams [0 ].Vars = setKibanaVariables (stream .Vars , cfgDSVars )
1969
1976
r .Inputs [0 ].Streams = streams
1970
1977
1971
1978
// Add input-level vars
1972
1979
input := policyTemplate .FindInputByType (streamInput )
1973
1980
if input != nil {
1974
- r .Inputs [0 ].Vars = setKibanaVariables (input .Vars , config . Vars )
1981
+ r .Inputs [0 ].Vars = setKibanaVariables (input .Vars , cfgVars )
1975
1982
}
1976
1983
1977
1984
// Add package-level vars
1978
- r .Vars = setKibanaVariables (pkg .Vars , config . Vars )
1985
+ r .Vars = setKibanaVariables (pkg .Vars , cfgVars )
1979
1986
1980
1987
return r
1981
1988
}
1982
1989
1983
1990
func createInputPackageDatastream (
1984
- kibanaPolicy kibana.Policy ,
1985
- pkg packages.PackageManifest ,
1991
+ kibanaPolicy * kibana.Policy ,
1992
+ pkg * packages.PackageManifest ,
1986
1993
policyTemplate packages.PolicyTemplate ,
1987
- config testConfig ,
1994
+ cfgVars , cfgDSVars common. MapStr ,
1988
1995
suffix string ,
1989
1996
) kibana.PackageDataStream {
1990
1997
r := kibana.PackageDataStream {
@@ -2018,10 +2025,10 @@ func createInputPackageDatastream(
2018
2025
}
2019
2026
2020
2027
// Add policyTemplate-level vars.
2021
- vars := setKibanaVariables (policyTemplate .Vars , config . Vars )
2028
+ vars := setKibanaVariables (policyTemplate .Vars , cfgVars )
2022
2029
if _ , found := vars ["data_stream.dataset" ]; ! found {
2023
2030
dataStreamDataset := dataset
2024
- v , _ := config . Vars .GetValue ("data_stream.dataset" )
2031
+ v , _ := cfgVars .GetValue ("data_stream.dataset" )
2025
2032
if dataset , ok := v .(string ); ok && dataset != "" {
2026
2033
dataStreamDataset = dataset
2027
2034
}
@@ -2060,7 +2067,7 @@ func setKibanaVariables(definitions []packages.Variable, values common.MapStr) k
2060
2067
2061
2068
// getDataStreamIndex returns the index of the data stream whose input name
2062
2069
// matches. Otherwise it returns the 0.
2063
- func getDataStreamIndex (inputName string , ds packages.DataStreamManifest ) int {
2070
+ func getDataStreamIndex (inputName string , ds * packages.DataStreamManifest ) int {
2064
2071
for i , s := range ds .Streams {
2065
2072
if s .Input == inputName {
2066
2073
return i
@@ -2069,20 +2076,20 @@ func getDataStreamIndex(inputName string, ds packages.DataStreamManifest) int {
2069
2076
return 0
2070
2077
}
2071
2078
2072
- // findPolicyTemplateForInput returns the name of the policy_template that
2079
+ // FindPolicyTemplateForInput returns the name of the policy_template that
2073
2080
// applies to the input under test. An error is returned if no policy template
2074
2081
// matches or if multiple policy templates match and the response is ambiguous.
2075
- func findPolicyTemplateForInput (pkg packages.PackageManifest , ds * packages.DataStreamManifest , inputName string ) (string , error ) {
2082
+ func FindPolicyTemplateForInput (pkg * packages.PackageManifest , ds * packages.DataStreamManifest , inputName string ) (string , error ) {
2076
2083
if pkg .Type == "input" {
2077
2084
return findPolicyTemplateForInputPackage (pkg , inputName )
2078
2085
}
2079
2086
if ds == nil {
2080
2087
return "" , errors .New ("data stream must be specified for integration packages" )
2081
2088
}
2082
- return findPolicyTemplateForDataStream (pkg , * ds , inputName )
2089
+ return findPolicyTemplateForDataStream (pkg , ds , inputName )
2083
2090
}
2084
2091
2085
- func findPolicyTemplateForDataStream (pkg packages.PackageManifest , ds packages.DataStreamManifest , inputName string ) (string , error ) {
2092
+ func findPolicyTemplateForDataStream (pkg * packages.PackageManifest , ds * packages.DataStreamManifest , inputName string ) (string , error ) {
2086
2093
if inputName == "" {
2087
2094
if len (ds .Streams ) == 0 {
2088
2095
return "" , errors .New ("no streams declared in data stream manifest" )
@@ -2120,7 +2127,7 @@ func findPolicyTemplateForDataStream(pkg packages.PackageManifest, ds packages.D
2120
2127
}
2121
2128
}
2122
2129
2123
- func findPolicyTemplateForInputPackage (pkg packages.PackageManifest , inputName string ) (string , error ) {
2130
+ func findPolicyTemplateForInputPackage (pkg * packages.PackageManifest , inputName string ) (string , error ) {
2124
2131
if inputName == "" {
2125
2132
if len (pkg .PolicyTemplates ) == 0 {
2126
2133
return "" , errors .New ("no policy templates specified for input package" )
@@ -2152,7 +2159,7 @@ func findPolicyTemplateForInputPackage(pkg packages.PackageManifest, inputName s
2152
2159
}
2153
2160
}
2154
2161
2155
- func selectPolicyTemplateByName (policies []packages.PolicyTemplate , name string ) (packages.PolicyTemplate , error ) {
2162
+ func SelectPolicyTemplateByName (policies []packages.PolicyTemplate , name string ) (packages.PolicyTemplate , error ) {
2156
2163
for _ , policy := range policies {
2157
2164
if policy .Name == name {
2158
2165
return policy , nil
0 commit comments