1
00:00:03,767 --> 00:00:05,718
Toto je testbed-qemu.

2
00:00:05,718 --> 00:00:09,619
Spouští skutečný router
s prplOS uvnitř QEMU.

3
00:00:10,120 --> 00:00:14,300
Tomuto routeru říkáme
testované zařízení neboli DUT.

4
00:00:14,800 --> 00:00:19,373
Spouští cram testy prplOS,
tytéž testy, které spouští CI.

5
00:00:19,873 --> 00:00:24,837
Spustí DUT na vašem počítači, a to
z obrazu prplOS, který si vyberete.

6
00:00:29,197 --> 00:00:33,692
Kontejner testbed-qemu spouští
Docker Compose nebo rootless Podman.

7
00:00:33,692 --> 00:00:38,740
V kontejneru testovací hostitel
spouští cram, SSH a sériovou konzoli.

8
00:00:38,740 --> 00:00:43,235
Vedle něj QEMU spouští DUT; pokud
má hostitel KVM, použije ho.

9
00:00:43,235 --> 00:00:45,586
Obě strany propojují tři spoje.

10
00:00:45,586 --> 00:00:47,937
LAN přenáší váš testovací provoz.

11
00:00:47,937 --> 00:00:52,086
WAN dostává adresu od
DHCP serveru v kontejneru

12
00:00:52,086 --> 00:00:54,922
a přes něj se dostává do vnějšího světa.

13
00:00:54,922 --> 00:00:57,480
Třetím spojem je sériová konzole.

14
00:00:57,480 --> 00:01:02,805
Hostitel poskytuje kontejneru strom
prplOS a obraz prplOS, ten jen pro čtení.

15
00:01:02,805 --> 00:01:07,092
Dále adresář pro logy
a výsledky a pro shell

16
00:01:07,092 --> 00:01:09,374
adresář pro jeho perzistentní disk.

17
00:01:13,734 --> 00:01:19,603
Potřebujete Linux, Docker Compose
či rootless Podman, git a make.

18
00:01:19,603 --> 00:01:23,020
S KVM se DUT spustí zhruba za půl minuty.

19
00:01:23,020 --> 00:01:26,065
Bez něj QEMU stále funguje, ale pomalu.

20
00:01:26,565 --> 00:01:29,388
Naklonujte repozitář testbed-qemu.

21
00:01:32,900 --> 00:01:34,361
Pak spusťte make fetch.

22
00:01:34,361 --> 00:01:38,892
Stáhne zafixovaný obraz prplOS
a ověří jeho kontrolní součet.

23
00:01:38,892 --> 00:01:43,716
Také zapíše ořezaný testovací
strom prplOS do adresáře qa-cache.

24
00:01:44,216 --> 00:01:46,580
Pak spusťte make test-qemu-shell.

25
00:01:46,580 --> 00:01:49,575
Při prvním použití sestaví kontejner.

26
00:01:49,575 --> 00:01:53,595
Spustí DUT a otevře shell v kontejneru.

27
00:01:57,955 --> 00:02:01,838
Testovací buckety jako smoke
potřebují skutečný klon prplOS,

28
00:02:01,838 --> 00:02:04,655
ne ořezaný strom z make fetch.

29
00:02:04,655 --> 00:02:08,614
Naklonujte tedy prplOS na commitu
zafixovaném v testbed-qemu.

30
00:02:09,114 --> 00:02:10,802
Pak spusťte make test-qemu.

31
00:02:10,802 --> 00:02:14,318
Nasměrujte ho na klon
a zvolte smoke bucket.

32
00:02:14,318 --> 00:02:18,256
Spustí čistý DUT a počká
na SSH a datový model.

33
00:02:18,256 --> 00:02:23,038
Pak spustí šest smoke testů,
které klon uvádí pro tuto desku.

34
00:02:25,502 --> 00:02:30,410
V CI prplOS může merge request
ručně spustit tentýž smoke bucket

35
00:02:30,410 --> 00:02:33,967
jako QEMU job, v tomtéž
kontejneru testbed-qemu.

36
00:02:33,967 --> 00:02:37,453
Spustí šest smoke testů
a jeden z nich přeskočí.

37
00:02:37,453 --> 00:02:39,444
Pak spustí dva post testy.

38
00:02:39,444 --> 00:02:44,708
Běh prošel a job přesto
posbíral z DUT ladicí informace.

39
00:02:44,708 --> 00:02:47,838
Job běží na GitLab runneru, který má KVM.

40
00:02:52,198 --> 00:02:55,002
Režim shell je make test-qemu-shell.

41
00:02:55,002 --> 00:02:59,409
Shell dostanete hned,
zatímco DUT ještě bootuje.

42
00:02:59,967 --> 00:03:01,655
Stiskněte šipku nahoru.

43
00:03:01,655 --> 00:03:07,875
Historie shellu už obsahuje
testbed-qemu wait a testbed-qemu ssh.

44
00:03:07,875 --> 00:03:12,673
Příkaz wait blokuje, dokud
DUT neodpoví přes SSH.

45
00:03:12,673 --> 00:03:16,138
Pak ssh otevře na DUT rootovský shell.

46
00:03:16,638 --> 00:03:21,446
Teď pracujete na DUT jako root,
například vypíšete jeho routy.

47
00:03:25,638 --> 00:03:31,755
Pokud místo SSH potřebujete sériovou
konzoli, spusťte testbed-qemu console.

48
00:03:31,755 --> 00:03:33,909
Pro prompt stiskněte Enter.

49
00:03:33,909 --> 00:03:36,924
Ctrl-] vás vrátí zpět do shellu.

50
00:03:41,284 --> 00:03:42,410
Teď přidejte test.

51
00:03:42,410 --> 00:03:47,967
Uložte ho do stromu prplOS na svém
počítači: shell vidí tytéž soubory.

52
00:03:47,967 --> 00:03:52,848
Cram test je textový soubor: příkaz
a pak výstup, který očekáváte.

53
00:03:52,848 --> 00:03:56,828
Tento test ověřuje, že se přes
LAN dostanete na DUT pomocí SSH.

54
00:03:57,328 --> 00:03:59,474
Spusťte ho přes testbed-qemu cram.

55
00:03:59,474 --> 00:04:02,480
Běží proti už spuštěnému DUT,

56
00:04:02,480 --> 00:04:05,270
takže ho můžete spustit
znovu bez nového bootu.

57
00:04:05,770 --> 00:04:09,455
Teď ho rozbijte: v souboru
změňte očekávaný výstup.

58
00:04:12,270 --> 00:04:13,194
Spusťte znovu.

59
00:04:13,194 --> 00:04:18,593
Cram vypíše diff: řádek, který test
očekává, a řádek, který dostal.

60
00:04:20,770 --> 00:04:26,064
Pokud je nový výstup správný, přijměte ho:
spusťte příkaz cp, který runner vypíše,

61
00:04:26,064 --> 00:04:26,858
na hostiteli.

62
00:04:32,630 --> 00:04:34,940
Když QEMU job v CI selže,

63
00:04:34,940 --> 00:04:41,043
nejdřív ho reprodukujte na svém počítači:
spusťte stejný test přes make test-qemu.

64
00:04:41,543 --> 00:04:45,620
Tady spustíme test reboot, jeden
z vlastních testů testbed-qemu.

65
00:04:45,620 --> 00:04:50,770
Zapíše soubor se značkou, restartuje
DUT a počká, až se vrátí SSH.

66
00:04:50,770 --> 00:04:55,706
Pak ověří, že značka přežila
a že se vynuloval uptime.

67
00:04:55,706 --> 00:04:59,568
Vlastní CI testbed-qemu spouští
tento test v každé pipeline.

68
00:05:00,068 --> 00:05:03,827
Dávkový běh přes make test-qemu
vždy spustí vlastní

69
00:05:03,827 --> 00:05:06,054
kopii obrazu v továrním stavu.

70
00:05:06,054 --> 00:05:10,092
Shell si při prvním použití
naflashuje z obrazu vlastní disk

71
00:05:10,092 --> 00:05:14,755
a ten disk si drží mezi sezeními,
v adresáři qemu-disk-state.

72
00:05:14,755 --> 00:05:17,748
Pro čistý start spusťte
testbed-qemu disk reset.

73
00:05:17,748 --> 00:05:21,438
Poté další řízený boot
začne z továrního stavu.

74
00:05:21,938 --> 00:05:23,150
Když běh selže,

75
00:05:23,150 --> 00:05:26,786
testbed-qemu posbírá
z DUT ladicí informace

76
00:05:26,786 --> 00:05:28,925
dřív, než DUT vypne.

77
00:05:28,925 --> 00:05:34,914
Job v CI prplOS, který jste viděli,
je sbírá při každém běhu, i úspěšném.

78
00:05:34,914 --> 00:05:38,265
V živém shellu si o ně
můžete kdykoli říct.

79
00:05:42,625 --> 00:05:45,473
testbed-qemu obsahuje i skill pro agenty.

80
00:05:45,473 --> 00:05:49,880
Soubor skillu uvádí přesné
příkazy, návratové kódy a runbook.

81
00:05:49,880 --> 00:05:53,067
Tady Claude Code s modelem
Sonnet běží v režimu auto.

82
00:05:53,067 --> 00:05:56,729
Načte skill a zkontroluje
hostitele příkazem doctor,

83
00:05:56,729 --> 00:05:59,373
který nejdřív sestaví image kontejneru.

84
00:05:59,373 --> 00:06:03,984
Pak test spustí DUT v QEMU,
počká na SSH a datový model

85
00:06:03,984 --> 00:06:06,086
a spustí test konektivity.

86
00:06:06,086 --> 00:06:09,679
Ohlásí, že test prošel,
spolu s post kontrolami,

87
00:06:09,679 --> 00:06:11,917
časy bootu a artefakty.

88
00:06:11,917 --> 00:06:16,324
Stavový řádek ukazuje, kolik
běh stál tokenů, času a peněz.

89
00:06:18,985 --> 00:06:24,049
testbed-qemu spouští obraz prplOS,
který si stáhnete, s celým userspace.

90
00:06:24,049 --> 00:06:27,739
DUT dostane skutečnou LAN,
WAN a sériovou konzoli.

91
00:06:27,739 --> 00:06:30,198
Nenahrazuje skutečný hardware

92
00:06:30,198 --> 00:06:34,033
a nemodeluje ani switch,
ani mobilní bránu.

