节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
4.95 KiB
Stardust
<?php
/**
 * PHP SDK 验证脚本
 * 
 * 测试 SDK 的基本功能和结构
 */

echo "=== 星尘 PHP SDK 验证测试 ===\n\n";

// 测试1:加载 StardustTracer
echo "测试1:加载 StardustTracer\n";
require_once __DIR__ . '/../src/StardustTracer.php';

if (class_exists('StardustTracer')) {
    echo "  ✓ StardustTracer 类加载成功\n";
} else {
    echo "  ✗ StardustTracer 类加载失败\n";
    exit(1);
}

if (class_exists('StardustSpan')) {
    echo "  ✓ StardustSpan 类加载成功\n";
} else {
    echo "  ✗ StardustSpan 类加载失败\n";
    exit(1);
}

if (class_exists('StardustSpanBuilder')) {
    echo "  ✓ StardustSpanBuilder 类加载成功\n";
} else {
    echo "  ✗ StardustSpanBuilder 类加载失败\n";
    exit(1);
}

// 测试2:加载 StardustConfig
echo "\n测试2:加载 StardustConfig\n";
require_once __DIR__ . '/../src/StardustConfig.php';

if (class_exists('StardustConfig')) {
    echo "  ✓ StardustConfig 类加载成功\n";
} else {
    echo "  ✗ StardustConfig 类加载失败\n";
    exit(1);
}

// 测试3:创建 StardustTracer 实例
echo "\n测试3:创建 StardustTracer 实例\n";
try {
    $tracer = new StardustTracer('http://test.example.com:6600', 'TestApp', 'secret');
    echo "  ✓ StardustTracer 实例创建成功\n";
    
    // 测试方法是否存在
    $methods = ['login', 'ping', 'newSpan', 'flush', 'setDebug'];
    foreach ($methods as $method) {
        if (method_exists($tracer, $method)) {
            echo "  ✓ 方法 {$method}() 存在\n";
        } else {
            echo "  ✗ 方法 {$method}() 不存在\n";
            exit(1);
        }
    }
} catch (Exception $e) {
    echo "  ✗ 创建实例失败: " . $e->getMessage() . "\n";
    exit(1);
}

// 测试4:创建 StardustConfig 实例
echo "\n测试4:创建 StardustConfig 实例\n";
try {
    $config = new StardustConfig('http://test.example.com:6600', 'TestApp', 'secret', 'dev');
    echo "  ✓ StardustConfig 实例创建成功\n";
    
    // 测试方法是否存在
    $methods = ['login', 'getAll', 'get', 'getVersion', 'hasNewVersion', 'setScope', 'setDebug'];
    foreach ($methods as $method) {
        if (method_exists($config, $method)) {
            echo "  ✓ 方法 {$method}() 存在\n";
        } else {
            echo "  ✗ 方法 {$method}() 不存在\n";
            exit(1);
        }
    }
} catch (Exception $e) {
    echo "  ✗ 创建实例失败: " . $e->getMessage() . "\n";
    exit(1);
}

// 测试5:创建 Span 并完成
echo "\n测试5:创建 Span 并完成\n";
try {
    $span = $tracer->newSpan('测试操作');
    echo "  ✓ Span 创建成功\n";
    
    if (isset($span->id) && !empty($span->id)) {
        echo "  ✓ Span ID 已生成: {$span->id}\n";
    } else {
        echo "  ✗ Span ID 未生成\n";
        exit(1);
    }
    
    $span->tag = 'test tag';
    $span->setError('test error');
    $span->finish();
    echo "  ✓ Span 完成\n";
    
    if ($span->endTime > 0) {
        echo "  ✓ Span 结束时间已记录\n";
    } else {
        echo "  ✗ Span 结束时间未记录\n";
        exit(1);
    }
} catch (Exception $e) {
    echo "  ✗ Span 操作失败: " . $e->getMessage() . "\n";
    exit(1);
}

// 测试6:SpanBuilder
echo "\n测试6:测试 SpanBuilder\n";
try {
    $builder = new StardustSpanBuilder('TestOperation', 5, 10);
    echo "  ✓ SpanBuilder 创建成功\n";
    
    // 添加几个 span
    for ($i = 0; $i < 3; $i++) {
        $testSpan = $tracer->newSpan('op' . $i);
        usleep(10000); // 10ms
        $testSpan->finish();
        $builder->addSpan($testSpan);
    }
    
    if ($builder->total === 3) {
        echo "  ✓ SpanBuilder 统计正确: total={$builder->total}\n";
    } else {
        echo "  ✗ SpanBuilder 统计错误: total={$builder->total}\n";
        exit(1);
    }
    
    $data = $builder->toArray();
    if (isset($data['Name']) && isset($data['Total']) && isset($data['Cost'])) {
        echo "  ✓ SpanBuilder toArray() 成功\n";
    } else {
        echo "  ✗ SpanBuilder toArray() 失败\n";
        exit(1);
    }
} catch (Exception $e) {
    echo "  ✗ SpanBuilder 测试失败: " . $e->getMessage() . "\n";
    exit(1);
}

// 测试7:检查 PHP 版本
echo "\n测试7:检查 PHP 版本\n";
$phpVersion = phpversion();
echo "  当前 PHP 版本: {$phpVersion}\n";
if (version_compare($phpVersion, '7.4.0', '>=')) {
    echo "  ✓ PHP 版本符合要求 (>= 7.4)\n";
} else {
    echo "  ✗ PHP 版本过低,需要 7.4+\n";
    exit(1);
}

// 测试8:检查必需的扩展
echo "\n测试8:检查必需的扩展\n";
$requiredExtensions = ['curl', 'json'];
foreach ($requiredExtensions as $ext) {
    if (extension_loaded($ext)) {
        echo "  ✓ 扩展 {$ext} 已加载\n";
    } else {
        echo "  ✗ 扩展 {$ext} 未加载\n";
        exit(1);
    }
}

echo "\n=== 所有测试通过 ✓ ===\n";
echo "\nPHP SDK 已准备就绪,可以正常使用。\n";
echo "请参考 README.md 和 examples/ 目录中的示例代码。\n";