File size: 4,785 Bytes
3a5cf48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import unittest
import tempfile
import os
import zipfile
import sys
from unittest.mock import patch, MagicMock
if "/www/server/panel" not in sys.path:
    sys.path.append("/www/server/panel")

from mod.project.java.utils import get_jar_war_config, to_utf8, parse_application_yaml, TomCat


class TestJarWarConfig(unittest.TestCase):
    def setUp(self):
        # 创建测试用的zip文件
        self.test_jar = tempfile.NamedTemporaryFile(delete=False)
        self.test_jar_name = self.test_jar.name
        self.test_jar.close()

        # 创建一个包含application.yaml的zip文件
        with zipfile.ZipFile(self.test_jar_name, 'w') as jar:
            jar.writestr('application.yaml', 'spring:\n  datasource:\n    url: jdbc:mysql://localhost:3306/testdb')

        # 创建一个不包含application.yaml的zip文件
        self.test_jar_no_config = tempfile.NamedTemporaryFile(delete=False)
        self.test_jar_no_config_name = self.test_jar_no_config.name
        self.test_jar_no_config.close()

        with zipfile.ZipFile(self.test_jar_no_config_name, 'w') as jar:
            jar.writestr('README.txt', 'This is a test JAR without configuration')

        # 创建一个非zip文件
        self.test_non_zip = tempfile.NamedTemporaryFile(delete=False)
        self.test_non_zip_name = self.test_non_zip.name
        self.test_non_zip.close()

        # 创建一个不存在的文件路径
        self.test_non_existent = 'non_existent.jar'

    def tearDown(self):
        # 删除测试文件
        os.unlink(self.test_jar_name)
        os.unlink(self.test_jar_no_config_name)
        os.unlink(self.test_non_zip_name)

    def test_get_jar_war_config_with_valid_jar(self):
        # 测试有效的JAR文件
        result = get_jar_war_config(self.test_jar_name)
        self.assertIsNotNone(result)
        self.assertEqual(len(result), 1)
        self.assertIn('application.yaml', result[0][0])

    def test_get_jar_war_config_with_no_config(self):
        # 测试没有配置文件的JAR
        result = get_jar_war_config(self.test_jar_no_config_name)
        self.assertIsNone(result)

    def test_get_jar_war_config_with_non_zip(self):
        # 测试非ZIP文件
        result = get_jar_war_config(self.test_non_zip_name)
        self.assertIsNone(result)

    def test_get_jar_war_config_with_non_existent(self):
        # 测试不存在的文件
        result = get_jar_war_config(self.test_non_existent)
        self.assertIsNone(result)

    def test_to_utf8(self):
        # 测试转换为UTF-8
        byte_data = 'test'.encode('utf-8')
        file_data_list = [('test.txt', byte_data)]
        result = to_utf8(file_data_list)
        self.assertIsNotNone(result)
        self.assertEqual(result, [('test.txt', 'test')])

    def test_parse_application_yaml_valid(self):
        # 测试有效的YAML配置
        byte_data = 'spring:\n  datasource:\n    url: jdbc:mysql://localhost:3306/testdb'
        file_data_list = [('application.yaml', byte_data.encode('utf-8'))]
        result = parse_application_yaml(file_data_list)
        self.assertIsNotNone(result)
        self.assertEqual(len(result), 1)
        self.assertIn('application.yaml', result[0][0])
        self.assertIsInstance(result[0][1], dict)
        self.assertEqual(result[0][1]['spring']['datasource']['url'], 'jdbc:mysql://localhost:3306/testdb')

    def test_parse_application_yaml_invalid(self):
        # 测试无效的YAML配置
        invalid_byte_data = 'not --- a valid yaml'
        file_data_list = [('application.yaml', invalid_byte_data.encode('utf-8'))]
        result = parse_application_yaml(file_data_list)
        self.assertIsNotNone(result)
        self.assertEqual(len(result), 0)


class TestTomCat(unittest.TestCase):
    def setUp(self):
        self.tomcat_path = "/usr/local/bttomcat/tomcat10"
        self.tomcat = TomCat(self.tomcat_path)

    def test_jdk_path(self):
        self.assertEqual(self.tomcat.jdk_path, "/usr/local/btjdk/jdk8")

    def test_config_xml(self):
        self.assertIsNotNone(self.tomcat.config_xml)
        print(self.tomcat.config_xml)

    def test_save_config_xml(self):
        self.tomcat.add_host("taaaaa", "/tmp/aaaa")
        self.tomcat.add_host("taaaaa", "/tmp/aaaa")
        self.tomcat.add_host("tbbb", "/tmp/tbbb")
        self.assertEqual(self.tomcat.save_config_xml(), True)
        with open(self.tomcat_path + "/conf/server.xml", "r") as f:
            print(f.read())

        self.tomcat.remove_host("tbbb")
        self.assertEqual(self.tomcat.save_config_xml(), True)
        with open(self.tomcat_path + "/conf/server.xml", "r") as f:
            print(f.read())

    def test_status(self):
        print(self.tomcat.status())


if __name__ == '__main__':
    unittest.main()