mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
* Move out node-pool manager and replace it with RunnerPool extension * adds extension points for runner pools in load-balanced mode * adds error to return values in RunnerPool and Runner interfaces * Implements runner pool contract with context-aware shutdown * fixes issue with range * fixes tests to use runner abstraction * adds empty test file as a workaround for build requiring go source files in top-level package * removes flappy timeout test * update docs to reflect runner pool setup * refactors system tests to use runner abstraction * removes poolmanager * moves runner interfaces from models to api/runnerpool package * Adds a second runner to pool docs example * explicitly check for request spillover to second runner in test * moves runner pool package name for system tests * renames runner pool pointer variable for consistency * pass model json to runner * automatically cast to http.ResponseWriter in load-balanced call case * allow overriding of server RunnerPool via a programmatic ServerOption * fixes return type of ResponseWriter in test * move Placer interface to runnerpool package * moves hash-based placer out of open source project * removes siphash from Gopkg.lock
85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
pool "github.com/fnproject/fn/api/runnerpool"
|
|
)
|
|
|
|
func setupStaticPool(runners []string) pool.RunnerPool {
|
|
return newStaticRunnerPool(runners, mockRunnerFactory)
|
|
}
|
|
|
|
type mockStaticRunner struct {
|
|
address string
|
|
}
|
|
|
|
func (r *mockStaticRunner) TryExec(ctx context.Context, call pool.RunnerCall) (bool, error) {
|
|
return true, nil
|
|
}
|
|
|
|
func (r *mockStaticRunner) Close(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
func (r *mockStaticRunner) Address() string {
|
|
return r.address
|
|
}
|
|
|
|
func mockRunnerFactory(addr string) (pool.Runner, error) {
|
|
return &mockStaticRunner{address: addr}, nil
|
|
}
|
|
|
|
func TestNewStaticPool(t *testing.T) {
|
|
addrs := []string{"127.0.0.1:8080", "127.0.0.1:8081"}
|
|
np := setupStaticPool(addrs)
|
|
|
|
runners, err := np.Runners(nil)
|
|
if err != nil {
|
|
t.Fatalf("Failed to list runners %v", err)
|
|
}
|
|
if len(runners) != len(addrs) {
|
|
t.Fatalf("Invalid number of runners %v", len(runners))
|
|
}
|
|
}
|
|
|
|
func TestAddNodeToPool(t *testing.T) {
|
|
addrs := []string{"127.0.0.1:8080", "127.0.0.1:8081"}
|
|
np := setupStaticPool(addrs).(*staticRunnerPool)
|
|
np.AddRunner("127.0.0.1:8082")
|
|
|
|
runners, err := np.Runners(nil)
|
|
if err != nil {
|
|
t.Fatalf("Failed to list runners %v", err)
|
|
}
|
|
if len(runners) != 3 {
|
|
t.Fatalf("Invalid number of runners %v", len(runners))
|
|
}
|
|
}
|
|
|
|
func TestRemoveNodeFromPool(t *testing.T) {
|
|
addrs := []string{"127.0.0.1:8080", "127.0.0.1:8081"}
|
|
np := setupStaticPool(addrs).(*staticRunnerPool)
|
|
np.RemoveRunner("127.0.0.1:8081")
|
|
|
|
runners, err := np.Runners(nil)
|
|
if err != nil {
|
|
t.Fatalf("Failed to list runners %v", err)
|
|
}
|
|
|
|
if len(runners) != 1 {
|
|
t.Fatalf("Invalid number of runners %v", len(runners))
|
|
}
|
|
|
|
np.RemoveRunner("127.0.0.1:8081")
|
|
|
|
runners, err = np.Runners(nil)
|
|
if err != nil {
|
|
t.Fatalf("Failed to list runners %v", err)
|
|
}
|
|
if len(runners) != 1 {
|
|
t.Fatalf("Invalid number of runners %v", len(runners))
|
|
}
|
|
}
|