mirror of
https://github.com/lukaszraczylo/go-simple-graphql.git
synced 2026-10-12 00:45:31 +00:00
136 lines
4.2 KiB
Go
136 lines
4.2 KiB
Go
package gql
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func (suite *Tests) TestPoolWarmup() {
|
|
suite.T().Run("should create client with pool warmup disabled by default", func(t *testing.T) {
|
|
// Save original env vars
|
|
originalPoolEnabled := os.Getenv("GRAPHQL_POOL_WARMUP_ENABLED")
|
|
originalEndpoint := os.Getenv("GRAPHQL_ENDPOINT")
|
|
defer func() {
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", originalPoolEnabled)
|
|
os.Setenv("GRAPHQL_ENDPOINT", originalEndpoint)
|
|
}()
|
|
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", "false")
|
|
os.Setenv("GRAPHQL_ENDPOINT", mockServer.URL)
|
|
|
|
client := NewConnection()
|
|
defer client.StopPoolMonitor()
|
|
|
|
assert.False(client.pool_warmup_enabled)
|
|
assert.Equal(5, client.pool_size) // Default size
|
|
})
|
|
|
|
suite.T().Run("should warmup pool when enabled", func(t *testing.T) {
|
|
originalPoolEnabled := os.Getenv("GRAPHQL_POOL_WARMUP_ENABLED")
|
|
originalPoolSize := os.Getenv("GRAPHQL_POOL_SIZE")
|
|
originalEndpoint := os.Getenv("GRAPHQL_ENDPOINT")
|
|
defer func() {
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", originalPoolEnabled)
|
|
os.Setenv("GRAPHQL_POOL_SIZE", originalPoolSize)
|
|
os.Setenv("GRAPHQL_ENDPOINT", originalEndpoint)
|
|
}()
|
|
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", "true")
|
|
os.Setenv("GRAPHQL_POOL_SIZE", "3")
|
|
os.Setenv("GRAPHQL_ENDPOINT", mockServer.URL)
|
|
|
|
startTime := time.Now()
|
|
client := NewConnection()
|
|
defer client.StopPoolMonitor()
|
|
|
|
duration := time.Since(startTime)
|
|
|
|
assert.True(client.pool_warmup_enabled)
|
|
assert.Equal(3, client.pool_size)
|
|
// Warmup should complete relatively quickly for 3 connections
|
|
assert.Less(duration.Seconds(), 5.0, "Pool warmup took too long")
|
|
})
|
|
|
|
suite.T().Run("should use custom warmup query", func(t *testing.T) {
|
|
originalPoolEnabled := os.Getenv("GRAPHQL_POOL_WARMUP_ENABLED")
|
|
originalQuery := os.Getenv("GRAPHQL_POOL_WARMUP_QUERY")
|
|
originalEndpoint := os.Getenv("GRAPHQL_ENDPOINT")
|
|
defer func() {
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", originalPoolEnabled)
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_QUERY", originalQuery)
|
|
os.Setenv("GRAPHQL_ENDPOINT", originalEndpoint)
|
|
}()
|
|
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", "false") // Don't actually warmup, just test configuration
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_QUERY", "query{__schema{queryType{name}}}")
|
|
os.Setenv("GRAPHQL_ENDPOINT", mockServer.URL)
|
|
|
|
client := NewConnection()
|
|
defer client.StopPoolMonitor()
|
|
|
|
assert.Equal("query{__schema{queryType{name}}}", client.pool_warmup_query)
|
|
})
|
|
}
|
|
|
|
func (suite *Tests) TestPoolHealthMonitor() {
|
|
suite.T().Run("should stop pool monitor gracefully", func(t *testing.T) {
|
|
client := CreateTestClient()
|
|
client.pool_warmup_enabled = false
|
|
|
|
// Should not panic
|
|
client.StopPoolMonitor()
|
|
|
|
assert.True(true, "Handled stop gracefully when monitor not running")
|
|
})
|
|
|
|
suite.T().Run("should handle multiple stop calls", func(t *testing.T) {
|
|
originalPoolEnabled := os.Getenv("GRAPHQL_POOL_WARMUP_ENABLED")
|
|
originalPoolSize := os.Getenv("GRAPHQL_POOL_SIZE")
|
|
originalEndpoint := os.Getenv("GRAPHQL_ENDPOINT")
|
|
defer func() {
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", originalPoolEnabled)
|
|
os.Setenv("GRAPHQL_POOL_SIZE", originalPoolSize)
|
|
os.Setenv("GRAPHQL_ENDPOINT", originalEndpoint)
|
|
}()
|
|
|
|
os.Setenv("GRAPHQL_POOL_WARMUP_ENABLED", "true")
|
|
os.Setenv("GRAPHQL_POOL_SIZE", "2")
|
|
os.Setenv("GRAPHQL_ENDPOINT", mockServer.URL)
|
|
|
|
client := NewConnection()
|
|
|
|
// Call stop multiple times - should not panic
|
|
client.StopPoolMonitor()
|
|
client.StopPoolMonitor()
|
|
client.StopPoolMonitor()
|
|
|
|
assert.True(true, "Handled multiple stop calls gracefully")
|
|
})
|
|
}
|
|
|
|
func (suite *Tests) TestPoolHealthCheck() {
|
|
suite.T().Run("should perform health check without panic", func(t *testing.T) {
|
|
client := CreateTestClient()
|
|
client.pool_warmup_enabled = true
|
|
client.pool_size = 2
|
|
client.pool_warmup_query = "query{__typename}"
|
|
|
|
// Perform a health check - should not panic
|
|
client.performPoolHealthCheck()
|
|
|
|
assert.True(true, "Health check completed")
|
|
})
|
|
|
|
suite.T().Run("should refresh pool without panic", func(t *testing.T) {
|
|
client := CreateTestClient()
|
|
client.pool_size = 2
|
|
client.pool_warmup_query = "query{__typename}"
|
|
|
|
// Perform pool refresh - should not panic
|
|
client.refreshConnectionPool()
|
|
|
|
assert.True(true, "Pool refresh completed")
|
|
})
|
|
}
|