worker_test API

worker_test

package

API reference for the worker_test package.

F
function

TestPoolExecutesSubmittedTasks

Parameters

pkg/worker/worker_test.go:13-35
func TestPoolExecutesSubmittedTasks(t *testing.T)

{
	pool := worker.NewPool(3)
	defer pool.Shutdown()

	var count int32
	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		ok := pool.Submit(func(ctx context.Context) error {
			defer wg.Done()
			atomic.AddInt32(&count, 1)
			return nil
		})
		if !ok {
			t.Fatalf("Submit() = false, want true")
		}
	}

	wg.Wait()
	if count != 10 {
		t.Fatalf("executed tasks = %d, want %d", count, 10)
	}
}
F
function

TestPoolRejectsTasksAfterShutdown

Parameters

pkg/worker/worker_test.go:37-44
func TestPoolRejectsTasksAfterShutdown(t *testing.T)

{
	pool := worker.NewPool(1)
	pool.Shutdown()

	if ok := pool.Submit(func(ctx context.Context) error { return nil }); ok {
		t.Fatalf("Submit() after Shutdown() = true, want false")
	}
}
F
function

TestPoolDefaultsToOneWorker

Parameters

pkg/worker/worker_test.go:46-62
func TestPoolDefaultsToOneWorker(t *testing.T)

{
	pool := worker.NewPool(0)

	var count int32
	ok := pool.Submit(func(ctx context.Context) error {
		atomic.AddInt32(&count, 1)
		return nil
	})
	if !ok {
		t.Fatalf("Submit() = false, want true")
	}

	pool.Shutdown()
	if count != 1 {
		t.Fatalf("executed tasks = %d, want %d", count, 1)
	}
}
F
function

TestSubmitConcurrentShutdown

Parameters

pkg/worker/worker_test.go:64-82
func TestSubmitConcurrentShutdown(t *testing.T)

{
	// Run many goroutines submitting while Shutdown fires — should never panic
	for iter := 0; iter < 100; iter++ {
		pool := worker.NewPool(2)
		var wg sync.WaitGroup
		for i := 0; i < 10; i++ {
			wg.Add(1)
			go func() {
				defer wg.Done()
				pool.Submit(func(ctx context.Context) error {
					time.Sleep(time.Millisecond)
					return nil
				})
			}()
		}
		pool.Shutdown()
		wg.Wait()
	}
}