action / bt-source /panel /class /btdockerModel /test /containerModelTest.py
GGSheng's picture
feat: deploy Gemma 4 to hf space
020c337 verified
# coding: utf-8
# -------------------------------------------------------------------
# 宝塔Linux面板
# -------------------------------------------------------------------
# Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved.
# -------------------------------------------------------------------
# Author: wzz <wzz@bt.cn>
# -------------------------------------------------------------------
import os
import random
# ------------------------------
# Docker模型测试模块 - 容器模型
# ------------------------------
import sys
import unittest
import docker.errors
panelPath = '/www/server/panel/'
os.chdir(panelPath)
sys.path.insert(0, panelPath + "class/")
import public
from btdockerModel import dk_public as dp
from btdockerModel import containerModel as dc
class TestParamManage():
'''
@name 获取字典对象
@author wzz <2023/12/1 下午 2:32>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
def get_dict_obj(self):
return public.dict_obj()
'''
@name 获取所有容器列表
@author wzz <2023/12/1 下午 2:32>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
def get_container_list(self):
return dc.main().get_list(self.get_dict_obj())
'''
@name 获取随机容器id
@author wzz <2023/12/1 下午 2:32>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
def get_container_id(self):
return self.get_container_list()['container_list'][0]['id']
class TestContainerModel(unittest.TestCase):
"""
创建测试用例
"""
def test_connect_client(self):
"""
测试docker客户端连接,判断返回值是否是docker.client.DockerClient实例
:return:
"""
self.assertIsInstance(dp.docker_client(), docker.client.DockerClient)
def test_get_list(self):
"""
测试调用containerModel中的get_list方法,获取所有容器列表
@return:
"""
get = TestParamManage().get_dict_obj()
self.assertIsInstance(dc.main().get_list(get), dict)
def test_run(self):
"""
测试创建容器
@return:
"""
get = TestParamManage().get_dict_obj()
get.image = 'nginx:latest'
get.name = 'test_{}'.format(random.randint(10000, 65535))
get.port = {"80/tcp": format(random.randint(10000, 65535))}
get.volumes = {"/www/wwwroot/test": {"bind": "/usr/share/nginx/html", "mode": "rw"}}
get.environment = ''
get.labels = ''
get.network = ''
get.cpu_quota = 0
self.assertEqual(dc.main().run(get), {"status": True, "msg": "容器创建成功!"})
def test_run_cmd(self):
'''
@name 测试命令创建容器
@author wzz <2023/11/30 下午 3:07>
@param get.cmd 包含docker run的命令,不能含有危险字符
@return {"status": bool, "msg": info}
'''
get = TestParamManage().get_dict_obj()
get.cmd = 'docker run -d --name test_{} nginx:latest'.format(random.randint(10000, 65535))
self.assertEqual(dc.main().run_cmd(get), {"status": True, "msg": "命令已执行完毕!"})
def test_upgrade_container(self):
'''
@name 测试更新容器
@author wzz <2023/12/1 上午 9:53>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.image = 'latest'
container_list = dc.main().get_list(get)
get.id = container_list['container_list'][0]['id']
get.upgrade = '1'
self.assertEqual(dc.main().upgrade_container(get), {"status": True, "msg": "更新成功!"})
def test_upgrade_container_edit(self):
'''
@name 测试编辑容器
@author wzz <2023/12/1 上午 9:53>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
get.image = 'nginx:latest'
get.upgrade = '0'
get.new_name = 'test_{}'.format(random.randint(10000, 65535))
get.new_network = 'btnet'
get.new_ip_address = '172.18.0.{}'.format(random.randint(2, 245))
get.new_command = ''
get.new_entrypoint = ''
get.new_auto_remove = '0'
get.new_privileged = '1'
get.new_restart_policy = {"Name": "always"}
get.new_mem_reservation = '0'
get.new_cpu_quota = 0
get.new_mem_limit = '0'
get.new_labels = 'maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>,,,,,,,,,,,,,,,,,\n'
get.new_environment = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,,,,,,,,,,,,,,,,,\nNGINX_VERSION=1.25.3,,,,,,,,,,,,,,,,,\nNJS_VERSION=0.8.2,,,,,,,,,,,,,,,,,\nPKG_RELEASE=1~bookworm,,,,,,,,,,,,,,,,,\n"
get.new_port = {"80/tcp": format(random.randint(10000, 65535))}
get.new_publish_all_ports = '0'
get.new_volumes = {"/www/wwwroot/test": {"bind": "/usr/share/nginx/html", "mode": "rw"}}
result = dc.main().upgrade_container(get)
self.assertTrue(result['status'], result['msg'])
def test_commit(self):
'''
@name 测试生成镜像和导出成文件
@author wzz <2023/12/1 下午 12:03>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
chars = 'qwertyuiopasdfghjklzxcvbnm0123456789'
get.repository = 'akaishuichi/test{}'.format(random.choice(chars))
get.tag = 'latest'
get.message = ''
get.author = ''
get.path = '/www/dockertest'
get.name = 'test_{}'.format(random.randint(10000, 65535))
result = dc.main().commit(get)
self.assertTrue(result['status'], result['msg'])
def test_export(self):
'''
@name 测试容器导出文件tar
@author wzz <2023/12/1 下午 2:05>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
get.path = '/www/dockertest'
get.name = 'test_{}'.format(random.randint(10000, 65535))
result = dc.main().export(get)
self.assertTrue(result['status'], result['msg'])
def test_docker_shell(self):
'''
@name 获取容器执行命令
@author wzz <2023/12/1 下午 2:10>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
result = dc.main().docker_shell(get)
print(result['msg'])
self.assertTrue(result['status'], result['msg'])
def test_del_container(self):
'''
@name 测试删除指定容器
@author wzz <2023/12/1 下午 2:12>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
result = dc.main().del_container(get)
self.assertTrue(result['status'], result['msg'])
def test_set_container_status(self):
'''
@name 设置容器状态
@author wzz <2023/12/1 下午 2:14>
@param 参数名<数据类型> 参数描述
@return 数据类型
'''
get = TestParamManage().get_dict_obj()
get.id = TestParamManage().get_container_id()
get.status = 'stop'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'start'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'pause'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'unpause'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'reload'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'kill'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
get.status = 'start'
result = dc.main().set_container_status(get)
self.assertTrue(result['status'], result['msg'])
# def test_get_container_info(self):
# '''
# @name 测试获取指定容器信息
# @author wzz <2023/12/1 下午 2:19>
# @param 参数名<数据类型> 参数描述
# @return 数据类型
# '''
if __name__ == '__main__':
# unittest.main()
# 创建测试套件
suite = unittest.TestSuite()
suite.addTest(TestContainerModel('test_connect_client'))
suite.addTest(TestContainerModel('test_get_list'))
suite.addTest(TestContainerModel('test_run'))
suite.addTest(TestContainerModel('test_run_cmd'))
suite.addTest(TestContainerModel('test_upgrade_container'))
suite.addTest(TestContainerModel('test_upgrade_container_edit'))
suite.addTest(TestContainerModel('test_commit'))
suite.addTest(TestContainerModel('test_export'))
suite.addTest(TestContainerModel('test_docker_shell'))
suite.addTest(TestContainerModel('test_del_container'))
suite.addTest(TestContainerModel('test_set_container_status'))
# 创建测试运行器
runner = unittest.TextTestRunner()
runner.run(suite)