mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-10-21 12:14:28 +00:00
test: Add unit tests for service discovery and message queue with integration test skips
- Add discovery_test.go with Service and ServiceDiscovery struct tests - Add integration test placeholders for service registration, discovery, deregistration, and health checks - Add mq_test.go with Message serialization and profile event tests - Add integration test placeholders for RabbitMQ connectivity, queue declaration, and publish/consume flow - Add github.com/stretchr/testify v1.11.1 to carrier-connector dependencies
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package discovery
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
// TestServiceRegistration tests service registration with Consul
|
||||
func TestServiceRegistration(t *testing.T) {
|
||||
// Skip if Consul is not available
|
||||
t.Skip("Skipping integration test - requires Consul server")
|
||||
}
|
||||
|
||||
// TestServiceDiscovery tests service discovery from Consul
|
||||
func TestServiceDiscovery(t *testing.T) {
|
||||
// Skip if Consul is not available
|
||||
t.Skip("Skipping integration test - requires Consul server")
|
||||
}
|
||||
|
||||
// TestServiceDeregistration tests service deregistration from Consul
|
||||
func TestServiceDeregistration(t *testing.T) {
|
||||
// Skip if Consul is not available
|
||||
t.Skip("Skipping integration test - requires Consul server")
|
||||
}
|
||||
|
||||
// TestServiceStruct tests the Service struct
|
||||
func TestServiceStruct(t *testing.T) {
|
||||
service := Service{
|
||||
ID: "test-service-1",
|
||||
Name: "api-server",
|
||||
Address: "localhost",
|
||||
Port: 8080,
|
||||
Tags: []string{"api", "telecom"},
|
||||
}
|
||||
|
||||
assert.Equal(t, "test-service-1", service.ID)
|
||||
assert.Equal(t, "api-server", service.Name)
|
||||
assert.Equal(t, "localhost", service.Address)
|
||||
assert.Equal(t, 8080, service.Port)
|
||||
assert.Equal(t, []string{"api", "telecom"}, service.Tags)
|
||||
}
|
||||
|
||||
// TestServiceDiscoveryStruct tests the ServiceDiscovery struct
|
||||
func TestServiceDiscoveryStruct(t *testing.T) {
|
||||
// This test verifies the struct can be created
|
||||
// Actual connection testing requires a running Consul instance
|
||||
assert.NotNil(t, ServiceDiscovery{})
|
||||
}
|
||||
|
||||
// TestDiscoverService tests the Discover method
|
||||
func TestDiscoverService(t *testing.T) {
|
||||
// Skip if Consul is not available
|
||||
t.Skip("Skipping integration test - requires Consul server")
|
||||
}
|
||||
|
||||
// TestHealthCheck tests health check of discovered services
|
||||
func TestHealthCheck(t *testing.T) {
|
||||
// Skip if Consul is not available
|
||||
t.Skip("Skipping integration test - requires Consul server")
|
||||
}
|
||||
@@ -8,6 +8,7 @@ require (
|
||||
github.com/prometheus/client_golang v1.20.5
|
||||
github.com/rabbitmq/amqp091-go v1.11.0
|
||||
github.com/rs/zerolog v1.35.0
|
||||
github.com/stretchr/testify v1.11.1
|
||||
gorm.io/driver/postgres v1.6.0
|
||||
gorm.io/gorm v1.31.1
|
||||
)
|
||||
@@ -19,6 +20,7 @@ require (
|
||||
github.com/bytedance/sonic/loader v0.5.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cloudwego/base64x v0.1.6 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.12 // indirect
|
||||
github.com/gin-contrib/sse v1.1.0 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
@@ -42,6 +44,7 @@ require (
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.55.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
@@ -57,4 +60,5 @@ require (
|
||||
golang.org/x/sys v0.43.0 // indirect
|
||||
golang.org/x/text v0.36.0 // indirect
|
||||
google.golang.org/protobuf v1.36.10 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
@@ -54,6 +54,10 @@ github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2
|
||||
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
|
||||
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||
@@ -87,6 +91,8 @@ github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SA
|
||||
github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
|
||||
github.com/rabbitmq/amqp091-go v1.11.0 h1:HxIctVm9Gid/Vtn706necmZ7Wj6pgGI2eqplRbEY8O8=
|
||||
github.com/rabbitmq/amqp091-go v1.11.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||
github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI=
|
||||
github.com/rs/zerolog v1.35.0/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
@@ -126,6 +132,8 @@ golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
|
||||
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
|
||||
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package mq
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
// TestMessageQueue_ProfileEvent tests publishing profile events
|
||||
func TestMessageQueue_ProfileEvent(t *testing.T) {
|
||||
// Skip if RabbitMQ is not available
|
||||
t.Skip("Skipping integration test - requires RabbitMQ server")
|
||||
}
|
||||
|
||||
// TestMessageQueue_Connectivity tests connection to RabbitMQ
|
||||
func TestMessageQueue_Connectivity(t *testing.T) {
|
||||
// Skip if RabbitMQ is not available
|
||||
t.Skip("Skipping integration test - requires RabbitMQ server")
|
||||
}
|
||||
|
||||
// TestMessageQueue_DeclareQueue tests queue declaration
|
||||
func TestMessageQueue_DeclareQueue(t *testing.T) {
|
||||
// Skip if RabbitMQ is not available
|
||||
t.Skip("Skipping integration test - requires RabbitMQ server")
|
||||
}
|
||||
|
||||
// TestMessageQueue_PublishConsume tests publish and consume flow
|
||||
func TestMessageQueue_PublishConsume(t *testing.T) {
|
||||
// Skip if RabbitMQ is not available
|
||||
t.Skip("Skipping integration test - requires RabbitMQ server")
|
||||
}
|
||||
|
||||
// TestProfileEventSerialization tests message serialization
|
||||
func TestProfileEventSerialization(t *testing.T) {
|
||||
msg := Message{
|
||||
Type: "profile.downloaded",
|
||||
Payload: map[string]any{
|
||||
"profile_id": "test-iccid-123",
|
||||
"imsi": "123456789012345",
|
||||
"status": "completed",
|
||||
},
|
||||
Timestamp: time.Now(),
|
||||
}
|
||||
|
||||
assert.Equal(t, "profile.downloaded", msg.Type)
|
||||
assert.Equal(t, "test-iccid-123", msg.Payload["profile_id"])
|
||||
assert.Equal(t, "123456789012345", msg.Payload["imsi"])
|
||||
assert.Equal(t, "completed", msg.Payload["status"])
|
||||
assert.False(t, msg.Timestamp.IsZero())
|
||||
}
|
||||
|
||||
// TestPublishProfileEvent tests the convenience method
|
||||
func TestPublishProfileEvent(t *testing.T) {
|
||||
// This would require a mock or real RabbitMQ connection
|
||||
// For now, we test the structure
|
||||
eventType := "profile.deleted"
|
||||
profileID := "test-iccid-456"
|
||||
payload := map[string]any{
|
||||
"executionStatus": "Completed",
|
||||
"statusMessage": "Profile deleted successfully",
|
||||
}
|
||||
|
||||
assert.Equal(t, "profile.deleted", eventType)
|
||||
assert.Equal(t, "test-iccid-456", profileID)
|
||||
assert.Equal(t, "Completed", payload["executionStatus"])
|
||||
}
|
||||
Reference in New Issue
Block a user