diff options
| author | eunhhu <[email protected]> | 2026-09-27 13:48:55 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-27 13:48:55 +0100 |
| commit | c08c570d465ffa22c772c2c4d0910eb8a17a379e (patch) | |
| tree | 3a4d6e2c25f259f97c5a629d3862f020cf1ae7bd /docs/research | |
| parent | 628e72621693af9be8bf94ef42f3164c45763a7b (diff) | |
| download | pure-c08c570d465ffa22c772c2c4d0910eb8a17a379e.tar.gz pure-c08c570d465ffa22c772c2c4d0910eb8a17a379e.zip | |
Check pure-serve in Pure, not in aup
The HTTP host's end-to-end checks (documents against the earlier server,
lending, kill -9 durability, JSON, timers, links, webhooks and answers) sat
in aup's tests, so a change to the host was verified from the toolchain.
They now live in tests/check.py; make check builds their apps with the
sibling aup and runs them after the unit tests, which stay beside their
parts. Design 009 states the rule for all three repositories.
Diffstat (limited to 'docs/research')
| -rw-r--r-- | docs/research/077-apps-as-http-services.md | 2 | ||||
| -rw-r--r-- | docs/research/079-lent-views.md | 2 | ||||
| -rw-r--r-- | docs/research/080-snapshot-reads.md | 2 | ||||
| -rw-r--r-- | docs/research/082-json-in-place.md | 2 | ||||
| -rw-r--r-- | docs/research/083-delivery-over-http.md | 6 |
5 files changed, 7 insertions, 7 deletions
diff --git a/docs/research/077-apps-as-http-services.md b/docs/research/077-apps-as-http-services.md index 27e69fd..63904a5 100644 --- a/docs/research/077-apps-as-http-services.md +++ b/docs/research/077-apps-as-http-services.md @@ -68,7 +68,7 @@ Raspberry Pi 5, 서버는 CPU 0–2, 부하는 CPU 3, 저장소는 SD 카드의 ## 검증 -aup `make check`: 키 있는 리스트 앱에 무작위 요청 800개(쿼리 필드와 본문을 가진 메시지, text, 키 누름, 수·text 보기, 표의 +aup `make check`(지금은 Pure `tests/check.py`의 `server_app`): 키 있는 리스트 앱에 무작위 요청 800개(쿼리 필드와 본문을 가진 메시지, text, 키 누름, 수·text 보기, 표의 쪽, 없는 이름과 잘못된 쿼리)를 보내 상태 코드·오류 이름·본문·JSON 행이 파이썬 모델과 같다. 한 스레드와 연결 스레드 셋 + 소유자에서 모두 확인한다. 여섯 클라이언트가 보내는 중에 `kill -9`로 죽여도, 확인 응답한 이벤트(각 3,500–4,200개)가 다시 시작한 뒤 모두 남는다. ASan·UBSan 빌드에서 같은 검사와, 클라이언트 열둘이 쓰기·읽기·실패를 섞어 보내는 부하(요청 3,600개)를 diff --git a/docs/research/079-lent-views.md b/docs/research/079-lent-views.md index 1cb8453..668a832 100644 --- a/docs/research/079-lent-views.md +++ b/docs/research/079-lent-views.md @@ -38,7 +38,7 @@ Raspberry Pi 5, 서버는 CPU 0–2, 부하는 CPU 3. 1 MiB 메모를 `GET /view ## 회수 확인 -aup `make check`의 `server_lent_views`(스레드 1, 연결 스레드 3 + 소유자): +aup `make check`의 `server_lent_views`(지금은 Pure `tests/check.py`)(스레드 1, 연결 스레드 3 + 소유자): - 한 연결에 1 MiB 보기 32개를 이어 보내면 커널 버퍼가 받지 못한 답이 빌린 채 기다린다. 그동안 메모를 다섯 번 바꿔도 32개 답은 각각 한 버전 전체로 나온다(첫 답은 바꾸기 전 버전). diff --git a/docs/research/080-snapshot-reads.md b/docs/research/080-snapshot-reads.md index 1300632..82bf7f7 100644 --- a/docs/research/080-snapshot-reads.md +++ b/docs/research/080-snapshot-reads.md @@ -117,7 +117,7 @@ Raspberry Pi 5, 서버는 CPU 0–2, 부하는 CPU 3, 저장소는 SD 카드의 저장을 기다리는 변경이 있으면 스냅숏이 없고, 실패한 저장 뒤의 스냅숏은 실패 전과 같다. 상태를 메모리에만 두는 앱은 스냅숏을 만들지 않는다. 두 스레드가 최신 스냅숏을 읽는 동안(2만–4만 번) 앱이 계속 적용하고 게시한다. ASan·UBSan· LeakSanitizer 빌드에서 같다. -- aup `make check`: 무작위 요청 800개의 파이썬 모델 대조가 연결 스레드 하나와 셋에서 같다. 여섯 클라이언트가 쓰는 동안 +- aup `make check`(지금은 Pure `tests/check.py`의 `server_app`): 무작위 요청 800개의 파이썬 모델 대조가 연결 스레드 하나와 셋에서 같다. 여섯 클라이언트가 쓰는 동안 `kill -9`하는 검사에 다른 연결의 읽기 둘을 더했다. 읽기마다 요청 전에 확인 응답된 점수를 모두 보고, 합계가 뒤로 가지 않으며, 다시 띄운 서버의 합계는 읽기가 본 어떤 합계 이상이다(저장되지 않은 것을 보지 않았다). 빌려준 보기의 회수(079)도 그대로다. `pure-serve`의 ASan·UBSan 빌드로 같은 서버 검사를 통과하고, 섞인 부하 뒤 정상 종료에서 누수가 diff --git a/docs/research/082-json-in-place.md b/docs/research/082-json-in-place.md index 6a456b8..aab6afb 100644 --- a/docs/research/082-json-in-place.md +++ b/docs/research/082-json-in-place.md @@ -61,7 +61,7 @@ Raspberry Pi 5, 서버는 CPU 0–2(연결 스레드 하나), 부하는 CPU 3. � 시작하거나 끝나는 자리는 `limit`, UTF-8이 아닌 자리는 `encoding`으로 실패하고 아무것도 바꾸지 않는다. 경로 이름 `user.name`은 받고, `user..name`, `.user`, `user.`, `user.1st`, `user name`, 그리고 `user`와 `user.name`을 함께 가진 모듈은 거절한다. -- aup `make check`의 `server_json`: 전의 무작위 평평한 JSON 300개와 틀린 요청 14가지에 더해, 그룹이 두 단계인 메시지에 +- aup `make check`의 `server_json`(지금은 Pure `tests/check.py`): 전의 무작위 평평한 JSON 300개와 틀린 요청 14가지에 더해, 그룹이 두 단계인 메시지에 무작위 JSON 100개(멤버 순서를 단계마다 섞고, 문자열에 이스케이프·제어 바이트·한글·이모지·U+2028)를 보내 답과 표가 파이썬 모델과 같다. 그룹의 고정 필드를 쿼리 경로로 준 요청, 틀린 그룹 요청 10가지(모르는 멤버, 그룹 자리에 값, 필드 자리에 객체, 빈 그룹, 두 번 온 필드, 배열, `null`, 외톨이 서로게이트, 닫히지 않은 객체), 쿼리와 본문에 함께 준 필드도 diff --git a/docs/research/083-delivery-over-http.md b/docs/research/083-delivery-over-http.md index eedc5f8..5f51b2b 100644 --- a/docs/research/083-delivery-over-http.md +++ b/docs/research/083-delivery-over-http.md @@ -74,14 +74,14 @@ Raspberry Pi 5. 받는 서버는 CPU 0–1(연결 스레드 2), 보내는 서버 ## 검증 -- aup `make check`의 `server_links`: 클라이언트 넷이 보내는 앱에 주문하는 동안 받는 서버를, 그다음 보내는 서버를 +- aup `make check`의 `server_links`(지금은 Pure `tests/check.py`): 클라이언트 넷이 보내는 앱에 주문하는 동안 받는 서버를, 그다음 보내는 서버를 `kill -9`로 죽이고 같은 저장소로 다시 띄운다. 그 뒤 수량 150(받는 앱이 거절한다)과 7의 주문을 더 넣는다. 받는 앱의 건수와 합계가 보내는 앱이 저장한 것(거절한 한 건을 빼고)과 같아지고, 확인 응답한 주문은 모두 그 안에 있다. 다섯 번(각 약 7,300건)과 ASan·UBSan 빌드로 한 번 통과했다. 거절한 주문 뒤의 주문도 전해졌다(막히지 않는다). -- aup `make check`의 `server_webhook`: 파이썬 HTTPS 서버(자체 인증서)를 제3자 웹훅으로 두고, 주문 다섯 건이 순서대로 +- aup `make check`의 `server_webhook`(지금은 Pure `tests/check.py`): 파이썬 HTTPS 서버(자체 인증서)를 제3자 웹훅으로 두고, 주문 다섯 건이 순서대로 출력의 JSON 모양과 헤더(`X-Pure-Source`, `Idempotency-Key`, 묶음 헤더 없음)로 도착한다. 처음에 503으로 답한 2번은 다시 온다. 그 인증서를 믿지 않는 보내는 쪽에서는 아무것도 도착하지 않고 기록이 남는다. ASan·UBSan 빌드로도 통과했다. -- aup `make check`의 `server_answers`: 파이썬 "결제 API"(1000 이하는 200 `succeeded`, 넘으면 402 `declined`, 같은 +- aup `make check`의 `server_answers`(지금은 Pure `tests/check.py`): 파이썬 "결제 API"(1000 이하는 200 `succeeded`, 넘으면 402 `declined`, 같은 `Idempotency-Key`에는 첫 답을 되풀이)에 출력을 잇고 응답을 `charged` 입력으로 받는다. 클라이언트 셋이 사는 동안 보내는 서버를 `kill -9`로 죽였다 살린다. 끝에 앱의 결제·거절 수의 합이 저장된 구매 수와 API가 받은 키 수와 같고, 결제 수와 결제 합계가 API의 200 응답과 같다(각 3,774–3,979건, 네 번, ASan·UBSan 빌드로 한 번 더). |
