未验证 提交 a7fcde6b 编写于 作者: O openharmony_ci 提交者: Gitee

!4528 【OpenHar-3.2-Beta2】【账号】新增接口用例覆盖

Merge pull request !4528 from 何海涛/32B2Complete
{
"description": "Configuration for hjunit demo Tests",
"driver": {
"type": "JSUnitTest",
"test-timeout": "1500000",
"package": "com.example.actsaccountpressure",
"shell-timeout": "60000"
},
"kits": [
{
"test-file-name": [
"ActsAccountPressure.hap",
"ActsAccountSceneAppAccess.hap"
],
"type": "AppInstallKit",
"cleanup-apps": true
}
]
}
.container {
flex-direction: column;
justify-content: center;
align-items: center;
}
.title {
font-size: 100px;
}
{
"string": [
{
"name": "app_name",
"value": "ActsAccountPressure"
},
{
"name": "mainability_description",
"value": "JS_Phone_Empty Feature Ability"
}
]
}
\ No newline at end of file
......@@ -12,7 +12,8 @@
"ActsAccountTest.hap",
"ActsAccountSceneAppAccess.hap",
"ActsAccountSceneOnOff.hap",
"ActsAccountOauthtoken.hap"
"ActsAccountOauthtoken.hap",
"ActsAccountAuthenticator.hap"
],
"type": "AppInstallKit",
"cleanup-apps": true
......
......@@ -22,3 +22,4 @@ require('./OAuthToken.test.js')
require('./CreatManager.test.js')
require('./NoPermission.test.js')
require('./OnOff.js')
require('./Authenticator.test.js')
\ No newline at end of file
......@@ -24,6 +24,7 @@ group("appaccount_scene") {
"actsaccountsceneappaccess:ActsAccountSceneAppAccess",
"actsaccountsceneonoff:ActsAccountSceneOnOff",
"actsscenegetallaccounts:ActsSceneGetAllAccounts",
"actsaccountauthenticator:ActsAccountAuthenticator",
]
}
}
......@@ -10,22 +10,29 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//test/xts/tools/build/suite.gni")
ohos_js_hap_suite("ActsAccountPressure") {
ohos_hap("ActsAccountAuthenticator") {
hap_profile = "./entry/src/main/config.json"
hap_name = "ActsAccountAuthenticator"
subsystem_name = XTS_SUITENAME
final_hap_path =
"${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/testcases/${hap_name}.hap"
testonly = true
deps = [
":hjs_demo_js_assets",
":hjs_demo_js_service_assets",
":hjs_demo_resources",
]
certificate_profile = "./signature/openharmony_sx.p7b"
hap_name = "ActsAccountPressure"
}
ohos_js_assets("hjs_demo_js_assets") {
source_dir = "./entry/src/main/js/default"
source_dir = "./entry/src/main/js/MainAbility"
}
ohos_js_assets("hjs_demo_js_service_assets") {
source_dir = "./entry/src/main/js/ServiceAbility"
}
ohos_resources("hjs_demo_resources") {
sources = [ "./entry/src/main/js/resources" ]
sources = [ "./entry/src/main/resources" ]
hap_profile = "./entry/src/main/config.json"
}
{
"app": {
"bundleName": "com.example.actsaccountpressure",
"vendor": "example",
"bundleName": "com.example.accountauthenticator",
"version": {
"code": 1,
"name": "1.0"
"code": 1000000,
"name": "1.0.0"
},
"apiVersion": {
"compatible": 4,
"target": 5,
"releaseType": "Beta1"
"compatible": 7,
"target": 7
}
},
"deviceConfig": {},
"module": {
"package": "com.example.actsaccountpressure",
"name": ".MyApplication",
"mainAbility": ".MainAbility",
"deviceType": [
"phone"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "entry",
"moduleType": "entry"
},
"defPermissions": [
{
"availableScope": [],
"grantMode": "system_grant",
"name": "ohos.permission.GET_ALL_APP_ACCOUNTS"
},
{
"availableScope": [],
"grantMode": "user_grant",
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
}
],
"reqPermissions": [
{
"name": "ohos.permission.GRANT_SENSITIVE_PERMISSIONS",
"reason": "ceshi"
},
{
"name": "ohos.permission.GET_ALL_APP_ACCOUNTS",
"reason": "ceshi"
},
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "ceshi"
},
{
"name":"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
"reason":"need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"
},
{
"name":"ohos.permission.GET_BUNDLE_INFO",
"reason":"need use ohos.permission.GET_BUNDLE_INFO"
},
{
"name":"ohos.permission.CHANGE_ABILITY_ENABLED_STATE",
"reason":"need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE"
},
{
"name":"ohos.permission.REMOVE_CACHE_FILES",
"reason":"need use ohos.permission.REMOVE_CACHE_FILES"
},
{
"name":"ohos.permission.LISTEN_BUNDLE_CHANGE",
"reason":"need use ohos.permission.LISTEN_BUNDLE_CHANGE"
}
"default",
"tablet"
],
"abilities": [
{
......@@ -82,21 +30,46 @@
]
}
],
"name": "com.example.actsaccountpressure.MainAbility",
"orientation": "unspecified",
"visible": true,
"srcPath": "MainAbility",
"name": ".MainAbility",
"srcLanguage": "js",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "$string:app_name",
"description": "$string:MainAbility_desc",
"formsEnabled": false,
"label": "$string:MainAbility_label",
"type": "page",
"visible": true,
"launchType": "standard"
},
{
"srcPath": "ServiceAbility",
"name": ".ServiceAbility",
"srcLanguage": "js",
"icon": "$media:icon",
"description": "$string:ServiceAbility_desc",
"type": "service",
"visible": true,
"skills": [{"actions": [
"ohos.account.appAccount.action.oauth"
]}]
}
],
"distro": {
"moduleType": "entry",
"installationFree": true,
"deliveryWithInstall": true,
"moduleName": "entry"
},
"package": "com.example.entry",
"srcPath": "",
"name": ".entry",
"js": [
{
"pages": [
"pages/index/index"
],
"name": "default",
"name": ".MainAbility",
"window": {
"designWidth": 720,
"autoDesignWidth": false
......
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import account_appAccount from '@ohos.account.appAccount';
import rpc from '@ohos.rpc';
var TAG = "[AccountTest]"
class MyParameter {
constructor(params, size) {
this.params = params
this.size = size
}
marshalling(parcel) {
parcel.writeInt(this.size)
console.log(TAG + "size: " + this.size)
for (var key in this.params) {
parcel.writeString(key)
console.log(TAG + "writeBoolean key: " + key)
var value = this.params[key]
switch (typeof value) {
case 'string':
console.log(TAG + "writeString value: " + value)
parcel.writeInt(9)
parcel.writeString(value)
break
case 'boolean':
console.log(TAG + "writeBoolean value: " + value)
parcel.writeInt(1)
parcel.writeBoolean(value)
break
}
}
return true
}
unmarshalling(parcel) {
this.size = parcel.readInt()
console.log(TAG + "size: " + this.size)
for (var i = 0; i < this.size; ++i) {
var key = parcel.readString()
console.log(TAG + "key: " + key)
var type = parcel.readInt()
console.log(TAG + "type: " + type)
var value = null
switch (type) {
case 9:
value = parcel.readString()
break
case 1:
value = parcel.readBool()
break
}
console.log(TAG + "value: " + value)
this[key] = value
}
}
}
class MyWant {
constructor(bundleName, abilityName, parameters) {
this.bundleName = bundleName
this.abilityName = abilityName
this.paramSize = 0
for (var key in parameters) {
this.paramSize ++
}
this.parameters = new MyParameter(parameters, this.paramSize)
}
marshalling(parcel) {
// action
parcel.writeString("")
// uri
parcel.writeInt(-1)
// entities
parcel.writeInt(-1)
// flag
parcel.writeInt(0)
if (this.bundleName == "" && this.abilityName == "") {
// element
parcel.writeInt(-1)
} else {
parcel.writeInt(1)
}
// parameters
if (this.paramSize > 0) {
parcel.writeInt(1)
parcel.writeSequenceable(this.parameters)
} else {
parcel.writeInt(-1)
}
// bundleName
parcel.writeString(this.bundleName)
// picker
parcel.writeInt(-1)
return true
}
unmarshalling(parcel) {
// action
console.log(TAG + "action: " + parcel.readString());
// uri
console.log(TAG + "uri: " + parcel.readInt());
// entities
console.log(TAG + "entities: " + parcel.readInt());
// flag
console.log(TAG + "flag: " + parcel.readInt())
// element
console.log(TAG + "element: " + parcel.readInt())
// parameters
var hasParam = parcel.readInt()
console.log(TAG + "hasParam: " + hasParam)
if (hasParam == 1) {
parcel.readSequenceable(this.parameters)
}
// bundleName
parcel.readString()
// picker
parcel.readInt()
return true;
}
}
class VerifyCredentialOptions {
constructor(credentialType, credential, parameters) {
this.credential = credential
this.credentialType = credentialType
this.parameters = new MyParameter(parameters, 0)
}
unmarshalling(parcel) {
this.credentialType = readString8(parcel)
this.credential = readString8(parcel)
parcel.readSequenceable(this.parameters)
return true
}
}
class SetPropertiesOptions {
constructor(properties, parameters) {
this.properties = new MyParameter(properties, 0)
this.parameters = new MyParameter(parameters, 0)
}
unmarshalling(parcel) {
parcel.readSequenceable(this.properties)
parcel.readSequenceable(this.parameters)
return true
}
}
function readString8(data) {
var size = data.readInt()
var padSize = (((size + 4) & (~3)) - size - 1)
console.log(TAG + "padSize: " + padSize)
var str = ""
var count = 0
for (var i = 0; i < (size + 1 + padSize) / 4; ++i) {
var result = data.readInt()
if (count != size) {
str += String.fromCharCode((result & 0x000000FF))
count++
}
if (count != size) {
str += String.fromCharCode((result & 0x0000FF00) >>> 8)
count++
}
if (count != size) {
str += String.fromCharCode((result & 0x00FF0000) >>> 16)
count++
}
if (count != size) {
str += String.fromCharCode((result & 0xFF000000) >>> 24)
count++
}
}
return str
}
function readStringArray(data) {
var size = data.readInt()
console.log(TAG + "label size: " + size)
var result = []
for (var i = 0; i < size; ++i) {
result.push(readString8(data))
}
return result
}
class MyAuthenticatorCallback {
constructor(callback) {
this.callback = callback
this.newData = new rpc.MessageParcel()
this.newReply = new rpc.MessageParcel()
this.newOptions = new rpc.MessageOption()
this.newData.writeInterfaceToken("ohos.accountfwk.IAppAccountAuthenticatorCallback")
}
onResult(resultCode, result) {
this.newData.writeInt(resultCode)
var want = new MyWant("", "", result)
this.newData.writeSequenceable(want)
this.callback.sendRequest(0, this.newData, this.newReply, this.newOptions)
}
onRequestRedirected(request) {
this.newData.writeSequenceable(request)
this.callback.sendRequest(1, this.newData, this.newReply, this.newOptions)
}
onRequestContinued() {
this.callback.sendRequest(2, this.newData, this.newReply, this.newOptions)
}
}
class MyAuthenticator extends rpc.RemoteObject {
authenticatorImpl = new MyAuthenticatorImpl()
constructor() {
super("authenticator")
}
onRemoteRequest(code, data, reply, options) {
console.log(TAG + "code: " + code)
data.readInterfaceToken()
var name = null
var callback = null
switch (code) {
case 2 :
name = readString8(data)
var verifyOptions = new VerifyCredentialOptions("", "", {})
data.readSequenceable(verifyOptions)
callback = new MyAuthenticatorCallback(data.readRemoteObject())
this.authenticatorImpl.verifyCredential(name, verifyOptions, callback)
break
case 3 :
name = readString8(data)
var labels = readStringArray(data)
callback = new MyAuthenticatorCallback(data.readRemoteObject())
console.log(TAG + "callback: " + callback)
this.authenticatorImpl.checkAccountLabels(name, labels, callback)
break
case 4 :
var setOptions = new SetPropertiesOptions({}, {})
data.readSequenceable(setOptions)
callback = new MyAuthenticatorCallback(data.readRemoteObject())
this.authenticatorImpl.setProperties(setOptions, callback)
break
case 5 :
name = readString8(data)
callback = new MyAuthenticatorCallback(data.readRemoteObject())
this.authenticatorImpl.isAccountRemovable(name, callback)
break
}
return true
}
getRemoteObject() {
return this
}
}
class MyAuthenticatorImpl {
accountLables = {
"zhangsan": ["male", "30-40", "level4"],
"lisi": ["female"]
}
accountCredentials = {
"zhangsan": {
"PIN": "123456",
"NUMBER": "12356789"
},
"lisi": {
"FACE": "X00001"
}
}
accountRemovability = {
"zhangsan": false,
"lisi": true
}
properties = {}
verifyCredential(name, options, callback) {
console.log(TAG + "name: " + name + ", options: " + JSON.stringify(options))
if (name == "xiaoming") {
callback.onRequestContinued()
return
}
var credentialInfo = this.accountCredentials[name]
if (credentialInfo == undefined) {
callback.onResult(0, {"booleanResult": false})
return
}
if (options.credentialType == undefined || options.credential == undefined) {
var want = new MyWant("com.ohos.accountauthenticator", "VerifyAbility",
{"credentialType": options.credentialType, "credential": options.credential})
callback.onRequestRedirected(want)
return
}
var credential = credentialInfo[options.credentialType.toUpperCase()]
if (credential == undefined || credential != options.credential) {
callback.onResult(0, {"booleanResult": false})
return
}
callback.onResult(0, {"booleanResult": true})
}
checkAccountLabels(name, labels, callback) {
console.log(TAG + "name: " + name + ", labels: " + JSON.stringify(labels))
if (labels.length == 0) {
callback.onResult(0, {"booleanResult": true})
return
}
var allLabels = this.accountLables[name]
if (allLabels == undefined || allLabels.length == 0) {
callback.onResult(0, {"booleanResult": false})
return
}
for (var i = 0; i < labels.length; ++i) {
if (allLabels.indexOf(labels[i]) == -1) {
callback.onResult(0, {"booleanResult": false})
return
}
}
callback.onResult(0, {"booleanResult": true})
}
setProperties(options, callback) {
console.log(TAG + "options: " + JSON.stringify(options))
callback.onResult(10016, {})
}
isAccountRemovable(name, callback) {
console.log(TAG + "name: " + name)
var isRemovable = this.accountRemovability[name]
if (isRemovable == undefined || isRemovable == false) {
callback.onResult(0, {"booleanResult": false})
return
}
callback.onResult(0, {"booleanResult": true})
}
}
export {MyAuthenticator}
\ No newline at end of file
......@@ -12,11 +12,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export default {
onCreate() {
console.info('AceApplication onCreate');
console.info("Application onCreate");
},
onDestroy() {
console.info('AceApplication onDestroy');
}
console.info("Application onDestroy");
},
};
.container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
}
.title {
font-size: 60px;
text-align: center;
width: 100%;
height: 40%;
margin: 10px;
}
@media screen and (device-type: default) and (orientation: landscape) {
.title {
font-size: 60px;
}
}
@media screen and (device-type: tablet) and (orientation: landscape) {
.title {
font-size: 100px;
}
}
\ No newline at end of file
......@@ -12,4 +12,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require('./Pressure.test.js')
\ No newline at end of file
export default {
data: {
title: "Hello World"
},
onInit() {
this.title = this.$t('strings.world');
},
}
......@@ -12,35 +12,43 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import file from '@system.file'
import {Core, ExpectExtend} from 'deccjsunit/index'
const injectRef = Object.getPrototypeOf(global) || global
injectRef.regeneratorRuntime = require('@babel/runtime/regenerator')
import account_appAccount from '@ohos.account.appAccount';
import {MyAuthenticator} from '../Common/utils'
var TAG = "[AccountTest]"
var authenticator = null
export default {
data: {
title: "account pressure test"
async onStart(want) {
console.info('ServiceAbility onStart');
var accountMgr = account_appAccount.createAppAccountManager();
try {
await accountMgr.addAccount("zhangsan", "");
await accountMgr.enableAppAccess("zhangsan", "com.example.accounttest");
await accountMgr.addAccount("lisi", "");
await accountMgr.enableAppAccess("lisi", "com.example.accounttest");
await accountMgr.addAccount("wangwu", "");
await accountMgr.enableAppAccess("wangwu", "com.example.accounttest");
} catch(err) {
console.error(TAG + "addAccount or enableAppAccess failed, error: " + JSON.stringify(err))
}
console.info('ServiceAbility onStart end');
},
onInit() {
this.title = "account pressure test";
async onStop() {
console.info('ServiceAbility onStop');
},
onShow() {
console.info('onShow finish')
const core = Core.getInstance()
const expectExtend = new ExpectExtend({
'id': 'extend'
})
core.addService('expect', expectExtend)
core.init()
const configService = core.getDefaultService('config')
this.timeout = 180000;
configService.setConfig(this)
require('../../../test/List.test')
core.execute()
onConnect(want) {
console.info('ServiceAbility onConnect');
authenticator = new MyAuthenticator();
return authenticator.getRemoteObject();
},
onReconnect(want) {
console.info('ServiceAbility onReconnect');
},
onReady() {
onDisconnect() {
console.info('ServiceAbility onDisconnect');
},
}
\ No newline at end of file
onCommand(want, restart, startId) {
console.info('ServiceAbility onCommand');
}
};
\ No newline at end of file
{
"string": [
{
"name": "entry_desc",
"value": "description"
},
{
"name": "MainAbility_desc",
"value": "description"
},
{
"name": "MainAbility_label",
"value": "label"
},
{
"name": "ServiceAbility_desc",
"value": "hap sample empty service"
}
]
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册