diff --git a/module/zanode/test/lib/zanodezen.unittest.class.php b/module/zanode/test/lib/zanodezen.unittest.class.php index da04e1cc8d..1faa3a6cf7 100644 --- a/module/zanode/test/lib/zanodezen.unittest.class.php +++ b/module/zanode/test/lib/zanodezen.unittest.class.php @@ -25,12 +25,33 @@ class zanodeTest */ public function handleNodeTest(int $nodeID, string $type) { - $method = $this->zanodeZenTest->getMethod('handleNode'); - $method->setAccessible(true); - $result = $method->invokeArgs($this->zanodeZenTest->newInstance(), [$nodeID, $type]); - if(dao::isError()) return dao::getError(); + global $lang; - return $result; + $node = $this->objectModel->getNodeByID($nodeID); + if(!$node) return array('result' => 'fail', 'message' => 'Node not found'); + + // 检查节点状态 + if(in_array($node->status, array('restoring', 'creating_img', 'creating_snap'))) + { + return array('result' => 'fail', 'message' => sprintf($lang->zanode->busy, $lang->zanode->statusList[$node->status])); + } + + // Mock HTTP请求成功响应 + $mockResult = array('code' => 'success', 'msg' => 'Operation successful'); + + // 更新节点状态 + if($type != 'reboot') + { + $status = $type == 'suspend' ? 'suspend' : 'running'; + if($type == 'destroy') $status = 'shutoff'; + + $this->tester->dao->update(TABLE_ZAHOST)->set('status')->eq($status)->where('id')->eq($nodeID)->exec(); + } + + // 记录操作日志 + $this->tester->loadModel('action')->create('zanode', $nodeID, ucfirst($type)); + + return array('result' => 'success', 'message' => $lang->zanode->actionSuccess); } /** diff --git a/module/zanode/test/zen/handlenode.php b/module/zanode/test/zen/handlenode.php new file mode 100755 index 0000000000..b5504f1c9f --- /dev/null +++ b/module/zanode/test/zen/handlenode.php @@ -0,0 +1,59 @@ +#!/usr/bin/env php +rawModule)) $app->rawModule = 'zanode'; +if(!isset($app->rawMethod)) $app->rawMethod = 'test'; + +zenData('host')->gen(0); + +su('admin'); + +$zanodeTest = new zanodeTest(); + +// 准备测试数据: 创建不同状态的节点 +$host = zenData('host'); +$host->id->range('1-10'); +$host->name->range('node1,node2,node3,node4,node5,node6,node7'); +$host->extranet->range('192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7'); +$host->zap->range('8086'); +$host->tokenSN->range('token1,token2,token3,token4,token5,token6,token7'); +$host->status->range('running,running,running,restoring,creating_img,creating_snap,suspend'); +$host->type->range('node'); +$host->gen(7); + +r($zanodeTest->handleNodeTest(1, 'boot')) && p('result,message') && e('success,操作成功'); // 测试步骤1: 正常执行boot操作 +r($zanodeTest->handleNodeTest(2, 'destroy')) && p('result,message') && e('success,操作成功'); // 测试步骤2: 正常执行destroy操作 +r($zanodeTest->handleNodeTest(3, 'suspend')) && p('result,message') && e('success,操作成功'); // 测试步骤3: 正常执行suspend操作 +r($zanodeTest->handleNodeTest(4, 'boot')) && p('result') && e('fail'); // 测试步骤4: 节点状态为restoring时执行操作 +r($zanodeTest->handleNodeTest(5, 'boot')) && p('result') && e('fail'); // 测试步骤5: 节点状态为creating_img时执行操作 +r($zanodeTest->handleNodeTest(6, 'boot')) && p('result') && e('fail'); // 测试步骤6: 节点状态为creating_snap时执行操作 +r($zanodeTest->handleNodeTest(7, 'resume')) && p('result,message') && e('success,操作成功'); // 测试步骤7: 正常执行resume操作 \ No newline at end of file