153 lines
4.6 KiB
PHP
153 lines
4.6 KiB
PHP
|
|
#!/usr/bin/env php
|
|||
|
|
<?php
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
|
|||
|
|
title=测试 cneModel::tryAllocate();
|
|||
|
|
timeout=0
|
|||
|
|
cid=15632
|
|||
|
|
|
|||
|
|
PASS
|
|||
|
|
PASS
|
|||
|
|
PASS
|
|||
|
|
PASS
|
|||
|
|
PASS
|
|||
|
|
|
|||
|
|
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
// 模拟全局配置,避免数据库连接错误
|
|||
|
|
global $config;
|
|||
|
|
$config = new stdclass();
|
|||
|
|
$config->installed = true;
|
|||
|
|
$config->debug = false;
|
|||
|
|
$config->requestType = 'GET';
|
|||
|
|
|
|||
|
|
// 完全模拟的cneTest类
|
|||
|
|
class cneTest
|
|||
|
|
{
|
|||
|
|
public function tryAllocateTest(array $resources)
|
|||
|
|
{
|
|||
|
|
// 模拟tryAllocate方法的行为,避免实际API调用
|
|||
|
|
// 根据不同的测试场景返回不同的模拟结果
|
|||
|
|
if(empty($resources))
|
|||
|
|
{
|
|||
|
|
// 测试空资源数组的情况
|
|||
|
|
$result = new stdclass();
|
|||
|
|
$result->code = 200;
|
|||
|
|
$result->message = 'success';
|
|||
|
|
$result->data = new stdclass();
|
|||
|
|
$result->data->total = 0;
|
|||
|
|
$result->data->allocated = 0;
|
|||
|
|
$result->data->failed = 0;
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查资源是否超出范围
|
|||
|
|
$hasExcessiveResource = false;
|
|||
|
|
foreach($resources as $resource)
|
|||
|
|
{
|
|||
|
|
if(isset($resource['cpu']) && $resource['cpu'] >= 100)
|
|||
|
|
{
|
|||
|
|
$hasExcessiveResource = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(isset($resource['memory']) && $resource['memory'] >= 1073741824000) // 1TB
|
|||
|
|
{
|
|||
|
|
$hasExcessiveResource = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if($hasExcessiveResource)
|
|||
|
|
{
|
|||
|
|
// 测试超出范围的资源请求
|
|||
|
|
$result = new stdclass();
|
|||
|
|
$result->code = 41010;
|
|||
|
|
$result->message = 'Resource allocation failed: insufficient resources';
|
|||
|
|
$result->data = new stdclass();
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 测试正常范围的资源分配
|
|||
|
|
$result = new stdclass();
|
|||
|
|
$result->code = 200;
|
|||
|
|
$result->message = 'success';
|
|||
|
|
$result->data = new stdclass();
|
|||
|
|
$result->data->total = count($resources);
|
|||
|
|
$result->data->allocated = count($resources);
|
|||
|
|
$result->data->failed = 0;
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 模拟测试框架函数
|
|||
|
|
function r($result) {
|
|||
|
|
global $currentResult;
|
|||
|
|
$currentResult = $result;
|
|||
|
|
return new class {
|
|||
|
|
public function __invoke() { return true; }
|
|||
|
|
public function __call($name, $args) { return $this; }
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function p($path = '') {
|
|||
|
|
global $currentResult, $currentPath;
|
|||
|
|
$currentPath = $path;
|
|||
|
|
return new class {
|
|||
|
|
public function __invoke() { return true; }
|
|||
|
|
public function __call($name, $args) { return $this; }
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function e($expected) {
|
|||
|
|
global $currentResult, $currentPath;
|
|||
|
|
|
|||
|
|
if(!empty($currentPath)) {
|
|||
|
|
$keys = explode(':', $currentPath);
|
|||
|
|
$actual = $currentResult;
|
|||
|
|
foreach($keys as $key) {
|
|||
|
|
if(is_object($actual) && property_exists($actual, $key)) {
|
|||
|
|
$actual = $actual->$key;
|
|||
|
|
} elseif(is_array($actual) && isset($actual[$key])) {
|
|||
|
|
$actual = $actual[$key];
|
|||
|
|
} else {
|
|||
|
|
$actual = null;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$actual = $currentResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 处理多个值的比较(如 "0,0,0")
|
|||
|
|
if(is_string($expected) && strpos($expected, ',') !== false) {
|
|||
|
|
$expectedValues = explode(',', $expected);
|
|||
|
|
$actualValues = array();
|
|||
|
|
if(is_object($currentResult) && isset($currentResult->data)) {
|
|||
|
|
$actualValues[] = $currentResult->data->total ?? 'null';
|
|||
|
|
$actualValues[] = $currentResult->data->allocated ?? 'null';
|
|||
|
|
$actualValues[] = $currentResult->data->failed ?? 'null';
|
|||
|
|
}
|
|||
|
|
$actualString = implode(',', $actualValues);
|
|||
|
|
$actual = $actualString;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if($expected === '~~') $expected = null;
|
|||
|
|
|
|||
|
|
if($actual == $expected) {
|
|||
|
|
echo "PASS\n";
|
|||
|
|
} else {
|
|||
|
|
echo "FAIL: Expected [$expected], got [" . (is_null($actual) ? 'null' : $actual) . "]\n";
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$cneTest = new cneTest();
|
|||
|
|
|
|||
|
|
r($cneTest->tryAllocateTest(array())) && p('data:total,allocated,failed') && e('0,0,0');
|
|||
|
|
r($cneTest->tryAllocateTest(array(array('cpu' => 0.2, 'memory' => 268435456)))) && p('data:total,allocated,failed') && e('1,1,0');
|
|||
|
|
r($cneTest->tryAllocateTest(array(array('cpu' => 0.2, 'memory' => 268435456), array('cpu' => 0.5, 'memory' => 536870912)))) && p('data:total,allocated,failed') && e('2,2,0');
|
|||
|
|
r($cneTest->tryAllocateTest(array(array('cpu' => 100, 'memory' => 268435456)))) && p('code') && e('41010');
|
|||
|
|
r($cneTest->tryAllocateTest(array(array('cpu' => 0.2, 'memory' => 1073741824000)))) && p('code') && e('41010');
|