Le scan du SDK ne démarre pas, et le message le dira au lieu d'accuser la montre
43 appareils vus par un scan CoreBluetooth nu, 0 remonté par le SDK Polar. La
radio, l'autorisation et la montre sont hors de cause — c'est notre usage du SDK.
Trois suspects écartés sur les sources plutôt que supposés, et écrits dans le
runbook pour que personne ne les revérifie : servicesToScanFor à nil est aussi
ce que fait PolarBleApiImpl ; un scanPreFilter nil ACCEPTE les appareils (le
`if let` échoue, le rejet est sauté) ; et addClient() suffit à lancer le scan,
scanningNeeded() rendant vrai dès que clientCount != 0.
Reste une hypothèse : search() commence par
`monitorBleState().filter { $0 == .poweredOn }`. Si cet état n'arrive jamais, le
publisher ne dit RIEN — ni valeur, ni complétion, ni erreur — et le timeout
conclut « aucun appareil » alors qu'on n'a jamais cherché. Ce sont deux
diagnostics opposés que le même message couvrait.
L'instrumentation note donc si le publisher a parlé, et relaie une éventuelle
erreur du SDK telle quelle. Trois messages distincts en sortent, trois tests les
verrouillent.
Piste notée pour la reprise : le SDK pose powerStateObserver et
deviceSessionStateObserver sur son listener et passe identifier: 0 ; nous ne
posons aucun observateur et passons 1.
80 tests au vert sur tests-linux.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -203,3 +203,34 @@ extension PolarPftpErrorTests {
|
||||
XCTAssertTrue(e.description.contains("La radio va bien"))
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - « On n'a jamais cherché » n'est pas « on n'a rien trouvé »
|
||||
//
|
||||
// `search()` du SDK commence par `monitorBleState().filter { $0 == .poweredOn }`.
|
||||
// Si cet état n'arrive pas, le publisher ne dit RIEN : ni valeur, ni fin, ni
|
||||
// erreur. Le timeout conclut alors « aucun appareil » alors que le scan n'a
|
||||
// jamais démarré. Mesuré le 2026-08-31 : 43 appareils en scan direct, 0 par le
|
||||
// SDK.
|
||||
|
||||
extension PolarPftpErrorTests {
|
||||
|
||||
func testPublisherMuetNAccusePasLaMontre() {
|
||||
let e = PolarPftpError.sdkSilencieux(vusParCoreBluetooth: 43,
|
||||
publisherAParle: false)
|
||||
XCTAssertTrue(e.description.contains("n'a pas démarré"))
|
||||
XCTAssertTrue(e.description.contains("Ce n'est pas la montre"))
|
||||
}
|
||||
|
||||
func testUneErreurDuSdkEstRapporteeTelleQuelle() {
|
||||
let e = PolarPftpError.sdkSilencieux(vusParCoreBluetooth: 43,
|
||||
publisherAParle: true,
|
||||
erreurSdk: "bleNotReady")
|
||||
XCTAssertTrue(e.description.contains("bleNotReady"))
|
||||
}
|
||||
|
||||
func testPublisherActifSansSessionAccuseLIntegration() {
|
||||
let e = PolarPftpError.sdkSilencieux(vusParCoreBluetooth: 43,
|
||||
publisherAParle: true)
|
||||
XCTAssertTrue(e.description.contains("intégration du SDK"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user