You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Одна из мажорных проблем в новых стабильных ветках состоит в том, что в рамках апгрейда YDB со старой версии возникают несовмстимости между новой и старой версией. Данные тесты призваны протестировать этот сценарий. Механика тестов следующая: тесты скачивают YDB последней стабильной версии.
3
+
Одна из мажорных проблем в новых стабильных ветках состоит в том, что в рамках апгрейда YDB со старой версии возникают несовместимости между новой и старой версией. Данные тесты призваны протестировать этот сценарий. Механика тестов следующая: тесты скачивают YDB последней стабильной версии.
4
4
5
-
После чего есть два бинарных файла: текущий (собранный из текущего среза сорцов) и предыдущий. Таким образом, в этих тестах можно использовать тестовый кластер не только с одной версией YDB, а с двумя. Текущая версия условно называется **current**, а предыдущая **last**.
5
+
После чего есть два бинарных файла: текущий (собранный из текущего среза исходников) и предыдущий. Таким образом, в этих тестах можно использовать тестовый кластер не только с одной версией YDB, а с двумя. Текущая версия условно называется **current**, а предыдущая —**last**.
6
6
7
-
## Как написать тест
7
+
## Как написать тест
8
8
9
-
1. Выбрать подходящую фикстуру
9
+
1. Выбрать подходящую фикстуру
10
10
2. Сделать новый файл с тестом (либо же выбрать имеющийся, если он подходит по области)
11
-
3. Закодировать тест. Как первый шаг, можно скопировать пример из [test_example.py](test_example.py)
11
+
3. Закодировать тест. Как первый шаг, можно скопировать пример из [test_example.py](test_example.py)
12
12
13
13
## Фикстуры
14
-
Для упрощения написания тестов было сделано несколько тестовых фикстур, которые предоставляют типовые сценарии тестирования. Фикстуры содержат в себе общую логику, которую можно переиспользовать в тестах. Все фикстуры поднимают кластер `MIRROR_3_DC` и предоставляют его для тестирования.
14
+
15
+
Для упрощения написания тестов было сделано несколько тестовых фикстур, которые предоставляют типовые сценарии тестирования. Фикстуры содержат в себе общую логику, которую можно переиспользовать в тестах. Все фикстуры поднимают кластер `MIRROR_3_DC` и предоставляют его для тестирования.
15
16
16
17
Примеры использования фикстур можно посмотреть в [test_example.py](test_example.py)
17
18
18
19
### MixedClusterFixture
19
-
Фикстура поднимает кластер который состоит из нод версий current и last. Позволяет протестировать работу в режиме, когда часть нод у нас уже обновилась, а часть еще нет.
20
+
21
+
Фикстура поднимает кластер, который состоит из нод версий current и last. Позволяет протестировать работу в режиме, когда часть нод у нас уже обновилась, а часть еще нет.
20
22
21
23
Имеет параметризацию (то есть каждый написанный такой тест превращается в несколько):
22
24
- поднимается смешанный кластер last+current
23
25
- поднимается кластер исключительно на версии last
24
26
- поднимается кластер исключительно на версии current
25
27
26
-
Последние два нужны чтобы отвечать на вопрос "а работает ли у такой сценарий в принципе, когда кластер состоит из нод одной вресии". Если получается так, что тест last+current не проходит, а в отсутствие разных версий тест завершается успешно, то это сильный сигнал к тому, что где-то поломана совместимость.
28
+
Последние два нужны, чтобы отвечать на вопрос "а работает ли такой сценарий в принципе, когда кластер состоит из нод одной версии". Если получается так, что тест last+current не проходит, а в отсутствие разных версий тест завершается успешно, то это сильный сигнал к тому, что где-то поломана совместимость.
27
29
28
30
#### Для чего использовать
29
-
Для проверки совместимости версий в рамках исполнения запросов, которые требуют взаимодействия между нодами кластера.
31
+
32
+
Для проверки совместимости версий в рамках исполнения запросов, которые требуют взаимодействия между нодами кластера.
30
33
31
34
### RestartToAnotherVersionFixture
32
-
Фикстура сначала поднимает кластер в одной комбинации (например, все ноды last), а потом позволяет остановить кластер и поднять кластер с другими версиями (например, все ноды current).
35
+
36
+
Фикстура сначала поднимает кластер в одной комбинации (например, все ноды last), а потом позволяет остановить кластер и поднять кластер с другими версиями (например, все ноды current).
33
37
34
38
Имеет параметризацию (то есть каждый написанный такой тест превращается в несколько):
35
-
- обновление last -> current
36
-
- обновление current -> last
37
-
- обновление current -> current
39
+
- обновление last → current
40
+
- обновление current → last
41
+
- обновление current → current
38
42
39
-
Список не исчерпывающий, полный можно посмотреть в коде фикстуры.
43
+
Список не исчерпывающий, полный можно посмотреть в коде фикстуры.
40
44
41
-
В самом тесте для смены версий необходимо вызвать `self.change_cluster_version()` и версия изменится.
45
+
В самом тесте для смены версий необходимо вызвать `self.change_cluster_version()`, и версия изменится.
42
46
43
47
#### Для чего использовать
44
-
Данная фикстура позволяет протестировать, например, несовместимости по данным (как и при апгрейде, так и при даунгрейде), например, что новая версия не пишет чего-то, что старая версия не может прочитать.
48
+
49
+
Данная фикстура позволяет протестировать, например, несовместимости по данным (как и при апгрейде, так и при даунгрейде), например, что новая версия не пишет чего-то, что старая версия не может прочитать.
45
50
46
51
### RollingUpgradeAndDowngradeFixture
47
-
Фикстура позволяет протестировать сценарий роллинг апгрейда и даунгрейда. Реализует сценарий "имеется кластер last версии, он понодно заменяется на current версию, потом обратно на last".
48
52
49
-
Сама фикстура сначала поднимает кластер версии last, потом заменяет ноды на версию current, а потом оборатно понодно заменяет на last эмулируя откат.
53
+
Фикстура позволяет протестировать сценарий роллинг-апгрейда и даунгрейда. Реализует сценарий "имеется кластер last версии, он понодно заменяется на current версию, потом обратно на last".
54
+
55
+
Сама фикстура сначала поднимает кластер версии last, потом заменяет ноды на версию current, а потом обратно понодно заменяет на last, эмулируя откат.
50
56
51
-
Шаг апгрейда/даунгрейда (замена версии ноды на другую) вызывается из теста следующим образом:
57
+
Шаг апгрейда/даунгрейда (замена версии ноды на другую) вызывается из теста следующим образом:
52
58
53
59
```python
54
-
for _ inself.roll():
55
-
pass# do something with cluster between upgrade/downgrade steps
60
+
for _ inself.roll():
61
+
pass# do something with cluster between upgrade/downgrade steps
56
62
```
57
63
58
-
На каждой итерации цикла тестовое окружение заменяет одну ноду на другую версию.
64
+
На каждой итерации цикла тестовое окружение заменяет одну ноду на другую версию.
65
+
66
+
Схематично можно изобразить следующим образом (L — last, C — current, каждый столбец — это версия ноды кластера, каждая строка — текущее состояние кластера в теле цикла):
59
67
60
-
Схематично можно изобразить следующим образом (L -- last, C -- current, каждый столбец это версия ноды кластера, каждая строка -- текущее состояние кластера в теле цикла)
61
68
```
62
69
LLLLLLLLL
63
70
CLLLLLLLL
@@ -73,4 +80,5 @@ LLLLLLLLL
73
80
```
74
81
75
82
#### Для чего использовать
76
-
Это наиболее приблеженный к реальности сценарий. Его, например, можно использовать для тестирования, в котором необходимо чтобы все таблетки со 100% гарантией в рамках работы кластера переехали с одной версии на другую.
83
+
84
+
Это наиболее приближенный к реальности сценарий. Его, например, можно использовать для тестирования, в котором необходимо, чтобы все таблетки со 100% гарантией в рамках работы кластера переехали с одной версии на другую.
0 commit comments