feat: first
This commit is contained in:
120
tests/integration_test.go
Normal file
120
tests/integration_test.go
Normal file
@@ -0,0 +1,120 @@
|
||||
//go:build integration
|
||||
|
||||
package tests
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
|
||||
"go-grpc-gateway-template/internal/config"
|
||||
"go-grpc-gateway-template/internal/health"
|
||||
"go-grpc-gateway-template/internal/server"
|
||||
helloworldpb "go-grpc-gateway-template/proto/helloworld"
|
||||
)
|
||||
|
||||
func TestIntegration(t *testing.T) {
|
||||
// Create test configuration
|
||||
cfg := &config.Config{
|
||||
Server: config.ServerConfig{
|
||||
GRPCPort: "18080",
|
||||
HTTPPort: "18090",
|
||||
},
|
||||
Log: config.LogConfig{
|
||||
Level: "info",
|
||||
Format: "text",
|
||||
},
|
||||
Metrics: config.MetricsConfig{
|
||||
Enabled: false,
|
||||
},
|
||||
}
|
||||
|
||||
// Start server
|
||||
srv := server.New(cfg)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
go func() {
|
||||
if err := srv.Start(ctx); err != nil {
|
||||
t.Errorf("Server start error: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Wait for server to start
|
||||
time.Sleep(2 * time.Second)
|
||||
defer func() {
|
||||
cancel()
|
||||
srv.Shutdown(context.Background())
|
||||
}()
|
||||
|
||||
t.Run("Health Check", func(t *testing.T) {
|
||||
resp, err := http.Get("http://localhost:18090/health")
|
||||
if err != nil {
|
||||
t.Fatalf("Health check failed: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var healthResp health.Response
|
||||
if err := json.NewDecoder(resp.Body).Decode(&healthResp); err != nil {
|
||||
t.Fatalf("Failed to decode health response: %v", err)
|
||||
}
|
||||
|
||||
if healthResp.Status != "ok" {
|
||||
t.Errorf("Expected status 'ok', got %s", healthResp.Status)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("gRPC API", func(t *testing.T) {
|
||||
conn, err := grpc.Dial("localhost:18080", grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to connect to gRPC server: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
client := helloworldpb.NewGreeterClient(conn)
|
||||
resp, err := client.SayHello(context.Background(), &helloworldpb.HelloRequest{
|
||||
Name: "Integration Test",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("gRPC call failed: %v", err)
|
||||
}
|
||||
|
||||
expectedMessage := "Hello Integration Test"
|
||||
if resp.Message != expectedMessage {
|
||||
t.Errorf("Expected message %s, got %s", expectedMessage, resp.Message)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("HTTP Gateway", func(t *testing.T) {
|
||||
reqBody := strings.NewReader(`{"name": "HTTP Test"}`)
|
||||
resp, err := http.Post("http://localhost:18090/v1/example/echo", "application/json", reqBody)
|
||||
if err != nil {
|
||||
t.Fatalf("HTTP request failed: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Errorf("Expected status 200, got %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var result map[string]interface{}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||
t.Fatalf("Failed to decode response: %v", err)
|
||||
}
|
||||
|
||||
expectedMessage := "Hello HTTP Test"
|
||||
if result["message"] != expectedMessage {
|
||||
t.Errorf("Expected message %s, got %v", expectedMessage, result["message"])
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user