File: test_server.py

package info (click to toggle)
siridb-server 2.0.53-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,612 kB
  • sloc: ansic: 47,501; python: 6,263; sh: 254; makefile: 149
file content (152 lines) | stat: -rw-r--r-- 5,255 bytes parent folder | download | duplicates (4)
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import asyncio
import functools
import random
import time
from testing import Client
from testing import default_test_setup
from testing import gen_data
from testing import gen_points
from testing import gen_series
from testing import InsertError
from testing import PoolError
from testing import QueryError
from testing import run_test
from testing import Series
from testing import Server
from testing import ServerError
from testing import SiriDB
from testing import TestBase
from testing import UserAuthError
from testing import parse_args


class TestServer(TestBase):
    title = 'Test server object'

    Server.SERVER_ADDRESS = 'localhost'
    Server.IP_SUPPORT = 'IPV4ONLY'

    @default_test_setup(4)
    async def run(self):

        await self.client0.connect()

        await self.db.add_pool(self.server1)
        await self.assertIsRunning(self.db, self.client0, timeout=20)
        await asyncio.sleep(5)

        await self.client1.connect()

        for port in (9010, 9011):
            result = await self.client0.query(
                'alter server "localhost:{}" set log_level error'.format(port))
            self.assertEqual(
                result.pop('success_msg'),
                "Successfully set log level to 'error' on 'localhost:{}'."
                .format(port))

        result = await self.client1.query('list servers log_level')
        self.assertEqual(result.pop('servers'), [['error'], ['error']])

        result = await self.client1.query('list servers uuid')

        for uuid in result.pop('servers'):
            result = await self.client0.query(
                'alter server {} set log_level debug'.format(uuid[0]))

        result = await self.client1.query('list servers log_level')
        self.assertEqual(result.pop('servers'), [['debug'], ['debug']])

        result = await self.client0.query('alter servers set log_level info')
        self.assertEqual(
            result.pop('success_msg'),
            "Successfully set log level to 'info' on 2 servers.")

        result = await self.client1.query('list servers log_level')
        self.assertEqual(result.pop('servers'), [['info'], ['info']])

        result = await self.client1.query(
            'list servers active_tasks where active_tasks == 1 and '
            'idle_time >= 0 and idle_percentage <= 100')
        self.assertEqual(result.pop('servers'), [[1], [1]])

        result = await self.client0.query(
            'alter servers where active_handles > 1 set log_level debug')

        result = await self.client1.query('list servers log_level')
        self.assertEqual(result.pop('servers'), [['debug'], ['debug']])

        with self.assertRaisesRegex(
                QueryError,
                "Query error at position 42. Expecting "
                "debug, info, warning, error or critical"):
            await self.client0.query(
                'alter server "localhost:{}" set log_level unknown')

        self.client1.close()
        result = await self.server1.stop()
        self.assertTrue(result)

        self.server1.listen_backend_port = 9111
        self.server1.create()
        await self.server1.start(sleep=20)

        await asyncio.sleep(35)

        result = await self.client0.query('list servers status')
        self.assertEqual(result.pop('servers'), [['running'], ['running']])

        await self.client1.connect()
        result = await self.client1.query('show server')
        self.assertEqual(result.pop('data'), [
            {'name': 'server', 'value': 'localhost:9111'}])

        await self.db.add_replica(self.server2, 1)
        await self.assertIsRunning(self.db, self.client0, timeout=35)

        with self.assertRaisesRegex(
                QueryError,
                "Cannot remove server 'localhost:9010' "
                "because this is the only server for pool 0"):
            await self.client1.query('drop server "localhost:9010"')

        with self.assertRaisesRegex(
                QueryError,
                "Cannot remove server 'localhost:9012' "
                "because the server is still online.*"):
            await self.client1.query('drop server "localhost:9012"')

        result = await self.server1.stop()
        self.assertTrue(result)

        result = await self.server2.stop()
        self.assertTrue(result)

        await self.server1.start(sleep=30)

        result = await self.client1.query('show status')
        self.assertEqual(result.pop('data'), [
            {'name': 'status', 'value': 'running | synchronizing'}])

        result = await self.client0.query('drop server "localhost:9012"')
        self.assertEqual(
            result.pop('success_msg'),
            "Successfully dropped server 'localhost:9012'.")
        self.db.servers.remove(self.server2)

        time.sleep(1)

        for client in (self.client0, self.client1):
            result = await client.query('list servers status')
            self.assertEqual(result.pop('servers'), [['running'], ['running']])

        await self.db.add_replica(self.server3, 1)
        await self.assertIsRunning(self.db, self.client0, timeout=35)

        self.client0.close()
        self.client1.close()


if __name__ == '__main__':
    parse_args()
    run_test(TestServer())