package svc import ( "context" "errors" "sync/atomic" ) var Opened, Closed, DownloadClosed atomic.Int32 var Started = make(chan struct{}, 1) var Release = make(chan struct{}) var Current atomic.Pointer[ServiceContext] var FatalDependency = errors.New("test dependency cannot continue") // This fake client exercises the same lifetime contract as a database/client. type Client struct{} func initClient(ctx context.Context, c *ServiceContext) error { Current.Store(c) Opened.Add(1) c.Client = &Client{} c.OnClose(func() error { Closed.Add(1); c.Logger.Info("test.client.closed"); return nil }) if c.Config.BackgroundMode != "" { if err := initBackground(c); err != nil { return err } } if c.Config.FailInit { return errors.New("client initialization failed") } if c.Config.ShutdownInit { c.RequestShutdown(FatalDependency) return nil } return ctx.Err() }