mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Moves out node pool manager behind an extension using runner pool abstraction (Part 2) (#862)
* 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
This commit is contained in:
84
api/agent/static_pool_test.go
Normal file
84
api/agent/static_pool_test.go
Normal file
@@ -0,0 +1,84 @@
|
||||
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))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user