Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Testy integracyjne

Testy integracyjne weryfikują zachowanie systemu jako całości - uruchamiają rzeczywiste binaria (xretractor, xqry, xtrdb) i porównują ich wyjście z wzorcami lub sprawdzają konkretne właściwości plików wynikowych. Testy jednostkowe używają frameworka GTest do sprawdzania klas i funkcji bibliotek rdb i retractor (np. payload, descriptor, crsMath, compiler). Zależnie od badanego kontraktu również tworzą pliki, procesy potomne i obiekty IPC; sam podział na testy jednostkowe i integracyjne nie wyznacza zakresu używanych zasobów.

Przy budowaniu GCC w konfiguracji Release z aktywnym IPO (RDB_USE_IPO=ON, RDB_BENCH_PROBE=OFF i pozytywny wynik kontroli obsługi IPO) biblioteki zawierają zarówno kod maszynowy, jak i reprezentację do LTO (-ffat-lto-objects). Testy jednostkowe są linkowane z -fno-lto i wykonują zwykły kod maszynowy tych bibliotek; nie sprawdzają wyniku optymalizacji podczas linkowania. Wydawane programy zachowują LTO, więc kod po tej optymalizacji jest sprawdzany przez testy integracyjne uruchamiające te programy. Rozdzielenie ustalają główny CMakeLists.txt i test/UnitTest/CMakeLists.txt przez RDB_UT_WITHOUT_IPO. Nie zmienia ono konfiguracji Debug, a dla kompilatorów innych niż GCC pozostaje dotychczasowe ustawienie IPO testów jednostkowych.

W katalogu build/Debug/ polecenie ninja test uruchamia zwykły zestaw bez etykiety valgrind, a przy domyślnym RDB_WITH_API=OFF także bez api. Samo ctest wybiera wszystkie zarejestrowane grupy, w tym Valgrind i API. ninja test-valgrind wybiera etykietę valgrind, a ninja test-api buduje i uruchamia klientów monitorujących. Pojedynczy test można wybrać przez ctest -R '^nazwa$' -V; CTest dobiera także wymagane oprawy (FIXTURES_REQUIRED). Przed przebiegiem należy odbudować badane cele, sprawdzić katalog źródłowy zapisany w CMakeCache.txt, komendę z ctest -N -V i efektywny PATH. Wybrane programy oraz kopie skryptów i danych w drzewie budowy muszą być zgodne bajtowo z właśnie zbudowanymi celami i bieżącymi źródłami. Szczegóły zawiera test/CLAUDE.md w repozytorium kodu.

Wszystkie scenariusze znajdują się w jednym katalogu test/IntegrationTest. CMake przydziela większości katalogów jedną z szesnastu przestrzeni RDB_NAMESPACE oraz odpowiadającą jej blokadę zasobu. Rozdziela to magistralę, nazwę instancji, obiekty IPC i plik dziennika bez zmiany zapytań ani wzorców. Testy jednego katalogu pozostają wzajemnie wykluczone, ale różne katalogi mogą uruchamiać serwery równolegle. RUN_SERIAL zachowują scenariusze badające produkcyjną tożsamość globalną, współpracę wielu serwerów oraz sprzątanie pozostałości (leftover_sweep), które mogłoby zostać wykonane przez równoległą instancję przed sprawdzeniem asercji.

Blokada RESOURCE_LOCK wyklucza także katalogi, które otrzymały ten sam slot puli; nie ustala jednak kolejności wykonania. Testy jednostkowe mają oddzielne oprawy przygotowania dla zwykłego przebiegu i Valgrinda. Przy pełnym ctest przygotowanie wariantu Valgrinda czeka na zwykły test, aby nie skasować jego metadanych. Przestrzenie nazw pozwalają na równoległość wewnątrz jednego przebiegu CTest; nie izolują dwóch niezależnych przebiegów, które mogą użyć tych samych slotów i instalacji. Na jednej maszynie należy prowadzić tylko jeden przebieg budowania, instalacji lub testów naraz.

Pula ogranicza liczbę przestrzeni, lecz nie rezerwuje pamięci współdzielonej. W obecnym układzie jeden serwer z własną magistralą zajmuje około 5,1 MiB w /dev/shm (magistrala, kolejka poleceń i segment odpowiedzi); 16 takich serwerów może potrzebować około 83 MiB, poza obiektami testów jednostkowych. Kontener z limitem 64 MiB nie mieści pełnej puli. Przy błędach shared memory too small lub No space left on device trzeba zwiększyć dostępną pamięć współdzieloną albo zmniejszyć równoległość; samo rozdzielenie nazw nie rozwiązuje braku pojemności.

Skrypty korzystają z portable.sh, m.in. do pomiaru rozmiaru plików, limitów czasu i odczytu wartości binarnych. file_size zwraca 0 także dla nieistniejącego pliku, więc równość rozmiarów nie dowodzi istnienia ani zgodności danych. Oczekiwane artefakty wymagają kontroli obecności i treści, np. przez cmp lub niezależną wyrocznię. Analogicznie kontrola stanu IPC musi dotyczyć własnej przestrzeni testu: zmiany obiektów sąsiada nie świadczą o braku izolacji. Test Python api/python/tests/test_isolation.py porównuje stan swojej przestrzeni przed kompilacją, po wykonaniu, zamknięciu i wyjściu procesu, także po SIGKILL, przy działającym serwerze referencyjnym.

Poniższe tabele opisują zamiar każdego scenariusza. Nie są inwentarzem wykonywalnym: jeden katalog rejestruje zwykle kilka wpisów ctest (warianty -run, -compile, -vg, warianty nazwane), a lista rośnie z każdym wydaniem. Aktualny stan zwraca ctest -N w katalogu build/Debug.

Po scaleniu drzew wszystkie testy integracyjne mają prefiks it_; dawny prefiks pt_ nie opisuje już osobnej klasy. Testy skryptowe używają st_, a testy klientów monitorujących etykiety api. Osadzany binding Pythona ma osobną etykietę python: przy RDB_PYTHON=ON wpis python_stage odświeża pakiet, a python_binding uruchamia pytest w zwykłym ninja test. Nie należą one do ninja test-valgrind. Dwa strażniki nadrzędne - harness_guard-selftest i harness_command_integrity - sprawdzają, że wrapper rzeczywiście uruchomił polecenie pod testem i nie zamaskował jego kodu wyjścia.

Opisy Valgrinda dotyczą standardowego przebiegu na Linuksie. Rozwojowy port Apple uruchamia testy bez tego opakowania i wymaga osobnego budowania z sanitizerami; nazwa -vg nie potwierdza kontroli pamięci. Zakres testów i jawnego test-api opisuje środowisko rozwojowe Apple. Testy jednostkowe test_busFallback.cpp sprawdzają także utrzymanie zamka przez zatrzymanego żywego właściciela i odzyskanie po jego śmierci.

Scenariusze wykonawcze i usługowe

Nazwa testuOpis
DataWspólny zestaw danych i zapytań dla scenariuszy przekrojowych: waterfall (przebieg pełnego planu przez -m 10 i posprzątanie artefaktów), workflow (zapytanie referencyjne, porównanie dwóch strumieni wynikowych) oraz all-operators (ten sam przebieg dla zapytania używającego kompletu operatorów algebry). Patrz: Przetwarzanie i dystrybucja danych.
ipc_identity_lockZajęta tożsamość IPC odrzuca start przed zmianą magazynu; dwa serwery z tą samą jawną nazwą nie mogą przejąć wspólnego IPC mimo różnych TMPDIR i przestrzeni magistrali. Pierwszy serwer nadal odpowiada. Blokadę zajmuje protokołem silnika (stillLinked z ponowieniami), bo gołe open() + flock() przegrywało z zamiatarką sąsiedniego testu. Każda nieudana kontrola zrzuca stan w chwili awarii - zawartość /dev/shm z i-węzłami, blokady z właścicielami z /proc/locks, tablicę procesów i ogon logu silnika - dlatego test biegnie równolegle, bez RUN_SERIAL.
leftover_sweepSprzątanie po zwykłym wyjściu, restarcie po SIGKILL, wyjściu innej instancji i jawnym --cleanup. Sprawdza zachowanie zasobów żywego serwera. Działa szeregowo, aby równoległy proces nie usunął badanych pozostałości.
agse1Operator okna @(krok, szerokość) - krok liczony w płaskich elementach źródła; dodatnia szerokość @(1,4) układa okno od najnowszego elementu, a ujemna @(1,-4) odwraca jego kolejność. Patrz: Ruchome okno danych AGSE.
agse_arrayAGSE nad liczbowym polem tablicowym i równoważnym schematem skalarnym: każdy płaski element musi wejść do okna w tej samej kolejności. Patrz: Operatory agregujące, Przebiegi kompilacji.
agse_volatileOkno AGSE nad strumieniem VOLATILE (bufor MEMORY) musi widzieć cały zakres okna. Przy zbyt małej pojemności bufor kołowy nadpisuje najstarsze pole i okno czyta w jego miejsce rekord najnowszy. Patrz: Klauzula VOLATILE, Ruchome okno danych AGSE.
array_derivedRównoważność liczbowego T[N] i jawnych pól skalarnych przez kopię, przesunięcie, AGSE, redukcję SUMC, przeplot oraz mieszany przeplot; obejmuje też mapowanie NULL. Patrz: Operatory agregujące, Przebiegi kompilacji.
client_tty_keystroke_immunityBajt oczekujący na pseudoterminalu nie może skrócić odbioru xqry --elimitqry N; klient ma odebrać cały budżet rekordów i dopiero potem wykonać połączone --kill.
config_storage_validationTwarde odrzucenie niepoprawnego storage.dir w pliku TOML: wariant nonexistent (katalog nie istnieje) i unwritable (brak prawa zapisu). W obu program kończy się kodem niezerowym i komunikatem Configuration error: storage.dir …. Wariant config-errors sprawdza wykrytą warstwę z błędną składnią TOML i ze względnym paths.lock_dir w xretractor, xqry i xtrdb (kod niezerowy, nazwa pliku i przyczyna na stderr), brak pliku jako kontrolę dodatnią, jawne --config oraz działanie --help mimo uszkodzonej konfiguracji. Patrz: Opcje wywołania - xretractor, Plik konfiguracyjny.
deinterleave_roundtripBitowa weryfikacja tożsamości okrężnej przeplot–rozplot: a2 i b2 odtwarzają składowe dokładnie, od rekordu zerowego, bez rekordu-zastępnika. Wzorce wyprowadzone z definicji formalnych, nie z wyjścia silnika. Patrz: Ogony, początki logiczne i obserwowalność operatorów.
device_timeoutOdczyt źródła DEVICE bez blokowania, z FIFO jako kontrolowanym źródłem: jawna klauzula TIMEOUT w wydruku -c, ostrzeżenie o terminie dłuższym od szybkości, odmowa TIMEOUT przy przestarzałym FILE i ujemnego [sources] timeout_s; pierwszeństwo terminu (RQL, konfiguracja, 0, tryb -f); te same bajty jako BINFILE i jako DEVICE dają te same wyniki za operatorami wielotaktowymi; FIFO bez pisarza bez zawieszenia, z rekordami NULL; --until-eof kończy się na odejściu pisarza bez rekordu NULL zza końca; xqry odpowiada w trakcie czekania na źródło; TIMEOUT przechodzi przez import ad hoc i --reset. Wariant -vg- pod Valgrindem. Patrz: Polecenie DECLARE.
ecg_qrsPełne wykonanie przykładowego potoku EKG w zwartej postaci: okna bezpośrednio w FROM, rozwinięcie [_] według ich szerokości i reduktory funkcyjne. Test kontroluje origin= i tail= w planie oraz 4830 rekordów deterministycznej treści czterech strumieni pośrednich i końcowych. Patrz: Wizualizacja EKG MIT-BIH, Przetwarzanie symbolu _, Ogony, początki logiczne i obserwowalność operatorów.
agse2Kombinacje okna @(n,m) na strumieniu 3-polowym, wyrównanie i rate-conversion przy proporcjach 1:1, 1:2, 2:3, 2:4. Patrz: Ruchome okno danych AGSE.
agse3Operator @(n,m) gdy output rate jest niższy niż input rate (source rate 0.1) - okna @(3,2), @(3,3), @(3,-3). Patrz: Ruchome okno danych AGSE.
consistencySpójność odczytu: dwa strumienie czytają to samo źródło; ich różnica musi być stale równa 100. Patrz: Przepływ danych i sterowania.
fatal_exit_pathBłąd krytyczny podczas startu i w wątku komunikacyjnym kończy proces statusem 1, usuwa IPC oraz blokadę usługi i nie przechodzi w SIGSEGV ani SIGABRT. Patrz: Przepływ danych i sterowania.
fncall_runtime_caseWykonanie funkcji matematycznych zapisanych formami dopuszczonymi przez gramatykę, w tym Sqrt, Ceil i Floor; test sprawdza wartości w runtime, nie tylko poprawną kompilację. Patrz: Wyrażenia pól i funkcje skalarne.
index_wildcard_mixedRozwinięcie [_] jako jednej pozycji mieszanej listy SELECT: zachowanie kolejności pól przed i po rozwinięciu, dwa niezależne rozwinięcia oraz zgodność układu payloadu z ręcznym wzorcem.
adhoc_parse_errorBłędna składnia, kilka instrukcji, literał poza zakresem, zerowy interwał i inne niepoprawne wartości są odrzucane z powodem bez zatrzymania serwera ani zmiany planu. Dotyczy to także deklaracji LET i odwołań ?NAZWA, których kanał ad hoc nie przyjmuje.
adhoc_ruleDołączenie RULE ... DO DUMP w locie, granica dostępnej historii oraz odrzucenie DO SYSTEM i zbyt głębokiego zakresu dla magazynu MEMORY.
issue202_hash_shift_e2eWykonawcza weryfikacja tożsamości (A>2)#(B>1) = (A#B)>3 dla ΔA=0,1 i ΔB=0,2: niezależne źródła tekstowe, identyczność fizycznych strumieni matched i CC oraz porównanie z sekwencją wyliczoną z formuły przeplotu. Patrz: Substraty.
issue113_meta_internalStruktura pliku sidecar .meta: rozmiar nagłówka (8 B), rozmiar wpisu (18 B), interwał próbkowania, bitsety null dla rekordów z null i bez. Patrz: Format zapisu danych - Pliki.
issue113_meta_xtrdbWeryfikacja przez xtrdb że po uruchomieniu xretractor+xqry plik .meta powstaje i jest raportowany poprawnie (meta: temp/str_null.meta). Patrz: Format zapisu danych - Analiza artefaktów.
issue113_null_skipFlaga -n w xqry - wiersze w całości null są pomijane; bez flagi wszystkie wiersze (łącznie z all-null) muszą być obecne. Patrz: Opcje wywołania - xqry.
issue113_null_xqryNull przesyłane przez IPC: wartości null z pliku źródłowego wyświetlane jako null w wyjściu xqry. Patrz: Opcje wywołania - xqry.
issue121_isnullFunkcja isnull(field) - zwraca 1 gdy pole jest null, 0 gdy nie jest. Patrz: Wyrażenia pól i funkcje skalarne.
issue121_null_propagationPropagacja wartości null przez SELECT do strumienia wynikowego. Patrz: Polecenie SELECT.
issue128_numeric_to_stringKonwersja INTEGER/FLOAT do STRING funkcją to_string() z deklaracją szerokości pola; weryfikacja deskryptora wynikowego. Patrz: Wyrażenia pól i funkcje skalarne.
issue128_string_to_numericKonwersja STRING do typów numerycznych: to_integer(), to_float(), to_double(); propagacja null przez konwersję. Patrz: Wyrażenia pól i funkcje skalarne.
issue167_dedup_cascadedKaskadowe wchłanianie substratów przez deduplicateSubstrats() - wieloetapowe przepisywanie tokenów PUSH_ID. Patrz: Substraty.
issue167_dedup_field_namesDeduplikacja substratów bez porównania nazw pól schematu - scalanie gdy typy pól są równoważne, niezależnie od nazw. Patrz: Substraty.
issue167_dedup_nonzero_offsetAktualizacja PUSH_ID w lSchema konsumenta przy niezerowym offsecie wchłanianego substratu; pokrycie ścieżki w compiler.cpp. Patrz: Substraty.
issue167_dedup_positivePodstawowy przypadek deduplikacji: substrat scalany z nazwanym strumieniem o równoważnym programie i typach pól. Patrz: Substraty.
issue167_triargWieloargumentowe wyrażenia strumieniowe: s1+s2+s3, (s1#s2)#s3, s1+(s2#s3), s1+s2+s3+s4; substraty pamięciowe i dyskowe. Patrz: Substraty, Sekwencjonowanie operacji.
issue217_client_diag_stderrDiagnostyka xqry musi trafiać na stderr, a nie na stdout. Wywołanie przy braku serwera kończy się kodem niezerowym i niepustym stderr - bez tego przekierowanie >/dev/null 2>err czyniło każdą awarię klienta niewidoczną. Patrz: Opcje wywołania - xqry.
issue227_join_alignmentRozdzielenie początku logicznego od ogona. Wariant run sprawdza wypisywane przez kompilator origin= i tail= oraz treść złączenia okna z jego źródłem; wariant adhoc-origin - że zapytanie dołożone w locie zaczyna od slotu, w którym zobaczył je runtime. Wartości oczekiwane wyprowadzone z definicji operatorów. Patrz: Ogony, początki logiczne i obserwowalność operatorów, Zapytania Ad hoc.
issue42_rulePolecenie RULE - warunkowe akcje DUMP i SYSTEM wyzwalane na wartościach strumienia; uruchamia xretractor i odczytuje wynik przez xtrdb. Osobny wpis -dump rozkłada pliki temp/str1_*_dump*.tmp na wartości INTEGER i porównuje je ze wzorcem - przypina stan faktyczny, razem z wiodącymi zerami, które DO DUMP -5 zapisuje nad strumieniem młodszym niż sześć rekordów. Patrz: Polecenie RULE.
k19_boundariesGranice obserwowalności operatorów: okno do przodu i wstecz, różnica o interwale równym i dwukrotnym, redukcja .sumc. Rozróżnia prawdziwy NULL wewnątrz pełnego okna od wewnętrznego rekordu all-null zwracanego jako bezpiecznik przy odczycie poza historią. Patrz: Ogony, początki logiczne i obserwowalność operatorów.
k24_capacityGłębokość historii dla operatorów czytających w przód. Różnice o ilorazie całkowitym ≥ 3 dawały wcześniej strumień poprawnej długości złożony wyłącznie z rekordów all-NULL (cichy defekt), a łańcuch okna, przesunięcia i przeplotu kończył się przerwaniem procesu w storage::revRead. Patrz: Przebiegi kompilacji.
k24h10_exact_tailsGranice emisji dla różnicy oraz obu rozplotów, także nad źródłami o niezerowym ogonie. Liczba i treść rekordów chronią dokładne reguły fazowe przed przedwczesną lub opóźnioną emisją. Patrz: Ogony, początki logiczne i obserwowalność operatorów.
let_constantsStałe LET i odwołania ?NAZWA we wszystkich kontekstach liczbowych. Para planów „literały / LET” daje bajtowo równe wydruki xretractor -c (tekst, CSV, DOT) oraz bajtowo równe pliki strumieni, deskryptory i zrzuty DUMP po przebiegu na tych samych danych. Patrz: Polecenie LET.
let_typedJawny typ stałej LET (#547). Stała DOUBLE nad polem DOUBLE obok stałej 0.1 bez adnotacji (FLOAT) - różnica widoczna w osobnym polu; stała RATIONAL w wyrażeniu nad polem INTEGER daje pole RATIONAL; stała UINT 3000000000 w RULE ... WHEN nad polem UINT, z licznikiem VAR trafień. Wartości i typy pól z .desc wobec wyroczni oracle.py. Patrz: Polecenie LET.
var_readVAR bez SET jest równoważna LET w wyrażeniach skalarnych; typy, programy i wyniki pozostają zgodne.
var_setHistereza, licznik, EMA i przeskalowane uc10/uc11/uc12/uc14 porównywane z niezależną wyrocznią Pythona od początku przebiegu; zapis od następnego slotu, konflikty według kolejności reguł, NULL i dwa identyczne przebiegi offline.
var_resetUtrata stanu zatrzasku po ponownym wczytaniu planu i powrót dopiero po nowym przekroczeniu progu.
var_adhocOdczyt VAR i dołączanie DO SET w locie, pierwszeństwo późniejszej reguły, odmowy bez zmiany stanu oraz reset bez przecieku nazw i wartości.
var_xqryxqry –vars przed pierwszym slotem i po SET; INTEGER, FLOAT, RATIONAL, NULL, YAML, odmowa JSONL oraz puste listy dla planu bez VAR i instancji bez planu.
var_typedJawny typ VAR: licznik UINT zerowany literałem, akumulator DOUBLE nad polem DOUBLE i próg RATIONAL przywracany literałem 0.1 (dokładnie 1/10), porównane z wyrocznią Pythona; dwa przebiegi bajtowo równe i typy z adnotacji w xqry –vars.
noclock_offlineRównoważność artefaktów i logicznej osi czasu między wykonaniem taktowanym a --no-clock, razem z odrzuceniem połączenia --no-clock --realtime. Patrz: Opcje wywołania - xretractor.
multiserver_namedDwie nazwane instancje, rozłączne blokady i IPC, wszystkie formy --name, automatyczne nazwy oraz niezależne zatrzymanie.
multiserver_no_clobberPrzegrany start tej samej instancji nie kasuje artefaktów właściciela i raportuje jego PID.
multiserver_routingAutomatyczny routing strumieni, ad hoc i RULE, odmowa przekroczenia granicy serwerów, lista magistrali oraz oczekiwanie na właściwą instancję.
multiserver_uniquenessAtomowa unikalność nazw strumieni, plików magazynu i licznika rotacji przy starcie, ad hoc, dostarczaniu do usługi i konkurencyjnych uruchomieniach.
null_divide_by_zeroDzielenie przez zero jest wartością pochłaniającą: strumień oddaje NULL i pracuje dalej. Istotą testu jest rekord następujący po dzieleniu - gdyby brak wyniku był obsługiwany wyjątkiem, nigdy by nie powstał. Patrz: Wyrażenia pól i funkcje skalarne.
issue56_timeshiftOperator filtra > na połączonych strumieniach - do wynikowego strumienia trafiają tylko rekordy spełniające warunek. Patrz: Polecenie SELECT - Sekwencjonowanie.
issue61_tmpmemSubstrat pamięciowy SUBSTRAT 'memory' - dane pośrednie przechowywane w RAM zamiast na dysku. Patrz: Typy STORAGE.
issue6_adhocTryb zapytania ad-hoc: xqry -a 'SELECT ...' - definicja i wykonanie zapytania w locie bez pliku .rql. Patrz: Zapytania Ad hoc.
operationsOperator # (HASH merge) dwóch strumieni o różnych rate - weryfikacja stosunku liczby rekordów w wyjściu. Patrz: Sekwencjonowanie operacji przeplotu.
optimizer_ablationWariantowe budowanie z wyłączanymi regułami optymalizatora. build-info sprawdza tożsamość zgłaszanej konfiguracji binarki, plan - kształt planu, a pozostałe warianty (semantic, factor-*, dedup-*) porównują wynik wykonania między konfiguracjami. Każda dopuszczalna konfiguracja optymalizatora musi zachować obserwowalny wynik. Patrz: Budowanie produkcyjne i warianty diagnostyczne.
packagingKontrola dokładnej zawartości pakietu DEB (jeśli dostępne jest dpkg-deb): trzy binaria, jednostka systemd, licencja, domyślny TOML i przykłady konfiguracji. Osobno kontroluje portable TGZ: trzy binaria, licencję i domyślny TOML, ze ścieżkami względnymi i bez usługi. Pakiet źródłowy jest wyłączony i nie jest badany. Patrz: Budowanie produkcyjne i warianty diagnostyczne.
r1_identity_nullsTożsamość R1 dla planu przepisanego, nieprzepisanej lewej strony i jawnej prawej strony: równość origin=, payloadu oraz mapy NULL w .meta. Strona nieprzepisana ma ogon ściśle większy - R1 zachowuje ciąg rekordów, nie opóźnienie - więc jej porównanie obejmuje wspólny prefiks. Przypadek ΔA/ΔB=3/2 chroni maksimum fazowe własnego ogona #. Patrz: Substraty.
replay_stabilityPowtórzenie tego samego planu na tych samych danych musi wytworzyć identyczny zestaw niepustych artefaktów: payloady, deskryptory, mapy NULL i pliki cienia; z metadanych pomijany jest wyłącznie 8-bajtowy nagłówek zarezerwowany. Patrz: Odtwarzanie strumienia, Format zapisu danych.
rotation_testMechanizm rotacji plików binarnych strumieni (ROTATION) - liczba plików po dwóch cyklach xretractor -m 2. Patrz: Mechanizm rotacji.
select_cse_commutative_addWspółdzielenie równoważnych obliczeń SELECT dla a+b i b+a: jeden STREAM_SELECT_*, zachowanie osobnych publicznych artefaktów i deskryptorów, identyczność danych oraz metadanych NULL. Test chroni też SELECT *, kolejność projekcji i kontrprzykład ze zmianą grupowania trzech źródeł. Patrz: Substraty.
service_deliveryPrzekazanie zestawu do działającej usługi: właściwy wybór celu, zapis planu startowego, odmowa przy kolizji z inną instancją oraz uruchomienie osobnej instancji po podaniu --name lub --autoname.
service_idleTryb usługowy i bezczynny: start bez pliku .rql przechodzi czysto, a dziennik trafia na stderr w formacie sd-daemon (prefiks priorytetu, bez znacznika czasu). Dwa warianty włączenia - flagą --service i zmienną XRETRACTOR_SERVICE. Patrz: Perspektywa ogólna, Opcje wywołania - xretractor.
service_resetDwufazowe zastąpienie pełnego planu, zachowanie starego planu po odmowie, przejście do i ze stanu bezczynnego oraz zapis planu startowego usługi. Obejmuje też granicę DO SYSTEM: plan z taką regułą jest odrzucany w całości, odmowa nazywa regułę i powód, reguła się nie wykonuje, a stary plan liczy dalej - i ten sam plan wchodzi, wraz z działającą regułą, gdy konfiguracja unrestricted.toml ustawia service.unrestricted = true.
service_reset_doubleDwie kolejne wymiany planu tej samej instancji i poprawne odtworzenie zasobów kolejnej epoki.
service_reset_raceKonkurencyjne resetowanie i polecenia klienta nie widzą częściowo rozebranego ani częściowo aktywnego planu.
show_handler_failureAwaria serwerowej obsługi subskrypcji show dociera do klienta jako bezpośrednia przyczyna odmowy, zamiast ujawnić się dopiero jako timeout oczekiwania na kolejkę odpowiedzi.
simpleDymny test arytmetyki na połączonych strumieniach (core0 rate 0.1 + core1 rate 0.2) z odczytem przez xtrdb. Patrz: Polecenie SELECT.
simple_maxZgodna wstecz, wygaszana notacja .max - wartość maksymalna i złączenie z oryginalnym strumieniem. Patrz: Operatory agregujące.
slot_scheduleHarmonogram slotów względem stałej kotwicy, mierzony po chwilach pojawiania się rekordów w magazynie: praca slotu krótsza od okresu (czekanie na pusty DEVICE i reguła DO SYSTEM) nie powoduje narastania opóźnienia, także z --realtime; po pojedynczym przestoju zaległe sloty idą bez snu, wykonanie wraca na pierwotną siatkę, a artefakty BINFILE i DEVICE są bajtowo równe przebiegowi --no-clock; nowa epoka po --reset ma własną kotwicę; import ad hoc nowej szybkości nie przesuwa osi; SIGTERM w trakcie snu kończy przebieg od razu, bez slotu przed terminem. Wariant -vg- pod Valgrindem (dryf i nadrabianie, okres 1/4 s). Patrz: Algorytm przeglądu drzewa zapytań.
source_kindsRodzaj źródła ze słowa kluczowego, nie ze ścieżki: BINFILE 'ascii.txt' czyta surowe bajty, TEXTFILE 'values.dat' parsuje tekst z tokenem NULL, DEVICE na FIFO o nazwie .txt czyta surowe bajty, a bajt zero nie jest NULL. Odmowy rodzaju pliku (FIFO bez pisarza, urządzenie znakowe, zwykły plik dla DEVICE) z kodem 71 i bez zawieszenia. Forma przestarzała FILE daje bez --verbose wyjście identyczne z jawnymi słowami, a z --verbose jedno ostrzeżenie na deklarację - także przy imporcie ad hoc. Deskryptor źródła: dawny TYPE DEVICE pliku binarnego zastępowany, zmiana rodzaju albo ścieżki odrzucana. Wariant -vg- pod Valgrindem. Patrz: Polecenie DECLARE.
stream_generatorGenerator SELECT ... STREAM cell[N]: wykonanie rodziny odpowiada ręcznie rozpisanym strumieniom, instancje mają nazwy cell$0…cell$(N-1), a sprzątanie usuwa artefakty całej rodziny. Patrz: Polecenie SELECT - Generatory strumieni.
string_field_passthroughTekst bez cudzysłowów ze źródła TEXTSOURCE, wyrównanie sąsiednich pól, przycięcie do STRING[N], propagacja typu i rzeczywista wartość Length. Patrz: Wyrażenia pól i funkcje skalarne, Przebiegi kompilacji.
tty_keystroke_immunityBajt oczekujący na pseudoterminalu nie może skrócić wykonania xretractor --llimitqry N; przebieg pod TTY ma wytworzyć tyle samo danych co przebieg bez terminala.
untileof_stop--until-eof odpowiada ręcznie ograniczonemu źródłu ONESHOT, nie zawija pliku i przy wielu źródłach zatrzymuje się na pierwszym wyczerpanym. Wariant it_untileof_stop-missing-sources (#488) sprawdza TEXTFILE, BINFILE i DEVICE: brak pliku lub katalogu nadrzędnego, składnik ścieżki niebędący katalogiem, zerwane dowiązanie oraz brak uprawnień (dla konta bez uprawnień roota). Z -u i w przebiegu ograniczonym -m wymaga zakończenia kodem EIO w limicie 5 s, komunikatu z przyczyną, niezmienionych poprzednich wyników i braku serii ostrzeżeń odczytu. Sprawdza też -c bez dostępnego źródła oraz zniknięcie wejścia po kontroli wstępnej, przed budową modelu: kod EIO bez zapisanych rekordów wyniku. Patrz: Opcje wywołania - xretractor.
wide_from_namesSzeroka klauzula FROM po przekroczeniu progu 200 bajtów używa stabilnej skróconej nazwy substratu, nie przekracza NAME_MAX, zachowuje deduplikację i wykonuje redukcję SUMC nad oknem poprawnie. Patrz: Substraty.
window_aggregateAgregaty MIN/MAX/AVG/SUMC(wyrażenie : W) po historii rekordów: wartości, typy, brzegi, tablice, wyrażenia, wspólne grupy, NULL, null2zero i propagacja schematu przez kopię. Patrz: Operatory agregujące.
xqry_array_rowPełna serializacja liczbowego pola tablicowego przez xqry: wszystkie elementy i ich kolejność w formatach raw, Graphite oraz InfluxDB, bez ograniczenia liczby wartości do liczby wpisów deskryptora. Patrz: Opcje wywołania - xqry, API monitorowania strumieni.
xqry_elem_limitParametr -m N w xqry - limit liczby odebranych rekordów do dokładnie N, niezależnie od długości źródła. Patrz: Opcje wywołania - xqry.
xqrywait_gateBramka --xqrywait nie gubi pierwszego polecenia, nie zeruje budżetu --llimitqry i daje się przerwać sygnałem przed nadejściem klienta.

Nowsze scenariusze regresyjne

Nazwa testuOpis
adhoc_register_rollbackWymuszony błąd statusowy i osobny wariant -throw z wyjątkiem po imporcie przywracają plan i roszczenia magistrali; klient otrzymuje przyczynę, serwer nadal liczy, a ponowione zapytanie daje dane.
hash_stringPrzeplot pól STRING o różnych szerokościach i pól INTEGER/DOUBLE, w obu kolejnościach źródeł oraz przez ad hoc. Wariant -adhoc-zero-step dołącza źródło przed krokiem zerowym przez bramkę -x i sprawdza inicjalizację jego bazy logicznej.
expr_corpusPlany wyrażeń, w tym typy mieszane, napisy i granice przepełnienia, sprawdzają wartości i typy wobec wzorców oraz niezależnej wyroczni. Wyrocznia czyta także binarne FLOAT/DOUBLE i zawartość zrzutów DUMP; own_rules obejmuje prawdziwe i fałszywe warunki reguł, precyzję liczb rzeczywistych oraz granice UINT.
ipc_client_killed_readingŚmierć klienta podczas odczytu odpowiedzi nie blokuje kolejnych komend.
issue252_missing_streamŻądanie nieznanego strumienia zwraca odmowę, a serwer nadal emituje rekordy.
rule_string_comparePorównania napisów oraz warunek z samym napisem w RULE WHEN uruchamiają reguły we właściwych slotach.
xtrdb_engine_guardxtrdb odmawia przy żywej instancji nazwanej, także z własnym paths.lock_dir, lecz dopuszcza porzucony plik blokady. FIFO w katalogu blokad nie zawiesza narzędzia. Nieczytelny plik powoduje odmowę cannot verify bez zmiany magazynu; ten przypadek jest jawnie pomijany dla roota.
xtrdb_lost_lockxtrdb odmawia przy żywym silniku, którego plik blokady skasowano lub podmieniono, i pisze ponownie po jego zatrzymaniu (#573).
expr_result_typesTypy i rozmiary pól wynikowych, wartości ułamkowe, NULL oraz kopiowanie schematu przez SELECT *.
field_ref_outside_fromOdrzucenie odwołania do pola strumienia spoza FROM i poprawność odwołania przez pole strumienia wynikowego.
reducer_field_refOdrzucenie nazwy reduktora jako pola w SELECT oraz odczyt wyniku przez zmaterializowany strumień.
reducer_float_max_avg_countMAX nad ujemnymi FLOAT i DOUBLE oraz AVG nad rekordami o 256 i 257 polach.
self_ref_field_shapeTyp pola wskazanego własną nazwą strumienia pochodzi z odpowiedniego slotu rekordu FROM.
self_ref_simplify_synthTypy slotów wejściowych okna i reduktora chronią obliczenia FLOAT przed błędnym uproszczeniem stałych.
self_ref_simplify_typeOdwołanie własną nazwą w wyrażeniu podlegającym uproszczeniu używa typu slotu FROM, a nie typu pola wyjściowego.
silent_arith_overflowPrzepełnienie arytmetyki INTEGER i RATIONAL w wyrażeniach i reduktorach daje NULL zamiast zawiniętej liczby.
synth_node_output_shapeTypy pól wyjściowych po oknie, redukcji i złączeniu odpowiadają rzeczywistym slotom wejściowym.
xqrywait_first_rowPierwszy rekord nie ginie między otwarciem bramki --xqrywait a utworzeniem kolejki subskrypcji xqry.

Scenariusze kompilacyjne i offline

Poniższe katalogi rejestrują przede wszystkim warianty kompilacji, prezentacji planu albo operacji na artefaktach. Część z nich jest ta sama co w tabeli wykonawczej, ponieważ jeden CMakeLists.txt może rejestrować kilka niezależnych wpisów CTest.

Nazwa testuOpis
DataKompilacyjna strona wspólnego zestawu Data (pliki dzielone z wariantem sekwencyjnym): on-query - kompilacja zapytania referencyjnego, presenter - prezentacja planu po tej kompilacji, banned-artifacts - strażnik sprawdzający, że w katalogu instalacyjnym nie powstał artefakt o zakazanej nazwie kolidującej z narzędziami systemowymi. Patrz: Kompilacja i budowa planu.
dspRegresja kompilacyjna dla zwartego potoku filtra FIR: okno source@(1,25) bezpośrednio w FROM, 25-elementowe rozwinięcie source[_] * filter[_], redukcja SUMC(accRow) oraz złączenie sygnału i wyjścia. Patrz: Implementacja filtru sygnałowego, Przetwarzanie symbolu _.
issue113_metaOperacje xtrdb po dwóch append - lista rekordów i hexdump pliku binarnego porównywane ze wzorcem. Patrz: Format zapisu danych - Analiza artefaktów.
issue113_meta_autocreateAutomatyczne tworzenie pliku sidecar .meta po pierwszym append; rozmiar >16 B; xtrdb raportuje poprawną ścieżkę. Patrz: Format zapisu danych - Pliki.
issue113_null_txtsrcKomendy rread/getpos w xtrdb na strumieniu TEXTSOURCE zawierającym null. Patrz: Format zapisu danych - Analiza artefaktów.
issue153_storagemap_meta_casesMapa składowania xtrdb -s dla pliku zwykłego i retractordb-style: znaczniki slotów, lista segmentów, pliki rotowane, referencje .meta/.shadow. Patrz: Narzędzie inspekcji xtrdb -s.
issue202_hash_shift_factorizationAlgebraiczna optymalizacja (A>i)#(B>k) do (A#B)>(i+k) dla i·ΔA=k·ΔB oraz ochrona przypadku niedopasowanego. Patrz: Substraty.
issue31_docGenerowanie grafów DOT/SVG przez xretractor -c -d ... dla przykładów dokumentacyjnych na trzech poziomach szczegółowości. Patrz: Debugowanie kompilacji.
issue42_ruleKompilacja składni RULE - tylko etap -c, bez uruchamiania serwera. Patrz: Polecenie RULE.
issue56_timeshiftKompilacja operatora filtra > - tylko etap -c. Patrz: Polecenie SELECT - Sekwencjonowanie.
issue61_tmpmemKompilacja zapytania z SUBSTRAT 'memory' - tylko etap -c. Patrz: Typy STORAGE.
issue95_loopInCompileWykrywanie cykli w grafie zapytań przez kompilator - oczekiwany błąd “Circular dependency” i niezerowy kod wyjścia. Patrz: Wykrywanie pętli w kompilacji.
issue96_no_substrat_reductionStrumienie zdefiniowane przez użytkownika o identycznej strukturze NIE są scalane; scalaniu podlegają tylko automatyczne substraty. Patrz: Substraty.
issue96_substrat_referenceWygenerowany substrat współdzielony przez dwa strumienie użytkownika - poprawne referencje w drzewie zależności. Patrz: Substraty.
Pattern1Kompilacja operatora # (HASH-merge), selekcji pól z przesunięciem i łączenia strumieni +. Patrz: Sekwencjonowanie operacji przeplotu i sumowania.
Pattern2Kompilacja zapytań na strumieniach BYTE z /dev/urandom: SELECT, arytmetyka, łączenie strumieni. Patrz: Polecenie SELECT.
Pattern3Kompilacja SELECT * (unfold) z deklaracją pliku wyjściowego i retencją. Patrz: Rozwijanie symbolu *.
Pattern5Operacje xtrdb na rekordzie wielotypowym (STRING, INTEGER, BYTE, FLOAT): append, read, list/rlist, input, write. Patrz: Analiza artefaktów.
Pattern6Kompilacja operatora okna @(n,m) do przodu @(1,10) i wstecz @(1,-10) + valgrind bez wycieków. Patrz: Ruchome okno danych AGSE.
Pattern7Kompilacja z identycznymi nazwami pól w wielu strumieniach (issue #17) - poprawna identyfikacja pola przez indeks strumienia. Patrz: Polecenie DECLARE, Aliasowanie.
retentionOperacje xtrdb na pliku z parametrem RETENTION: open, purge, append, list, write dla konkretnego rekordu. Patrz: Format zapisu danych - Mechanizm rotacji.
simpleKompilacja podstawowego zapytania arytmetycznego + graf DOT + valgrind; korzysta z danych IntegrationTest/simple. Patrz: Polecenie SELECT.
simple_maxKompilacja zapytania z .max + graf DOT + valgrind; korzysta z danych IntegrationTest/simple_max. Patrz: Operatory agregujące.
subqueryKompilacja zagnieżdżonych podzapytań: (a#b)>1 (hash-merge wewnątrz filtru) i (a>1)#b (filtr wewnątrz hash-merge). Patrz: Budowa drzewa zależności.
txtsrcOperacje xtrdb descc/rread/printt na strumieniu TEXTSOURCE (plik tekstowy jako źródło danych). Patrz: Format zapisu danych.