MCPcopy
hub / github.com/grafana/tempo / Test_LeaderElectionWithBrokenSeedFile

Function Test_LeaderElectionWithBrokenSeedFile

pkg/usagestats/reporter_test.go:73–127  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

71}
72
73func Test_LeaderElectionWithBrokenSeedFile(t *testing.T) {
74 stabilityCheckInterval = 100 * time.Millisecond
75
76 result := make(chan *ClusterSeed, 10)
77
78 objectClient, err := local.NewBackend(&local.Config{
79 Path: t.TempDir(),
80 })
81 require.NoError(t, err)
82
83 // Ensure that leader election succeeds even when the seed file has been
84 // corrupted. This means that we don't need to extend the interface of the
85 // backend in order to delete a corrupted seed file.
86 err = objectClient.Write(context.Background(), backend.ClusterSeedFileName, []string{}, bytes.NewReader([]byte("{")), 1, nil)
87 require.NoError(t, err)
88
89 for i := 0; i < 3; i++ {
90 go func() {
91 r, leaderErr := NewReporter(Config{Leader: true, Enabled: true}, kv.Config{
92 Store: "inmemory",
93 }, objectClient, objectClient, log.NewNopLogger(), nil)
94 require.NoError(t, leaderErr)
95 r.init(context.Background())
96 result <- r.cluster
97 }()
98 }
99 for i := 0; i < 7; i++ {
100 go func() {
101 r, nonLeaderError := NewReporter(Config{Leader: false, Enabled: true}, kv.Config{
102 Store: "inmemory",
103 }, objectClient, objectClient, log.NewNopLogger(), nil)
104 require.NoError(t, nonLeaderError)
105 r.init(context.Background())
106 result <- r.cluster
107 }()
108 }
109
110 var UID []string
111 for i := 0; i < 10; i++ {
112 cluster := <-result
113 require.NotNil(t, cluster)
114 UID = append(UID, cluster.UID)
115 }
116 first := UID[0]
117 for _, uid := range UID {
118 require.Equal(t, first, uid)
119 }
120 kvClient, err := kv.NewClient(kv.Config{Store: "inmemory"}, JSONCodec, nil, log.NewNopLogger())
121 require.NoError(t, err)
122 // verify that the ID found is also correctly stored in the kv store and not overridden by another leader.
123 data, err := kvClient.Get(context.Background(), seedKey)
124 require.NoError(t, err)
125 t.Logf("data: %+v", data.(*ClusterSeed))
126 require.Equal(t, data.(*ClusterSeed).UID, first)
127}
128
129func Test_ReportLoop(t *testing.T) {
130 origReportCheckInterval := reportCheckInterval

Callers

nothing calls this directly

Calls 6

WriteMethod · 0.95
initMethod · 0.95
GetMethod · 0.95
NewBackendFunction · 0.92
NewReporterFunction · 0.85
EqualMethod · 0.45

Tested by

no test coverage detected