mirror of https://github.com/statping/statping
Add tests for grpc checks
Signed-off-by: thatInfrastructureGuy <thatInfrastructureGuy@gmail.com>pull/806/head
parent
24eeec99c9
commit
887f8cc9be
|
@ -0,0 +1,135 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/statping/statping/types/null"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/health"
|
||||
healthpb "google.golang.org/grpc/health/grpc_health_v1"
|
||||
)
|
||||
|
||||
// grpcServerDef is function type.
|
||||
// Consumed by Test data.
|
||||
type grpcServerDef func(int) *grpc.Server
|
||||
|
||||
// Test Data: Simulates testing scenarios
|
||||
var testdata = []struct {
|
||||
grpcService grpcServerDef
|
||||
clientChecker *Service
|
||||
}{
|
||||
{
|
||||
grpcService: func(port int) *grpc.Server {
|
||||
return grpcServer(port, true)
|
||||
},
|
||||
clientChecker: &Service{
|
||||
Name: "GRPC Server with Health check",
|
||||
Domain: "localhost",
|
||||
Port: 50053,
|
||||
Expected: null.NewNullString("status:SERVING"),
|
||||
ExpectedStatus: 1,
|
||||
Type: "grpc",
|
||||
Timeout: 3,
|
||||
VerifySSL: null.NewNullBool(false),
|
||||
},
|
||||
},
|
||||
{
|
||||
grpcService: func(port int) *grpc.Server {
|
||||
return grpcServer(port, true)
|
||||
},
|
||||
clientChecker: &Service{
|
||||
Name: "Check TLS endpoint on GRPC Server with TLS disabled",
|
||||
Domain: "localhost",
|
||||
Port: 50054,
|
||||
Expected: null.NewNullString(""),
|
||||
ExpectedStatus: 0,
|
||||
Type: "grpc",
|
||||
Timeout: 1,
|
||||
VerifySSL: null.NewNullBool(true),
|
||||
},
|
||||
},
|
||||
{
|
||||
grpcService: func(port int) *grpc.Server {
|
||||
return grpcServer(port, false)
|
||||
},
|
||||
clientChecker: &Service{
|
||||
Name: "Check GRPC Server without Health check endpoint",
|
||||
Domain: "localhost",
|
||||
Port: 50055,
|
||||
Expected: null.NewNullString(""),
|
||||
ExpectedStatus: 0,
|
||||
Type: "grpc",
|
||||
Timeout: 1,
|
||||
VerifySSL: null.NewNullBool(false),
|
||||
},
|
||||
},
|
||||
{
|
||||
grpcService: func(port int) *grpc.Server {
|
||||
return grpcServer(50056, true)
|
||||
},
|
||||
clientChecker: &Service{
|
||||
Name: "Check where no GRPC Server exists",
|
||||
Domain: "localhost",
|
||||
Port: 1000,
|
||||
Expected: null.NewNullString(""),
|
||||
ExpectedStatus: 0,
|
||||
Type: "grpc",
|
||||
Timeout: 1,
|
||||
VerifySSL: null.NewNullBool(false),
|
||||
},
|
||||
},
|
||||
{
|
||||
grpcService: func(port int) *grpc.Server {
|
||||
return grpcServer(50057, true)
|
||||
},
|
||||
clientChecker: &Service{
|
||||
Name: "Check where no GRPC Server exists (Verify TLS)",
|
||||
Domain: "localhost",
|
||||
Port: 1000,
|
||||
Expected: null.NewNullString(""),
|
||||
ExpectedStatus: 0,
|
||||
Type: "grpc",
|
||||
Timeout: 1,
|
||||
VerifySSL: null.NewNullBool(true),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// grpcServer creates grpc Service with optional parameters.
|
||||
func grpcServer(port int, enableHealthCheck bool) *grpc.Server {
|
||||
portString := strconv.Itoa(port)
|
||||
server := grpc.NewServer()
|
||||
lis, err := net.Listen("tcp", "localhost:"+portString)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
if enableHealthCheck {
|
||||
healthServer := health.NewServer()
|
||||
healthServer.SetServingStatus("Test GRPC Service", healthpb.HealthCheckResponse_SERVING)
|
||||
healthpb.RegisterHealthServer(server, healthServer)
|
||||
go server.Serve(lis)
|
||||
}
|
||||
return server
|
||||
}
|
||||
|
||||
// TestCheckGrpc ranges over the testdata struct.
|
||||
// Examines checkGrpc() function
|
||||
func TestCheckGrpc(t *testing.T) {
|
||||
for _, testscenario := range testdata {
|
||||
v := testscenario
|
||||
t.Run(v.clientChecker.Name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
server := v.grpcService(v.clientChecker.Port)
|
||||
defer server.Stop()
|
||||
v.clientChecker.CheckService(false)
|
||||
if v.clientChecker.LastStatusCode != v.clientChecker.ExpectedStatus || strings.TrimSpace(v.clientChecker.LastResponse) != v.clientChecker.Expected.String {
|
||||
t.Errorf("Expected message: '%v', Got message: '%v' , Expected Status: '%v', Got Status: '%v'", v.clientChecker.Expected, v.clientChecker.LastResponse, v.clientChecker.ExpectedStatus, v.clientChecker.LastStatusCode)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue