(t *testing.T)
| 227 | } |
| 228 | |
| 229 | func TestAlertmanagerSharding(t *testing.T) { |
| 230 | tests := map[string]struct { |
| 231 | replicationFactor int |
| 232 | }{ |
| 233 | "RF = 2": {replicationFactor: 2}, |
| 234 | "RF = 3": {replicationFactor: 3}, |
| 235 | } |
| 236 | |
| 237 | for testName, testCfg := range tests { |
| 238 | t.Run(testName, func(t *testing.T) { |
| 239 | s, err := e2e.NewScenario(networkName) |
| 240 | require.NoError(t, err) |
| 241 | defer s.Close() |
| 242 | |
| 243 | flags := mergeFlags(AlertmanagerFlags(), AlertmanagerS3Flags()) |
| 244 | |
| 245 | // Start dependencies. |
| 246 | consul := e2edb.NewConsul() |
| 247 | minio := e2edb.NewMinio(9000, alertsBucketName) |
| 248 | require.NoError(t, s.StartAndWaitReady(consul, minio)) |
| 249 | |
| 250 | client, err := s3.NewBucketWithConfig(nil, s3.Config{ |
| 251 | Endpoint: minio.HTTPEndpoint(), |
| 252 | Insecure: true, |
| 253 | Bucket: alertsBucketName, |
| 254 | AccessKey: e2edb.MinioAccessKey, |
| 255 | SecretKey: e2edb.MinioSecretKey, |
| 256 | }, "alertmanager-test", nil) |
| 257 | require.NoError(t, err) |
| 258 | |
| 259 | // Create and upload Alertmanager configurations. |
| 260 | for i := 1; i <= 30; i++ { |
| 261 | user := fmt.Sprintf("user-%d", i) |
| 262 | desc := alertspb.AlertConfigDesc{ |
| 263 | RawConfig: simpleAlertmanagerConfig, |
| 264 | User: user, |
| 265 | Templates: []*alertspb.TemplateDesc{}, |
| 266 | } |
| 267 | |
| 268 | d, err := desc.Marshal() |
| 269 | require.NoError(t, err) |
| 270 | err = client.Upload(context.Background(), fmt.Sprintf("/alerts/%s", user), bytes.NewReader(d)) |
| 271 | require.NoError(t, err) |
| 272 | } |
| 273 | |
| 274 | // 3 instances, 30 configurations and a replication factor of 2 or 3. |
| 275 | flags = mergeFlags(flags, AlertmanagerShardingFlags(consul.NetworkHTTPEndpoint(), testCfg.replicationFactor)) |
| 276 | |
| 277 | // Wait for the Alertmanagers to start. |
| 278 | alertmanager1 := e2ecortex.NewAlertmanager("alertmanager-1", flags, "") |
| 279 | alertmanager2 := e2ecortex.NewAlertmanager("alertmanager-2", flags, "") |
| 280 | alertmanager3 := e2ecortex.NewAlertmanager("alertmanager-3", flags, "") |
| 281 | |
| 282 | alertmanagers := e2ecortex.NewCompositeCortexService(alertmanager1, alertmanager2, alertmanager3) |
| 283 | |
| 284 | // Start Alertmanager instances. |
| 285 | for _, am := range alertmanagers.Instances() { |
| 286 | require.NoError(t, s.StartAndWaitReady(am)) |
nothing calls this directly
no test coverage detected