37 lines
885 B
Go
37 lines
885 B
Go
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()
|
|
}
|