(t *testing.T)
| 174 | } |
| 175 | |
| 176 | func TestAlertmanagerClustering(t *testing.T) { |
| 177 | s, err := e2e.NewScenario(networkName) |
| 178 | require.NoError(t, err) |
| 179 | defer s.Close() |
| 180 | |
| 181 | flags := mergeFlags(AlertmanagerFlags(), AlertmanagerS3Flags()) |
| 182 | |
| 183 | // Start dependencies. |
| 184 | minio := e2edb.NewMinio(9000, alertsBucketName) |
| 185 | require.NoError(t, s.StartAndWaitReady(minio)) |
| 186 | |
| 187 | client, err := s3.NewBucketWithConfig(nil, s3.Config{ |
| 188 | Endpoint: minio.HTTPEndpoint(), |
| 189 | Insecure: true, |
| 190 | Bucket: alertsBucketName, |
| 191 | AccessKey: e2edb.MinioAccessKey, |
| 192 | SecretKey: e2edb.MinioSecretKey, |
| 193 | }, "alertmanager-test", nil) |
| 194 | require.NoError(t, err) |
| 195 | |
| 196 | // Create and upload an Alertmanager configuration. |
| 197 | user := "user-1" |
| 198 | desc := alertspb.AlertConfigDesc{RawConfig: simpleAlertmanagerConfig, User: user, Templates: []*alertspb.TemplateDesc{}} |
| 199 | |
| 200 | d, err := desc.Marshal() |
| 201 | require.NoError(t, err) |
| 202 | err = client.Upload(context.Background(), fmt.Sprintf("/alerts/%s", user), bytes.NewReader(d)) |
| 203 | require.NoError(t, err) |
| 204 | |
| 205 | peers := strings.Join([]string{ |
| 206 | e2e.NetworkContainerHostPort(networkName, "alertmanager-1", e2ecortex.GossipPort), |
| 207 | e2e.NetworkContainerHostPort(networkName, "alertmanager-2", e2ecortex.GossipPort), |
| 208 | }, ",") |
| 209 | flags = mergeFlags(flags, AlertmanagerClusterFlags(peers)) |
| 210 | |
| 211 | // Wait for the Alertmanagers to start. |
| 212 | alertmanager1 := e2ecortex.NewAlertmanager("alertmanager-1", flags, "") |
| 213 | alertmanager2 := e2ecortex.NewAlertmanager("alertmanager-2", flags, "") |
| 214 | |
| 215 | alertmanagers := e2ecortex.NewCompositeCortexService(alertmanager1, alertmanager2) |
| 216 | |
| 217 | // Start Alertmanager instances. |
| 218 | for _, am := range alertmanagers.Instances() { |
| 219 | require.NoError(t, s.StartAndWaitReady(am)) |
| 220 | } |
| 221 | |
| 222 | for _, am := range alertmanagers.Instances() { |
| 223 | require.NoError(t, am.WaitSumMetrics(e2e.Equals(float64(0)), "alertmanager_cluster_health_score")) // Lower means healthier, 0 being totally healthy. |
| 224 | require.NoError(t, am.WaitSumMetrics(e2e.Equals(float64(0)), "alertmanager_cluster_failed_peers")) |
| 225 | require.NoError(t, am.WaitSumMetrics(e2e.Equals(float64(2)), "alertmanager_cluster_members")) |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | func TestAlertmanagerSharding(t *testing.T) { |
| 230 | tests := map[string]struct { |
nothing calls this directly
no test coverage detected