簡単な修正プログラムで修正されたハードバグ
14379 ワード
私のPull requestをSSOサービスのベストプラクティスを追加しました.E 2 Eテストはパイプラインで失敗しました.
ciでは,試験例はcrでは失敗した.
それらの変更を押した後、@humphdはデバッグするのを助けました、この問題は局所的に生産的であることができませんでした.
私は異なる環境で走り始めました.
Windows 11 Pro 21 H 2 -テストケースパス.( @ kevan - y )
WSP 2 Ubuntu - 20.04上のWindows 11 Pro 21 H 2 -テストケースパス
Amazon Linux 2 AMI ( HVM )-カーネル5.10 ( AMI - 0 C 02 FB 55956 C 7 D 316 ( 64ビットx 86 ))- T 2ラージテストケースパス
テストケース・パス
それはよく見えなかった.これは、CIでのみ起こっているのでデバッグを難しくします.
私はテストケースのタイムアウトを
弾力性検索のような他のコンテナのための可能性は、そのコンテナは、メモリが十分に割り当てられていないいくつかの問題があったのでクラッシュしました.私はDocker構成ファイルのメモリを増やしました.
私はすべてのE 2 Eテストケースをスキップし、デバッグの目的で
私はそれらの変更を押したが、それは助けていなかった.彼らは間違ったときにどの場所を識別するのに役立ちました0ログだった.それで、デバッグの基本的な方法に切り替えます.各行にコンソール
それにもかかわらず、それは働かなかった.しかし、最終的な修正は潜在的にそれを修正するかもしれない
それは適切なソリューションは、依存関係の更新だけであり、すべてがうまく動作します.
これをデバッグしようとする2、3日を費やしてください、そして、修正はちょうど依存関係アップデートでした.それは最後に良い経験でした.時には、上流側が私たちのために修正するのを待つ必要があります.
ciでは,試験例はcrでは失敗した.
FAIL browser: chromium src/api/sso/test/e2e/auth-flows.test.js (28.142 s)
Authentication Flows
✕ Login flow preserves state param (25222 ms)
最初に、私のレビューの一部はMac M 1(ARMアーキテクチャ)を使用しているので、イメージをビルドするためにいくつかのビルドインパッケージが見つからなかったので、ノードアルパインバージョンから適切にイメージを構築することができませんでした.私はより大きいノードバージョンを使用しなければなりませんでした.それらの変更を押した後、@humphdはデバッグするのを助けました、この問題は局所的に生産的であることができませんでした.
私は異なる環境で走り始めました.
Windows 11 Pro 21 H 2 -テストケースパス.( @ kevan - y )
WSP 2 Ubuntu - 20.04上のWindows 11 Pro 21 H 2 -テストケースパス
Amazon Linux 2 AMI ( HVM )-カーネル5.10 ( AMI - 0 C 02 FB 55956 C 7 D 316 ( 64ビットx 86 ))- T 2ラージテストケースパス
テストケース・パス
それはよく見えなかった.これは、CIでのみ起こっているのでデバッグを難しくします.
私はテストケースのタイムアウトを
it('Login flow preserves state param', async () => {
const { state } = await login(page, 'user1', 'user1pass');
// Expect the state to match what we sent originally (see index.html <a>)
expect(state).toEqual('abc123');
}, 30000);
増加タイムアウトにもかかわらず、それは失敗していました.弾力性検索のような他のコンテナのための可能性は、そのコンテナは、メモリが十分に割り当てられていないいくつかの問題があったのでクラッシュしました.私はDocker構成ファイルのメモリを増やしました.
elasticsearch:
environment:
# Limit the initial heap size. By default it will use 1/4 of available RAM
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
これらの変更を押した後、CIパイプラインはまだ失敗していました.私はすべてのE 2 Eテストケースをスキップし、デバッグの目的で
Login flow preserves state param
のsrc/api/sso/test/e2e/auth-flows.test.js
だけを実行し、LOG_LEVEL
からdebug
にもオンすることにしました.私はそれらの変更を押したが、それは助けていなかった.彼らは間違ったときにどの場所を識別するのに役立ちました0ログだった.それで、デバッグの基本的な方法に切り替えます.各行にコンソール
src\api\sso\test\e2e\auth-flows.test.js
it('Login flow preserves state param', async () => {
console.log('Start test case by await login');
const { state } = await login(page, 'user1', 'user1pass');
console.log('Done await login', state);
// Expect the state to match what we sent originally (see index.html <a>)
expect(state).toEqual('abc123');
}, 30000);
src\api\sso\test\e2e\browser-util.js
const login = async (page, username, password) => {
console.log('Start login and wait for page');
// Click login button and then wait for the login page to load
await Promise.all([
page.waitForNavigation({
url: /simplesaml\/module\.php\/core\/loginuserpass\.php/,
waitUtil: 'networkidle',
}),
page.click('#login'),
]);
console.log('after click login');
console.log('click input[name="username"]');
// Fill the login form, star with username
await page.click('input[name="username"]');
console.log('after click input[name="username"]');
console.log('fill input[name="username"]');
await page.fill('input[name="username"]', username);
console.log('after fill input[name="username"]');
// Now enter the password
console.log('click input[name="password"]');
await page.click('input[name="password"]');
console.log('after click input[name="password"]');
console.log('fill input[name="password"]');
await page.fill('input[name="password"]', password);
console.log('after fill input[name="password"]');
console.log('wait for the new page to load');
// Click login button and then wait for the new page to load
await Promise.all([
page.waitForNavigation({
url: /^http:\/\/localhost:\d+\/auth\.html\?access_token=[^&]+&state=/,
waitUtil: 'load',
}),
page.click('text=/.*Login.*/'),
]);
// The token and state will get returned on the query string
return getTokenAndState(page);
};
この変更を押した後、やっとデバッグ結果が出ました.テストケースは2003年のタイムアウトだったawait Promise.all([
page.waitForNavigation({
url: /simplesaml\/module\.php\/core\/loginuserpass\.php/,
waitUtil: 'networkidle',
}),
page.click('#login'),
]);
@Humphdによって言及された1つの可能な問題は、イベントが何らかの理由でそのページに座っていて、決して航行しないことでした.waitUtil: 'networkidle'
の代わりに、waitUtil: 'load'
に変更されます.see referenceそれにもかかわらず、それは働かなかった.しかし、最終的な修正は潜在的にそれを修正するかもしれない
1.19.2
の1.20.2
にバージョンplaywright
から更新しようとすることでした.それは適切なソリューションは、依存関係の更新だけであり、すべてがうまく動作します.
これをデバッグしようとする2、3日を費やしてください、そして、修正はちょうど依存関係アップデートでした.それは最後に良い経験でした.時には、上流側が私たちのために修正するのを待つ必要があります.
Reference
この問題について(簡単な修正プログラムで修正されたハードバグ), 我々は、より多くの情報をここで見つけました https://dev.to/pandanoxes/hard-bug-fixed-by-a-simple-fix-2p9aテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol