Skip to content

.timeLimit 對卡在同步 C call 的 test body 只記 issue、不解除阻塞——三個檔案的「掛住→紅燈」宣稱不成立 #59

Description

@kiki830621

Problem

#57 verify 的 DA 實測:swift-testing 的 .timeLimit(.minutes(1)) 掛在一個同步阻塞於 C call(waitUntilExit / blocking read)的 test body 上,60 s 時記錄一則 issue,但 body 繼續跑滿 150 s——它不會解除阻塞、不會終止 body。

repo 內以此為「掛住會轉成真的紅燈」的既有站點(grep -rn timeLimit Tests/):

  • Tests/LTMQueryTests/ConservativeStrategyTests.swift:202 註解逐字寫「它回歸時的症狀是掛住而不是失敗,.timeLimit 把它轉成一個真的紅燈」
  • Tests/LTMEvalTests/InterleavingTerminationTests.swift(4 條)
  • Tests/LTMMemoryTests/CorpusContainmentTests.swift(4 條,FIFO 阻塞情境)
  • Tests/LTMIndexTests/IndexBuilderTests.swift:1086

.timeLimit純 Swift 迴圈的 body 是否能中止,與對阻塞 syscall 的 body 行為可能不同——DA 只量了後者。各站點要分別驗。

Type

bug(測試基礎設施的假宣稱)

Expected

  1. 逐站點實測:把 body 換成對應形狀的永久阻塞(純迴圈 vs blocking syscall),看 .timeLimit 是否讓整個 swift test 在限時內結束並紅。
  2. 對不成立的站點:改成能真正解除阻塞的機制(子行程 → terminate/kill;FIFO → O_NONBLOCK 或 alarm),註解改真。
  3. 對成立的站點:註解補上「限純 Swift body」的界線。

Actual

註解宣稱「掛住 → 紅燈」,至少對 blocking-syscall 形狀不成立(DA 實測)。#57 的測試已改用有界等待+親手 terminate/kill,不再依賴 .timeLimit

Source: surfaced during /idd-verify #57 (DA lens)


Current Status

Tasks

  • 1. helper expectCompletes(within:_:):detached thread+有界 semaphore,逾時具名失敗並 return
  • 2. 13 站點改用 helper、移除 .timeLimit
  • 3. 註解改真(ConservativeStrategyTests:202、CorpusContainmentTests:171、MCPStdoutTests:85 的「三條」→ 13)
  • 4. 變異驗收:拿掉生產守衛 → N s 內紅且套件結束(每檔至少一條)
  • 5. helper 位置決定(共用 test target vs 各檔一份)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions