diff --git a/ability/ability_runtime/apprecovery/ActsAppRecoveryTestCaller/entry/src/main/ets/test/Ability.test.ets b/ability/ability_runtime/apprecovery/ActsAppRecoveryTestCaller/entry/src/main/ets/test/Ability.test.ets index 68ab4f8e3408069de92de2f16a3a88b40c9d663c..f7627ab9db9e3e8874af86828053ab29f19a10de 100644 --- a/ability/ability_runtime/apprecovery/ActsAppRecoveryTestCaller/entry/src/main/ets/test/Ability.test.ets +++ b/ability/ability_runtime/apprecovery/ActsAppRecoveryTestCaller/entry/src/main/ets/test/Ability.test.ets @@ -376,7 +376,7 @@ export default function abilityTest() { },CASE_TIME_OUT) }) - /* + /* * @tc.number: Acts_AppRecovery_0700 * @tc.name: Fault recovery of multi-Ability application * @tc.desc: If the restart recovery status is not set, the Ability application pre-failure state will not be @@ -444,6 +444,440 @@ export default function abilityTest() { }, 800); } + setTimeout(()=>{ + if(flag==false){ + expect().assertFail(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + },CASE_TIME_OUT) + }) + + /* + * @tc.number: Acts_AppRecovery_0800 + * @tc.name: Fault recovery of multi-Ability application + * @tc.desc: If the restart recovery status is not set, the Ability application pre-failure state will not be + * restored after the application exits abnormally and restarts. + */ + it('Acts_AppRecovery_0800',0, async function (done) { + let subscriber; + let flag = false; + let countFirst = 0; + let countSecond = 0; + console.info("Acts_AppRecovery_0800====> start") + commonEvent.createSubscriber(ACTS_AppRecovery).then(async (data) => { + console.debug("Acts_AppRecovery_0800====> Create Subscribe"); + subscriber = data; + commonEvent.subscribe(subscriber, subscribeCallBack); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_0800_once" + },(err)=>{ + console.debug("Acts_AppRecovery_0800====> startAbility err:"+JSON.stringify(err)); + expect(err.code).assertEqual(0); + }) + }) + + function subscribeCallBack(err, data) { + console.debug("Acts_AppRecovery_0800====> subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_First") { + countFirst++; + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + if (countFirst < 2) { + return; + } + setTimeout(() => { + commonEvent.subscribe(subscriber, subscribeCallBackSecond); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_0800_twice" + }, + (err) => { + console.debug("Acts_AppRecovery_0800====> second startAbility err:" + JSON.stringify(err)); + expect(err.code).assertEqual(0); + } + ); + }, 800); + } + } + + function subscribeCallBackSecond(err, data) { + console.debug("Acts_AppRecovery_0800====> second subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_Second") { + countSecond++; + flag=true; + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + if (countSecond < 2) { + return; + } + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + } + + function unSubscribeCallback() { + setTimeout(() => { + console.debug("Acts_AppRecovery_0800====> unSubscribeCallback"); + done(); + }, 800); + } + + setTimeout(()=>{ + if(flag==false){ + expect().assertFail(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + },CASE_TIME_OUT) + }) + + /* + * @tc.number: Acts_AppRecovery_0900 + * @tc.name: Fault recovery of multi-Ability application + * @tc.desc: When the application settings restart recovery status is valid, the application exits abnormally + * and restarts to restore the pre-failure state of Ability application. + */ + it('Acts_AppRecovery_0900',0, async function (done) { + let subscriber; + let flag = false; + console.info("Acts_AppRecovery_0900====> start") + commonEvent.createSubscriber(ACTS_AppRecovery).then(async (data) => { + console.debug("Acts_AppRecovery_0900====> Create Subscribe"); + subscriber = data; + commonEvent.subscribe(subscriber, subscribeCallBack); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoveryrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_0900_once" + },(err)=>{ + console.debug("Acts_AppRecovery_0900====> startAbility err:"+JSON.stringify(err)); + expect(err.code).assertEqual(0); + }) + }) + + function subscribeCallBack(err, data) { + console.debug("Acts_AppRecovery_0900====> subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_First") { + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + let abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); + let pkillCmd = "pkill -f com.example.apprecoveryrely"; + console.debug("Acts_AppRecovery_0900====> shell command call " + pkillCmd); + abilityDelegator.executeShellCommand(pkillCmd, 1, (err, data) => { + console.debug("Acts_AppRecovery_0900====> shell command callback " + JSON.stringify(err) + " " + JSON.stringify(data)); + setTimeout(() => { + commonEvent.subscribe(subscriber, subscribeCallBackSecond); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoveryrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_0900_twice" + }, + (err) => { + console.debug("Acts_AppRecovery_0900====> second startAbility err:" + JSON.stringify(err)); + expect(err.code).assertEqual(0); + } + ); + }, 800); + }); + } + } + + function subscribeCallBackSecond(err, data) { + console.debug("Acts_AppRecovery_0900====> second subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_Second") { + flag=true; + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + } + + function unSubscribeCallback() { + setTimeout(() => { + console.debug("Acts_AppRecovery_0900====> unSubscribeCallback"); + done(); + }, 800); + } + + setTimeout(()=>{ + if(flag==false){ + expect().assertFail(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + },CASE_TIME_OUT) + }) + + /* + * @tc.number: Acts_AppRecovery_1000 + * @tc.name: Fault recovery of multi-Ability application + * @tc.desc: When the application settings restart recovery status is valid, the application exits abnormally + * and restarts to restore the pre-failure state of Ability application. + */ + it('Acts_AppRecovery_1000',0, async function (done) { + let subscriber; + let flag = false; + let countFirst = 0; + let countSecond = 0; + console.info("Acts_AppRecovery_1000====> start") + commonEvent.createSubscriber(ACTS_AppRecovery).then(async (data) => { + console.debug("Acts_AppRecovery_1000====> Create Subscribe"); + subscriber = data; + commonEvent.subscribe(subscriber, subscribeCallBack); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1000_once" + },(err)=>{ + console.debug("Acts_AppRecovery_1000====> startAbility err:"+JSON.stringify(err)); + expect(err.code).assertEqual(0); + }) + }) + + function subscribeCallBack(err, data) { + console.debug("Acts_AppRecovery_1000====> subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_First") { + countFirst++; + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + if (countFirst < 2) { + return; + } + let abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); + let pkillCmd = "pkill -f com.example.apprecoverysrely"; + abilityDelegator.executeShellCommand(pkillCmd, 1, (err, data) => { + setTimeout(() => { + commonEvent.subscribe(subscriber, subscribeCallBackSecond); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1000_twice" + }, + (err) => { + console.debug("Acts_AppRecovery_1000====> second startAbility err:" + JSON.stringify(err)); + expect(err.code).assertEqual(0); + } + ); + }, 800); + }); + } + } + + function subscribeCallBackSecond(err, data) { + console.debug("Acts_AppRecovery_1000====> second subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_Second") { + countSecond++; + flag=true; + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + if (countSecond < 2) { + return; + } + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + } + + function unSubscribeCallback() { + setTimeout(() => { + console.debug("Acts_AppRecovery_1000====> unSubscribeCallback"); + done(); + }, 800); + } + + setTimeout(()=>{ + if(flag==false){ + expect().assertFail(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + },CASE_TIME_OUT) + }) + + /* + * @tc.number: Acts_AppRecovery_1100 + * @tc.name: Fault recovery of multi-Ability application + * @tc.desc: When setting restart recovery status is valid, exit the application by clearing the task list and + * do not restore the pre-failure state of the Ability application after the application restart. + */ + it('Acts_AppRecovery_1100',0, async function (done) { + let subscriber; + let flag = false; + console.info("Acts_AppRecovery_1100====> start") + commonEvent.createSubscriber(ACTS_AppRecovery).then(async (data) => { + console.debug("Acts_AppRecovery_1100====> Create Subscribe"); + subscriber = data; + commonEvent.subscribe(subscriber, subscribeCallBack); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoveryrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1100_once" + },(err)=>{ + console.debug("Acts_AppRecovery_1100====> startAbility err:"+JSON.stringify(err)); + expect(err.code).assertEqual(0); + }) + }) + + function subscribeCallBack(err, data) { + console.debug("Acts_AppRecovery_1100====> subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_First") { + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + let abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); + let pkillCmd = "pkill -f com.example.apprecoveryrely"; + abilityDelegator.executeShellCommand(pkillCmd, 1, (err, data) => { + setTimeout(() => { + commonEvent.subscribe(subscriber, subscribeCallBackSecond); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoveryrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1100_twice" + }, + (err) => { + console.debug("Acts_AppRecovery_1100====> second startAbility err:" + JSON.stringify(err)); + expect(err.code).assertEqual(0); + } + ); + }, 800); + }); + } + } + + function subscribeCallBackSecond(err, data) { + console.debug("Acts_AppRecovery_1100====> second subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_Second") { + flag=true; + let message = data.parameters.message; + expect(message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertTrue(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + } + + function unSubscribeCallback() { + setTimeout(() => { + console.debug("Acts_AppRecovery_1100====> unSubscribeCallback"); + done(); + }, 800); + } + + setTimeout(()=>{ + if(flag==false){ + expect().assertFail(); + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + },CASE_TIME_OUT) + }) + + /* + * @tc.number: Acts_AppRecovery_1200 + * @tc.name: Fault recovery of multi-Ability application + * @tc.desc: When setting restart recovery status is valid, exit the application by clearing the task list and + * do not restore the pre-failure state of the Ability application after the application restart. + */ + it('Acts_AppRecovery_1200',0, async function (done) { + let subscriber; + let flag = false; + let countFirst = 0; + let countSecond = 0; + console.info("Acts_AppRecovery_1200====> start") + commonEvent.createSubscriber(ACTS_AppRecovery).then(async (data) => { + console.debug("Acts_AppRecovery_1200====> Create Subscribe"); + subscriber = data; + commonEvent.subscribe(subscriber, subscribeCallBack); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1200_once" + },(err)=>{ + console.debug("Acts_AppRecovery_1200====> startAbility err:"+JSON.stringify(err)); + expect(err.code).assertEqual(0); + }) + }) + + function subscribeCallBack(err, data) { + console.debug("Acts_AppRecovery_1200====> subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_First") { + countFirst++; + let message = data.parameters.message; + let strJson = JSON.stringify(data.parameters.message); + if (data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"] == undefined) { + expect(true).assertTrue(); + } else { + expect(data.parameters.message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertFalse(); + } + if (countFirst < 2) { + return; + } + let abilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); + let pkillCmd = "pkill -f com.example.apprecoverysrely"; + abilityDelegator.executeShellCommand(pkillCmd, 1, (err, data) => { + setTimeout(() => { + commonEvent.subscribe(subscriber, subscribeCallBackSecond); + globalThis.abilityContext.startAbility( + { + bundleName: "com.example.apprecoverysrely", + abilityName: "EntryAbility", + action: "Acts_AppRecovery_1200_twice" + }, + (err) => { + console.debug("Acts_AppRecovery_1200====> second startAbility err:" + JSON.stringify(err)); + expect(err.code).assertEqual(0); + } + ); + }, 800); + }); + } + } + + function subscribeCallBackSecond(err, data) { + console.debug("Acts_AppRecovery_1200====> second subscribeCallBack data:" + JSON.stringify(data)); + if(data.event == "ACTS_AppRecovery_Second") { + countSecond++; + flag=true; + let message = data.parameters.message; + expect(message["ohos.aafwk.param.AbilityRecoveryRestart"]).assertTrue(); + if (countSecond < 2) { + return; + } + commonEvent.unsubscribe(subscriber, unSubscribeCallback); + } + } + + function unSubscribeCallback() { + setTimeout(() => { + console.debug("Acts_AppRecovery_1200====> unSubscribeCallback"); + done(); + }, 800); + } + setTimeout(()=>{ if(flag==false){ expect().assertFail(); diff --git a/ability/ability_runtime/apprecovery/AppRecoveryRely/entry/src/main/ets/entryability/EntryAbility.ts b/ability/ability_runtime/apprecovery/AppRecoveryRely/entry/src/main/ets/entryability/EntryAbility.ts index 57ac0e16b143ac843818c446d95655f97745ebd9..eca2e59acd5baa3123fa9dbdd8fb6d0bcde67214 100644 --- a/ability/ability_runtime/apprecovery/AppRecoveryRely/entry/src/main/ets/entryability/EntryAbility.ts +++ b/ability/ability_runtime/apprecovery/AppRecoveryRely/entry/src/main/ets/entryability/EntryAbility.ts @@ -69,11 +69,9 @@ export default class EntryAbility extends Ability { hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); - // 第一次启动设置项目 if (strAction == "Acts_AppRecovery_0100_once" || strAction == "Acts_AppRecovery_0300_once" || strAction == "Acts_AppRecovery_0700_once" || strAction == "Acts_AppRecovery_0900_once" || strAction == "Acts_AppRecovery_1100_once") { - // 是否包存状态 if (strAction == "Acts_AppRecovery_0100_once" || strAction == "Acts_AppRecovery_0300_once" || strAction == "Acts_AppRecovery_1100_once") { appRecovery.saveAppState(this.context); @@ -81,11 +79,9 @@ export default class EntryAbility extends Ability { } else { console.log(strAction + "Rely====> not saveAppState"); } - // 回复ACTS_AppRecovery_First消息 setTimeout(() => { commonEvent.publish("ACTS_AppRecovery_First",commonEventData,(err)=>{ console.log(strAction + "Rely====> publish err:" + JSON.stringify(err)); - // 是否退出 if (strAction == "Acts_AppRecovery_0100_once" || strAction == "Acts_AppRecovery_0700_once") { setTimeout(()=>{ @@ -100,7 +96,6 @@ export default class EntryAbility extends Ability { }, 200); } - // 第二次启动设置项目 if (strAction == "Acts_AppRecovery_0100_twice" || strAction == "Acts_AppRecovery_0300_twice" || strAction == "Acts_AppRecovery_0700_twice" || strAction == "Acts_AppRecovery_0900_twice" || strAction == "Acts_AppRecovery_1100_twice") { diff --git a/ability/ability_runtime/apprecovery/AppRecoverysRely/entry/src/main/ets/entryability/EntryAbility.ts b/ability/ability_runtime/apprecovery/AppRecoverysRely/entry/src/main/ets/entryability/EntryAbility.ts index 7664132f4c9f1fdf4c09778148a4185b9f914c8e..2ec74b47ea8a46de808b36158131e47c75578397 100644 --- a/ability/ability_runtime/apprecovery/AppRecoverysRely/entry/src/main/ets/entryability/EntryAbility.ts +++ b/ability/ability_runtime/apprecovery/AppRecoverysRely/entry/src/main/ets/entryability/EntryAbility.ts @@ -67,11 +67,9 @@ export default class EntryAbility extends Ability { // Ability has brought to foreground hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); - // 第一次启动 if (strAction == "Acts_AppRecovery_0200_once" || strAction == "Acts_AppRecovery_0400_once" || strAction == "Acts_AppRecovery_0800_once" || strAction == "Acts_AppRecovery_1000_once" || strAction == "Acts_AppRecovery_1200_once") { - // 需要包存状态的用例 if (strAction == "Acts_AppRecovery_0200_once" || strAction == "Acts_AppRecovery_0400_once" || strAction == "Acts_AppRecovery_1200_once") { @@ -86,7 +84,6 @@ export default class EntryAbility extends Ability { }) }, 200); } - // 第二次启动 if (strAction == "Acts_AppRecovery_0200_twice" || strAction == "Acts_AppRecovery_0400_twice" || strAction == "Acts_AppRecovery_0800_twice" || strAction == "Acts_AppRecovery_1000_twice" || strAction == "Acts_AppRecovery_1200_twice") { @@ -96,14 +93,12 @@ export default class EntryAbility extends Ability { }) }, 200); } - // 拉起第二个Ability this.context.startAbility({ bundleName: "com.example.apprecoverysrely", abilityName: "EntryAbilitySec", action: strAction },(err) => { console.debug(strAction + "Rely1====> startAbility err:"+JSON.stringify(err)); - // 需要自己正常退出的用例 if (strAction == "Acts_AppRecovery_0200_once" || strAction == "Acts_AppRecovery_0200_twice" || strAction == "Acts_AppRecovery_0400_twice" || strAction == "Acts_AppRecovery_0800_once" || strAction == "Acts_AppRecovery_0800_twice" ||