Implement catalog startup diagnostics (T-616)
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"softbox.local/core/application"
|
||||
)
|
||||
|
||||
func TestStartCatalogBootstrapPublishesThroughRuntime(t *testing.T) {
|
||||
runtime := application.NewRuntime(1)
|
||||
done := startCatalogBootstrap(context.Background(), runtime, application.CatalogSnapshotLoaderFunc(func(context.Context) (application.CatalogSnapshot, error) {
|
||||
return application.CatalogSnapshot{Source: application.CatalogSourceRemote, Items: []application.CatalogListItem{{ID: "tool", Name: "Tool", Version: "1.0.0"}}}, nil
|
||||
}))
|
||||
if err := <-done; err != nil {
|
||||
t.Fatalf("bootstrap error = %v", err)
|
||||
}
|
||||
event := <-runtime.Events()
|
||||
if event.Type != application.EventCatalogRefreshed {
|
||||
t.Fatalf("event type = %q", event.Type)
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,10 @@ func main() {
|
||||
}
|
||||
|
||||
func run() error {
|
||||
return runWithCatalogLoader(application.UnconfiguredCatalogLoader{})
|
||||
}
|
||||
|
||||
func runWithCatalogLoader(loader application.CatalogSnapshotLoader) error {
|
||||
platform := windows.New()
|
||||
window := new(app.Window)
|
||||
window.Option(
|
||||
@@ -59,10 +63,18 @@ func run() error {
|
||||
window.Invalidate,
|
||||
)
|
||||
}()
|
||||
catalogDone := startCatalogBootstrap(eventContext, runtime, loader)
|
||||
defer func() {
|
||||
cancelEvents()
|
||||
runtime.Close()
|
||||
relay.Close()
|
||||
if bootstrapErr := <-catalogDone; bootstrapErr != nil &&
|
||||
!errors.Is(bootstrapErr, context.Canceled) &&
|
||||
!errors.Is(bootstrapErr, application.ErrCatalogSourceUnconfigured) &&
|
||||
!errors.Is(bootstrapErr, application.ErrRuntimeClosed) &&
|
||||
!errors.Is(bootstrapErr, application.ErrEventRelayClosed) {
|
||||
log.Printf("%s catalog bootstrap failed", core.ProductName)
|
||||
}
|
||||
if pumpErr := <-pumpDone; pumpErr != nil &&
|
||||
!errors.Is(pumpErr, context.Canceled) &&
|
||||
!errors.Is(pumpErr, application.ErrEventRelayClosed) {
|
||||
@@ -85,3 +97,15 @@ func run() error {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startCatalogBootstrap(
|
||||
ctx context.Context,
|
||||
runtime *application.Runtime,
|
||||
loader application.CatalogSnapshotLoader,
|
||||
) <-chan error {
|
||||
done := make(chan error, 1)
|
||||
go func() {
|
||||
done <- application.NewCatalogBootstrap(loader, runtime).Run(ctx)
|
||||
}()
|
||||
return done
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user