Skip to content

Commit aa94ae8

Browse files
committed
ai fixes
1 parent 84a1ea9 commit aa94ae8

File tree

1 file changed

+33
-25
lines changed

1 file changed

+33
-25
lines changed

ydb/tests/compatibility/README.md

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,70 @@
1-
# Тесты совместимости
1+
# Тесты совместимости
22

3-
Одна из мажорных проблем в новых стабильных ветках состоит в том, что в рамках апгрейда YDB со старой версии возникают несовмстимости между новой и старой версией. Данные тесты призваны протестировать этот сценарий. Механика тестов следующая: тесты скачивают YDB последней стабильной версии.
3+
Одна из мажорных проблем в новых стабильных ветках состоит в том, что в рамках апгрейда YDB со старой версии возникают несовместимости между новой и старой версией. Данные тесты призваны протестировать этот сценарий. Механика тестов следующая: тесты скачивают YDB последней стабильной версии.
44

5-
После чего есть два бинарных файла: текущий (собранный из текущего среза сорцов) и предыдущий. Таким образом, в этих тестах можно использовать тестовый кластер не только с одной версией YDB, а с двумя. Текущая версия условно называется **current**, а предыдущая **last**.
5+
После чего есть два бинарных файла: текущий (собранный из текущего среза исходников) и предыдущий. Таким образом, в этих тестах можно использовать тестовый кластер не только с одной версией YDB, а с двумя. Текущая версия условно называется **current**, а предыдущая **last**.
66

7-
## Как написать тест
7+
## Как написать тест
88

9-
1. Выбрать подходящую фикстуру
9+
1. Выбрать подходящую фикстуру
1010
2. Сделать новый файл с тестом (либо же выбрать имеющийся, если он подходит по области)
11-
3. Закодировать тест. Как первый шаг, можно скопировать пример из [test_example.py](test_example.py)
11+
3. Закодировать тест. Как первый шаг, можно скопировать пример из [test_example.py](test_example.py)
1212

1313
## Фикстуры
14-
Для упрощения написания тестов было сделано несколько тестовых фикстур, которые предоставляют типовые сценарии тестирования. Фикстуры содержат в себе общую логику, которую можно переиспользовать в тестах. Все фикстуры поднимают кластер `MIRROR_3_DC` и предоставляют его для тестирования.
14+
15+
Для упрощения написания тестов было сделано несколько тестовых фикстур, которые предоставляют типовые сценарии тестирования. Фикстуры содержат в себе общую логику, которую можно переиспользовать в тестах. Все фикстуры поднимают кластер `MIRROR_3_DC` и предоставляют его для тестирования.
1516

1617
Примеры использования фикстур можно посмотреть в [test_example.py](test_example.py)
1718

1819
### MixedClusterFixture
19-
Фикстура поднимает кластер который состоит из нод версий current и last. Позволяет протестировать работу в режиме, когда часть нод у нас уже обновилась, а часть еще нет.
20+
21+
Фикстура поднимает кластер, который состоит из нод версий current и last. Позволяет протестировать работу в режиме, когда часть нод у нас уже обновилась, а часть еще нет.
2022

2123
Имеет параметризацию (то есть каждый написанный такой тест превращается в несколько):
2224
- поднимается смешанный кластер last+current
2325
- поднимается кластер исключительно на версии last
2426
- поднимается кластер исключительно на версии current
2527

26-
Последние два нужны чтобы отвечать на вопрос "а работает ли у такой сценарий в принципе, когда кластер состоит из нод одной вресии". Если получается так, что тест last+current не проходит, а в отсутствие разных версий тест завершается успешно, то это сильный сигнал к тому, что где-то поломана совместимость.
28+
Последние два нужны, чтобы отвечать на вопрос "а работает ли такой сценарий в принципе, когда кластер состоит из нод одной версии". Если получается так, что тест last+current не проходит, а в отсутствие разных версий тест завершается успешно, то это сильный сигнал к тому, что где-то поломана совместимость.
2729

2830
#### Для чего использовать
29-
Для проверки совместимости версий в рамках исполнения запросов, которые требуют взаимодействия между нодами кластера.
31+
32+
Для проверки совместимости версий в рамках исполнения запросов, которые требуют взаимодействия между нодами кластера.
3033

3134
### RestartToAnotherVersionFixture
32-
Фикстура сначала поднимает кластер в одной комбинации (например, все ноды last), а потом позволяет остановить кластер и поднять кластер с другими версиями (например, все ноды current).
35+
36+
Фикстура сначала поднимает кластер в одной комбинации (например, все ноды last), а потом позволяет остановить кластер и поднять кластер с другими версиями (например, все ноды current).
3337

3438
Имеет параметризацию (то есть каждый написанный такой тест превращается в несколько):
35-
- обновление last -> current
36-
- обновление current -> last
37-
- обновление current -> current
39+
- обновление last current
40+
- обновление current last
41+
- обновление current current
3842

39-
Список не исчерпывающий, полный можно посмотреть в коде фикстуры.
43+
Список не исчерпывающий, полный можно посмотреть в коде фикстуры.
4044

41-
В самом тесте для смены версий необходимо вызвать `self.change_cluster_version()` и версия изменится.
45+
В самом тесте для смены версий необходимо вызвать `self.change_cluster_version()`, и версия изменится.
4246

4347
#### Для чего использовать
44-
Данная фикстура позволяет протестировать, например, несовместимости по данным (как и при апгрейде, так и при даунгрейде), например, что новая версия не пишет чего-то, что старая версия не может прочитать.
48+
49+
Данная фикстура позволяет протестировать, например, несовместимости по данным (как и при апгрейде, так и при даунгрейде), например, что новая версия не пишет чего-то, что старая версия не может прочитать.
4550

4651
### RollingUpgradeAndDowngradeFixture
47-
Фикстура позволяет протестировать сценарий роллинг апгрейда и даунгрейда. Реализует сценарий "имеется кластер last версии, он понодно заменяется на current версию, потом обратно на last".
4852

49-
Сама фикстура сначала поднимает кластер версии last, потом заменяет ноды на версию current, а потом оборатно понодно заменяет на last эмулируя откат.
53+
Фикстура позволяет протестировать сценарий роллинг-апгрейда и даунгрейда. Реализует сценарий "имеется кластер last версии, он понодно заменяется на current версию, потом обратно на last".
54+
55+
Сама фикстура сначала поднимает кластер версии last, потом заменяет ноды на версию current, а потом обратно понодно заменяет на last, эмулируя откат.
5056

51-
Шаг апгрейда/даунгрейда (замена версии ноды на другую) вызывается из теста следующим образом:
57+
Шаг апгрейда/даунгрейда (замена версии ноды на другую) вызывается из теста следующим образом:
5258

5359
```python
54-
for _ in self.roll():
55-
pass # do something with cluster between upgrade/downgrade steps
60+
for _ in self.roll():
61+
pass # do something with cluster between upgrade/downgrade steps
5662
```
5763

58-
На каждой итерации цикла тестовое окружение заменяет одну ноду на другую версию.
64+
На каждой итерации цикла тестовое окружение заменяет одну ноду на другую версию.
65+
66+
Схематично можно изобразить следующим образом (L — last, C — current, каждый столбец — это версия ноды кластера, каждая строка — текущее состояние кластера в теле цикла):
5967

60-
Схематично можно изобразить следующим образом (L -- last, C -- current, каждый столбец это версия ноды кластера, каждая строка -- текущее состояние кластера в теле цикла)
6168
```
6269
LLLLLLLLL
6370
CLLLLLLLL
@@ -73,4 +80,5 @@ LLLLLLLLL
7380
```
7481

7582
#### Для чего использовать
76-
Это наиболее приблеженный к реальности сценарий. Его, например, можно использовать для тестирования, в котором необходимо чтобы все таблетки со 100% гарантией в рамках работы кластера переехали с одной версии на другую.
83+
84+
Это наиболее приближенный к реальности сценарий. Его, например, можно использовать для тестирования, в котором необходимо, чтобы все таблетки со 100% гарантией в рамках работы кластера переехали с одной версии на другую.

0 commit comments

Comments
 (0)