66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package agent
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"net"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/hashicorp/go-hclog"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestAPIServers_WithServiceRunError(t *testing.T) {
|
||
|
servers := NewAPIServers(hclog.New(nil))
|
||
|
|
||
|
server1, chErr1 := newAPIServerStub()
|
||
|
server2, _ := newAPIServerStub()
|
||
|
|
||
|
t.Run("Start", func(t *testing.T) {
|
||
|
servers.Start(server1)
|
||
|
servers.Start(server2)
|
||
|
|
||
|
select {
|
||
|
case <-servers.failed:
|
||
|
t.Fatalf("expected servers to still be running")
|
||
|
case <-time.After(5 * time.Millisecond):
|
||
|
}
|
||
|
})
|
||
|
|
||
|
err := fmt.Errorf("oops, I broke")
|
||
|
|
||
|
t.Run("server exit non-nil error", func(t *testing.T) {
|
||
|
chErr1 <- err
|
||
|
|
||
|
select {
|
||
|
case <-servers.failed:
|
||
|
case <-time.After(time.Second):
|
||
|
t.Fatalf("expected failed channel to be closed")
|
||
|
}
|
||
|
})
|
||
|
|
||
|
t.Run("shutdown remaining services", func(t *testing.T) {
|
||
|
servers.Shutdown(context.Background())
|
||
|
require.Equal(t, err, servers.WaitForShutdown())
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func newAPIServerStub() (apiServer, chan error) {
|
||
|
chErr := make(chan error)
|
||
|
return apiServer{
|
||
|
Protocol: "http",
|
||
|
Addr: &net.TCPAddr{
|
||
|
IP: net.ParseIP("127.0.0.11"),
|
||
|
Port: 5505,
|
||
|
},
|
||
|
Run: func() error {
|
||
|
return <-chErr
|
||
|
},
|
||
|
Shutdown: func(ctx context.Context) error {
|
||
|
close(chErr)
|
||
|
return nil
|
||
|
},
|
||
|
}, chErr
|
||
|
}
|