crowdsec_service_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package csconfig
  2. import (
  3. "path/filepath"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. "github.com/crowdsecurity/go-cs-lib/cstest"
  7. "github.com/crowdsecurity/go-cs-lib/ptr"
  8. )
  9. func TestLoadCrowdsec(t *testing.T) {
  10. acquisFullPath, err := filepath.Abs("./testdata/acquis.yaml")
  11. require.NoError(t, err)
  12. acquisInDirFullPath, err := filepath.Abs("./testdata/acquis/acquis.yaml")
  13. require.NoError(t, err)
  14. acquisDirFullPath, err := filepath.Abs("./testdata/acquis")
  15. require.NoError(t, err)
  16. contextFileFullPath, err := filepath.Abs("./testdata/context.yaml")
  17. require.NoError(t, err)
  18. tests := []struct {
  19. name string
  20. input *Config
  21. expected *CrowdsecServiceCfg
  22. expectedErr string
  23. }{
  24. {
  25. name: "basic valid configuration",
  26. input: &Config{
  27. ConfigPaths: &ConfigurationPaths{
  28. ConfigDir: "./testdata",
  29. DataDir: "./data",
  30. HubDir: "./hub",
  31. },
  32. API: &APICfg{
  33. Client: &LocalApiClientCfg{
  34. CredentialsFilePath: "./testdata/lapi-secrets.yaml",
  35. },
  36. },
  37. Crowdsec: &CrowdsecServiceCfg{
  38. AcquisitionFilePath: "./testdata/acquis.yaml",
  39. SimulationFilePath: "./testdata/simulation.yaml",
  40. ConsoleContextPath: "./testdata/context.yaml",
  41. ConsoleContextValueLength: 2500,
  42. },
  43. },
  44. expected: &CrowdsecServiceCfg{
  45. Enable: ptr.Of(true),
  46. AcquisitionDirPath: "",
  47. ConsoleContextPath: contextFileFullPath,
  48. AcquisitionFilePath: acquisFullPath,
  49. ConfigDir: "./testdata",
  50. DataDir: "./data",
  51. HubDir: "./hub",
  52. // XXX: need to ensure a default here
  53. HubIndexFile: "",
  54. BucketsRoutinesCount: 1,
  55. ParserRoutinesCount: 1,
  56. OutputRoutinesCount: 1,
  57. ConsoleContextValueLength: 2500,
  58. AcquisitionFiles: []string{acquisFullPath},
  59. SimulationFilePath: "./testdata/simulation.yaml",
  60. ContextToSend: map[string][]string{
  61. "source_ip": {"evt.Parsed.source_ip"},
  62. },
  63. SimulationConfig: &SimulationConfig{
  64. Simulation: ptr.Of(false),
  65. },
  66. },
  67. },
  68. {
  69. name: "basic valid configuration with acquisition dir",
  70. input: &Config{
  71. ConfigPaths: &ConfigurationPaths{
  72. ConfigDir: "./testdata",
  73. DataDir: "./data",
  74. HubDir: "./hub",
  75. },
  76. API: &APICfg{
  77. Client: &LocalApiClientCfg{
  78. CredentialsFilePath: "./testdata/lapi-secrets.yaml",
  79. },
  80. },
  81. Crowdsec: &CrowdsecServiceCfg{
  82. AcquisitionFilePath: "./testdata/acquis.yaml",
  83. AcquisitionDirPath: "./testdata/acquis/",
  84. SimulationFilePath: "./testdata/simulation.yaml",
  85. ConsoleContextPath: "./testdata/context.yaml",
  86. },
  87. },
  88. expected: &CrowdsecServiceCfg{
  89. Enable: ptr.Of(true),
  90. AcquisitionDirPath: acquisDirFullPath,
  91. AcquisitionFilePath: acquisFullPath,
  92. ConsoleContextPath: contextFileFullPath,
  93. ConfigDir: "./testdata",
  94. // XXX: need to ensure a default here
  95. HubIndexFile: "",
  96. DataDir: "./data",
  97. HubDir: "./hub",
  98. BucketsRoutinesCount: 1,
  99. ParserRoutinesCount: 1,
  100. OutputRoutinesCount: 1,
  101. ConsoleContextValueLength: 0,
  102. AcquisitionFiles: []string{acquisFullPath, acquisInDirFullPath},
  103. ContextToSend: map[string][]string{
  104. "source_ip": {"evt.Parsed.source_ip"},
  105. },
  106. SimulationFilePath: "./testdata/simulation.yaml",
  107. SimulationConfig: &SimulationConfig{
  108. Simulation: ptr.Of(false),
  109. },
  110. },
  111. },
  112. {
  113. name: "no acquisition file and dir",
  114. input: &Config{
  115. ConfigPaths: &ConfigurationPaths{
  116. ConfigDir: "./testdata",
  117. DataDir: "./data",
  118. HubDir: "./hub",
  119. },
  120. API: &APICfg{
  121. Client: &LocalApiClientCfg{
  122. CredentialsFilePath: "./testdata/lapi-secrets.yaml",
  123. },
  124. },
  125. Crowdsec: &CrowdsecServiceCfg{
  126. ConsoleContextPath: "./testdata/context.yaml",
  127. ConsoleContextValueLength: 10,
  128. },
  129. },
  130. expected: &CrowdsecServiceCfg{
  131. Enable: ptr.Of(true),
  132. AcquisitionDirPath: "",
  133. AcquisitionFilePath: "",
  134. ConfigDir: "./testdata",
  135. // XXX: need to ensure a default here
  136. HubIndexFile: "",
  137. DataDir: "./data",
  138. HubDir: "./hub",
  139. ConsoleContextPath: contextFileFullPath,
  140. BucketsRoutinesCount: 1,
  141. ParserRoutinesCount: 1,
  142. OutputRoutinesCount: 1,
  143. ConsoleContextValueLength: 10,
  144. AcquisitionFiles: []string{},
  145. SimulationFilePath: "",
  146. ContextToSend: map[string][]string{
  147. "source_ip": {"evt.Parsed.source_ip"},
  148. },
  149. SimulationConfig: &SimulationConfig{
  150. Simulation: ptr.Of(false),
  151. },
  152. },
  153. },
  154. {
  155. name: "non existing acquisition file",
  156. input: &Config{
  157. ConfigPaths: &ConfigurationPaths{
  158. ConfigDir: "./testdata",
  159. DataDir: "./data",
  160. HubDir: "./hub",
  161. },
  162. API: &APICfg{
  163. Client: &LocalApiClientCfg{
  164. CredentialsFilePath: "./testdata/lapi-secrets.yaml",
  165. },
  166. },
  167. Crowdsec: &CrowdsecServiceCfg{
  168. ConsoleContextPath: "",
  169. AcquisitionFilePath: "./testdata/acquis_not_exist.yaml",
  170. },
  171. },
  172. expectedErr: cstest.FileNotFoundMessage,
  173. },
  174. {
  175. name: "agent disabled",
  176. input: &Config{
  177. ConfigPaths: &ConfigurationPaths{
  178. ConfigDir: "./testdata",
  179. DataDir: "./data",
  180. HubDir: "./hub",
  181. },
  182. },
  183. expected: nil,
  184. },
  185. }
  186. for _, tc := range tests {
  187. tc := tc
  188. t.Run(tc.name, func(t *testing.T) {
  189. err := tc.input.LoadCrowdsec()
  190. cstest.RequireErrorContains(t, err, tc.expectedErr)
  191. if tc.expectedErr != "" {
  192. return
  193. }
  194. require.Equal(t, tc.expected, tc.input.Crowdsec)
  195. })
  196. }
  197. }