MCPcopy Index your code
hub / github.com/cortexproject/cortex / TestModuleWaitsForAllDependencies

Function TestModuleWaitsForAllDependencies

pkg/util/modules/modules_test.go:186–232  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

184}
185
186func TestModuleWaitsForAllDependencies(t *testing.T) {
187 var serviceA services.Service
188
189 initA := func() (services.Service, error) {
190 serviceA = services.NewIdleService(func(serviceContext context.Context) error {
191 // Slow-starting service. Delay is here to verify that service for C is not started before this service
192 // has finished starting.
193 time.Sleep(1 * time.Second)
194 return nil
195 }, nil)
196
197 return serviceA, nil
198 }
199
200 initC := func() (services.Service, error) {
201 return services.NewIdleService(func(serviceContext context.Context) error {
202 // At this point, serviceA should be Running, because "C" depends (indirectly) on "A".
203 if s := serviceA.State(); s != services.Running {
204 return fmt.Errorf("serviceA has invalid state: %v", s)
205 }
206 return nil
207 }, nil), nil
208 }
209
210 m := NewManager(log.NewNopLogger())
211 m.RegisterModule("A", initA)
212 m.RegisterModule("B", nil)
213 m.RegisterModule("C", initC)
214
215 // C -> B -> A. Even though B has no service, C must still wait for service A to start, before C can start.
216 require.NoError(t, m.AddDependency("B", "A"))
217 require.NoError(t, m.AddDependency("C", "B"))
218
219 servsMap, err := m.InitModuleServices("C")
220 require.NoError(t, err)
221
222 // Build service manager from services, and start it.
223 servs := []services.Service(nil)
224 for _, s := range servsMap {
225 servs = append(servs, s)
226 }
227
228 servManager, err := services.NewManager(servs...)
229 require.NoError(t, err)
230 assert.NoError(t, services.StartManagerAndAwaitHealthy(context.Background(), servManager))
231 assert.NoError(t, services.StopManagerAndAwaitStopped(context.Background(), servManager))
232}

Callers

nothing calls this directly

Calls 9

StateMethod · 0.95
RegisterModuleMethod · 0.95
AddDependencyMethod · 0.95
InitModuleServicesMethod · 0.95
NewIdleServiceFunction · 0.92
NewManagerFunction · 0.92
NewManagerFunction · 0.70

Tested by

no test coverage detected