You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-11-02 06:13:16 +03:00
102 lines
3.3 KiB
Python
102 lines
3.3 KiB
Python
import unittest
|
|
import logging
|
|
|
|
from cmapi_server.process_dispatchers.locks import (
|
|
parse_locks_detail,
|
|
sum_active_from_states,
|
|
sum_waiting_from_states,
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestShmemLocksParsing(unittest.TestCase):
|
|
def test_parse_locks_detail_basic(self):
|
|
sample_output = """
|
|
VSS RWLock
|
|
readers = 2
|
|
writers = 1
|
|
readers waiting = 0
|
|
writers waiting = 0
|
|
mutex locked = 0
|
|
ExtentMap RWLock
|
|
readers = 0
|
|
writers = 0
|
|
readers waiting = 1
|
|
writers waiting = 2
|
|
mutex locked = 1
|
|
"""
|
|
states = parse_locks_detail(sample_output, logger)
|
|
self.assertEqual(len(states), 2)
|
|
|
|
# Check names
|
|
self.assertEqual(states[0].name, 'VSS')
|
|
self.assertEqual(states[1].name, 'ExtentMap')
|
|
|
|
self.assertEqual(states[0].id, 1)
|
|
self.assertEqual(states[0].readers, 2)
|
|
self.assertEqual(states[0].writers, 1)
|
|
self.assertEqual(states[0].readers_waiting, 0)
|
|
self.assertEqual(states[0].writers_waiting, 0)
|
|
self.assertFalse(states[0].mutex_locked)
|
|
|
|
self.assertEqual(states[1].id, 2)
|
|
self.assertEqual(states[1].readers, 0)
|
|
self.assertEqual(states[1].writers, 0)
|
|
self.assertEqual(states[1].readers_waiting, 1)
|
|
self.assertEqual(states[1].writers_waiting, 2)
|
|
self.assertTrue(states[1].mutex_locked)
|
|
|
|
self.assertEqual(sum_active_from_states(states), 3)
|
|
self.assertEqual(sum_waiting_from_states(states), 3)
|
|
|
|
def test_parse_locks_detail_malformed_values(self):
|
|
sample_output = """
|
|
VSS RWLock
|
|
readers = blorg
|
|
writers = 1
|
|
readers waiting = nope
|
|
writers waiting = 0
|
|
mutex locked = 0
|
|
ExtentMap RWLock
|
|
readers = 3
|
|
writers = one
|
|
readers waiting = 0
|
|
writers waiting = two
|
|
mutex locked = 1
|
|
FreeList RWLock
|
|
readers = 1
|
|
writers = 0
|
|
readers waiting = 0
|
|
writers waiting = 0
|
|
mutex locked = 0
|
|
"""
|
|
states = parse_locks_detail(sample_output, logger)
|
|
# Malformed numeric fields are treated as 0, sections are retained
|
|
self.assertEqual(len(states), 3)
|
|
self.assertEqual([s.name for s in states], ['VSS', 'ExtentMap', 'FreeList'])
|
|
# Lock 1: readers -> 0, writers -> 1, readers_waiting -> 0
|
|
self.assertEqual((states[0].readers, states[0].writers, states[0].readers_waiting), (0, 1, 0))
|
|
# Lock 2: writers -> 0, writers_waiting -> 0 due to malformed
|
|
self.assertEqual((states[1].readers, states[1].writers, states[1].writers_waiting), (3, 0, 0))
|
|
# Lock 3 intact
|
|
self.assertEqual((states[2].readers, states[2].writers), (1, 0))
|
|
|
|
def test_parse_locks_detail_mutex_absent_defaults_false(self):
|
|
sample_output = """
|
|
VSS RWLock
|
|
readers = 1
|
|
writers = 0
|
|
ExtentMap RWLock
|
|
readers = 0
|
|
writers = 0
|
|
"""
|
|
states = parse_locks_detail(sample_output, logger)
|
|
self.assertEqual(len(states), 2)
|
|
self.assertFalse(states[0].mutex_locked)
|
|
self.assertFalse(states[1].mutex_locked)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|