141 lines
3.2 KiB
Go
141 lines
3.2 KiB
Go
package nats
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/nats-io/nats.go/jetstream"
|
|
)
|
|
|
|
// TestNatsBasicOperations 测试基础操作
|
|
func TestNatsBasicOperations(t *testing.T) {
|
|
// 测试连接状态
|
|
if !IsConnected() {
|
|
t.Log("NATS 未连接")
|
|
}
|
|
|
|
// 测试连接状态获取
|
|
state := GetConnState()
|
|
t.Logf("当前连接状态: %d", state)
|
|
}
|
|
|
|
// TestNatsMetrics 测试监控指标
|
|
func TestNatsMetrics(t *testing.T) {
|
|
metrics := GetMetrics()
|
|
t.Logf("发布计数: %d", metrics.PublishCount.Load())
|
|
t.Logf("发布错误: %d", metrics.PublishError.Load())
|
|
t.Logf("请求计数: %d", metrics.RequestCount.Load())
|
|
}
|
|
|
|
// TestNatsConnStateListener 测试连接状态监听
|
|
func TestNatsConnStateListener(t *testing.T) {
|
|
listener := func(state ConnState, err error) {
|
|
fmt.Printf("连接状态变化: %d, 错误: %v\n", state, err)
|
|
}
|
|
|
|
RegisterConnStateListener(listener)
|
|
defer UnregisterConnStateListener(listener)
|
|
|
|
time.Sleep(1 * time.Second)
|
|
}
|
|
|
|
// TestNatsStreamOperations 测试流操作
|
|
func TestNatsStreamOperations(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
// 创建任务流
|
|
err := CreateTaskStream(ctx, "test_tasks", []string{"test.task.>"})
|
|
if err != nil {
|
|
t.Logf("创建任务流失败: %v", err)
|
|
}
|
|
|
|
// 获取流信息
|
|
info, err := GetStream(ctx, "test_tasks")
|
|
if err != nil {
|
|
t.Logf("获取流信息失败: %v", err)
|
|
} else {
|
|
t.Logf("流信息: %s", info.Config.Name)
|
|
}
|
|
|
|
// 列出所有流
|
|
streams, err := ListStreams(ctx)
|
|
if err != nil {
|
|
t.Logf("列出流失败: %v", err)
|
|
} else {
|
|
t.Logf("流列表: %v", streams)
|
|
}
|
|
|
|
// 删除流
|
|
err = DeleteStream(ctx, "test_tasks")
|
|
if err != nil {
|
|
t.Logf("删除流失败: %v", err)
|
|
}
|
|
}
|
|
|
|
// TestNatsConsumerOperations 测试消费者操作
|
|
func TestNatsConsumerOperations(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
// 创建测试流
|
|
err := CreateTaskStream(ctx, "test_consumer", []string{"test.consumer.>"})
|
|
if err != nil {
|
|
t.Logf("创建流失败: %v", err)
|
|
}
|
|
|
|
// 创建消费者
|
|
consumerConfig := jetstream.ConsumerConfig{
|
|
Name: "test_consumer",
|
|
Durable: "test_consumer",
|
|
}
|
|
_, err = CreateConsumer(ctx, "test_consumer", "test_consumer", consumerConfig)
|
|
if err != nil {
|
|
t.Logf("创建消费者失败: %v", err)
|
|
}
|
|
|
|
// 获取消费者信息
|
|
info, err := GetConsumer(ctx, "test_consumer", "test_consumer")
|
|
if err != nil {
|
|
t.Logf("获取消费者信息失败: %v", err)
|
|
} else {
|
|
t.Logf("消费者信息: %s", info.Name)
|
|
}
|
|
|
|
// 列出消费者
|
|
consumers, err := ListConsumers(ctx, "test_consumer")
|
|
if err != nil {
|
|
t.Logf("列出消费者失败: %v", err)
|
|
} else {
|
|
t.Logf("消费者列表: %v", consumers)
|
|
}
|
|
|
|
// 删除消费者
|
|
err = DeleteConsumer(ctx, "test_consumer", "test_consumer")
|
|
if err != nil {
|
|
t.Logf("删除消费者失败: %v", err)
|
|
}
|
|
|
|
// 清理流
|
|
_ = DeleteStream(ctx, "test_consumer")
|
|
}
|
|
|
|
// TestNatsPublishRequest 测试发布和请求
|
|
func TestNatsPublishRequest(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
// 发布消息
|
|
err := Publish(ctx, "test.publish", []byte("hello"))
|
|
if err != nil {
|
|
t.Logf("发布消息失败: %v", err)
|
|
}
|
|
|
|
// RPC 请求
|
|
response, err := Request(ctx, "test.request", []byte("request"), 5*time.Second)
|
|
if err != nil {
|
|
t.Logf("RPC 请求失败: %v", err)
|
|
} else {
|
|
t.Logf("RPC 响应: %s", string(response))
|
|
}
|
|
}
|