67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package application
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestRuntimePublish(t *testing.T) {
|
|
runtime := NewRuntime(1)
|
|
event := Event{
|
|
Type: EventDownloadStarted,
|
|
RequestID: "request-1",
|
|
AppID: "json-parser",
|
|
}
|
|
|
|
if err := runtime.Publish(context.Background(), event); err != nil {
|
|
t.Fatalf("Publish() error = %v", err)
|
|
}
|
|
|
|
got := <-runtime.Events()
|
|
if got != event {
|
|
t.Fatalf("Events() got %#v, want %#v", got, event)
|
|
}
|
|
}
|
|
|
|
func TestRuntimeRejectsInvalidEvent(t *testing.T) {
|
|
runtime := NewRuntime(1)
|
|
|
|
err := runtime.Publish(context.Background(), Event{Type: EventType("Unknown")})
|
|
if !errors.Is(err, ErrInvalidEvent) {
|
|
t.Fatalf("Publish() error = %v, want %v", err, ErrInvalidEvent)
|
|
}
|
|
}
|
|
|
|
func TestRuntimePublishHonorsContextCancellation(t *testing.T) {
|
|
runtime := NewRuntime(1)
|
|
if err := runtime.Publish(context.Background(), Event{Type: EventDownloadStarted}); err != nil {
|
|
t.Fatalf("first Publish() error = %v", err)
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
cancel()
|
|
|
|
err := runtime.Publish(ctx, Event{Type: EventDownloadProgress})
|
|
if !errors.Is(err, context.Canceled) {
|
|
t.Fatalf("blocked Publish() error = %v, want %v", err, context.Canceled)
|
|
}
|
|
}
|
|
|
|
func TestRuntimeClose(t *testing.T) {
|
|
runtime := NewRuntime(1)
|
|
runtime.Close()
|
|
runtime.Close()
|
|
|
|
select {
|
|
case <-runtime.Done():
|
|
default:
|
|
t.Fatal("Done() should be closed")
|
|
}
|
|
|
|
err := runtime.Publish(context.Background(), Event{Type: EventDownloadStarted})
|
|
if !errors.Is(err, ErrRuntimeClosed) {
|
|
t.Fatalf("Publish() error = %v, want %v", err, ErrRuntimeClosed)
|
|
}
|
|
}
|