1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'deccjsunit/index';
16import distributedObject from '@ohos.data.distributedDataObject';
17import commonType from '@ohos.data.commonType';
18import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
19import featureAbility from '@ohos.ability.featureAbility';
20import bundle from '@ohos.bundle';
21var context;
22const TAG = "OBJECTSTORE_TEST";
23function changeCallback(sessionId, changeData) {
24    console.info("changeCallback start");
25    console.info(TAG + "sessionId:" + " " + sessionId);
26    if (changeData != null && changeData != undefined) {
27        changeData.forEach(element => {
28            console.info(TAG + "data changed !" + element);
29        });
30    }
31    console.info("changeCallback end");
32}
33
34function statusCallback1(sessionId, networkId, status) {
35    console.info(TAG + "statusCallback1" + " " + sessionId);
36    this.response += "\nstatus changed " + sessionId + " " + status + " " + networkId;
37}
38
39function statusCallback2(sessionId, networkId, status) {
40    console.info(TAG + "statusCallback2" + " " + sessionId);
41    this.response += "\nstatus changed " + sessionId + " " + status + " " + networkId;
42}
43
44const PERMISSION_USER_SET = 1;
45const PERMISSION_USER_NAME = "ohos.permission.DISTRIBUTED_DATASYNC";
46const CATCH_ERR = -1;
47var tokenID = undefined;
48async function grantPerm() {
49    console.info("====grant Permission start====");
50    var appInfo = await bundle.getApplicationInfo('com.OpenHarmony.app.test', 0, 100);
51    tokenID = appInfo.accessTokenId;
52    console.info("accessTokenId" + appInfo.accessTokenId + " bundleName:" + appInfo.bundleName);
53    var atManager = abilityAccessCtrl.createAtManager();
54    var result = await atManager.grantUserGrantedPermission(tokenID, PERMISSION_USER_NAME, PERMISSION_USER_SET);
55    console.info("tokenId" + tokenID + " result:" + result);
56    console.info("====grant Permission end====");
57}
58describe('objectStoreTest', function () {
59    beforeAll(async function (done) {
60        await grantPerm();
61        done();
62    })
63
64    beforeEach(function () {
65        console.info(TAG + 'beforeEach');
66        context = featureAbility.getContext();
67    })
68
69    afterEach(function () {
70        console.info(TAG + 'afterEach')
71    })
72
73    afterAll(function () {
74        console.info(TAG + 'afterAll')
75    })
76
77    console.log(TAG + "*************Unit Test Begin*************");
78
79    /**
80     * @tc.name: V9testsetSessionId001
81     * @tc.desc: object join session and on,object can receive callback when data has been changed
82     * @tc.type: Function
83     * @tc.number: V9testcreate001
84     * @tc.size: MediumTest
85     * @tc.level: Level 2
86     */
87    it('V9testcreate001', 0, function () {
88        console.log(TAG + "************* V9testcreate001 start *************");
89        var g_object;
90        try {
91            g_object = distributedObject.create(123, {name: "Amy", age: 18, isVis: false});
92        } catch (error) {
93            console.info(error.code + error.message);
94            expect(error.code == 401).assertEqual(true);
95            expect(error.message == "Parameter error. The type of 'context' must be 'Context'.").assertEqual(true);
96        }
97        try {
98            g_object = distributedObject.create(context, 123);
99        } catch (error) {
100            console.info(error.code + error.message);
101            expect(error.code == 401).assertEqual(true);
102            expect(error.message == "Parameter error. The type of 'source' must be 'object'.").assertEqual(true);
103        }
104        g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
105        expect(g_object == undefined).assertEqual(false);
106        g_object.setSessionId("123456").then((data) => {
107            console.info(TAG + "V9testcreate001");
108            console.info(TAG + data);
109        }).catch((error) => {
110            console.info(TAG + error);
111        });
112        console.log(TAG + "************* V9testcreate001 end *************");
113        g_object.setSessionId((error, data) => {
114            console.info(TAG + error + "," + data);
115        });
116    })
117
118    /**
119     * @tc.name: V9testsetSessionId001
120     * @tc.desc: object join session and on,object can receive callback when data has been changed
121     * @tc.type: Function
122     * @tc.number: V9testsetSessionId001
123     * @tc.size: MediumTest
124     * @tc.level: Level 2
125     */
126    it('V9testsetSessionId001', 0, function () {
127        console.log(TAG + "************* V9testsetSessionId001 start *************");
128        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
129        expect(g_object == undefined).assertEqual(false);
130        try {
131            g_object.setSessionId(123).then((data) => {
132                console.info(TAG + "setSessionId test");
133                console.info(TAG + data);
134            }).catch((err) => {
135                console.info(TAG + err.code + err.message);
136            });
137        } catch (error) {
138            expect(error.code == 401).assertEqual(true);
139            expect(error.message == "Parameter error. The type of 'sessionId' must be 'string'.").assertEqual(true);
140        }
141        console.log(TAG + "************* V9testsetSessionId001 end *************");
142        g_object.setSessionId((error, data) => {
143            console.info(TAG + error + "," + data);
144        });
145    })
146
147    /**
148     * @tc.name: V9testsetSessionId002
149     * @tc.desc: object join session and on,object can receive callback when data has been changed
150     * @tc.type: Function
151     * @tc.number: V9testsetSessionId002
152     * @tc.size: MediumTest
153     * @tc.level: Level 2
154     */
155    it('V9testsetSessionId002', 0, function () {
156        console.log(TAG + "************* V9testsetSessionId002 start *************");
157        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
158        expect(g_object == undefined).assertEqual(false);
159        g_object.setSessionId("session1");
160        expect("session1" == g_object.__sessionId).assertEqual(true);
161        g_object.setSessionId("session1").then(() => {
162            console.info(TAG + "setSessionId test");
163        }).catch((error) => {
164            expect(error.code == 15400001).assertEqual(true);
165            expect(error.message == "Failed to create the in-memory database.").assertEqual(true);
166        });
167        console.log(TAG + "************* V9testsetSessionId002 end *************");
168        g_object.setSessionId((error, data) => {
169            console.info(TAG + error + "," + data);
170        });
171    })
172
173    /**
174     * @tc.name: V9testsetSessionId003
175     * @tc.desc: object join session and on,object can receive callback when data has been changed
176     * @tc.type: Function
177     * @tc.number: V9testsetSessionId003
178     * @tc.size: MediumTest
179     * @tc.level: Level 2
180     */
181    it('V9testsetSessionId003', 0, function () {
182        console.log(TAG + "************* V9testsetSessionId003 start *************");
183        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
184        expect(g_object == undefined).assertEqual(false);
185        g_object.setSessionId("123456").then((data) => {
186            console.info(TAG + "setSessionId test");
187            console.info(TAG + data);
188        }).catch((err) => {
189            console.info(TAG + err.code + err.message);
190        });
191        console.log(TAG + "************* V9testsetSessionId003 end *************");
192        g_object.setSessionId((error, data) => {
193            console.info(TAG + error + "," + data);
194        });
195    })
196
197    /**
198     * @tc.name: V9testsetSessionId004
199     * @tc.desc: object join session and on,object can receive callback when data has been changed
200     * @tc.type: Function
201     * @tc.number: V9testsetSessionId004
202     * @tc.size: MediumTest
203     * @tc.level: Level 2
204     */
205    it('V9testsetSessionId004', 0, function () {
206        console.log(TAG + "************* V9testsetSessionId004 start *************");
207        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
208        expect(g_object == undefined).assertEqual(false);
209        g_object.setSessionId("123456", (error, data) => {
210            console.info(TAG + error + "," + data);
211            console.info(TAG + "setSessionId test");
212        });
213        g_object.setSessionId("", (error, data) => {
214            console.info(TAG + error + "," + data);
215        });
216        try {
217            g_object.setSessionId(1234, (error, data) => {
218                console.info(TAG + error + "," + data);
219                console.info(TAG + "setSessionId test");
220            });
221        } catch (error) {
222            console.log(error.code + error.message);
223            expect(error.code == 401).assertEqual(true);
224            expect(error.message == "Parameter error. The type of 'sessionId' must be 'string'.").assertEqual(true);
225        }
226        console.log(TAG + "************* V9testsetSessionId004 end *************");
227        g_object.setSessionId("", (error, data) => {
228            console.info(TAG + error + "," + data);
229        });
230    })
231
232
233    /**
234     * @tc.name: V9testOn001
235     * @tc.desc: object join session and on,object can receive callback when data has been changed
236     * @tc.type: Function
237     * @tc.number: V9testOn001
238     * @tc.size: MediumTest
239     * @tc.level: Level 2
240     */
241    it('V9testOn001', 0, function () {
242        console.log(TAG + "************* V9testOn001 start *************");
243        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
244        expect(g_object == undefined).assertEqual(false);
245        g_object.setSessionId("session1").then(() => {
246            console.info("join session");
247        }).catch((error) => {
248            console.info(TAG + error.code + error.message);
249        });
250        expect("session1" == g_object.__sessionId).assertEqual(true);
251        console.info(TAG + " start call watch change");
252        g_object.on("change", function (sessionId, changeData) {
253            console.info("V9testOn001 callback start.");
254            if (changeData != null && changeData != undefined) {
255                changeData.forEach(element => {
256                    console.info(TAG + "data changed !" + element);
257                });
258            }
259            console.info("V9testOn001 callback end.");
260        });
261
262        if (g_object != undefined && g_object != null) {
263            g_object.name = "jack1";
264            g_object.age = 19;
265            g_object.isVis = true;
266            expect(g_object.name == "jack1").assertEqual(true);
267            expect(g_object.age == 19).assertEqual(true);
268            console.info(TAG + " set data success!");
269        } else {
270            console.info(TAG + " object is null,set name fail");
271        }
272
273        console.log(TAG + "************* V9testOn001 end *************");
274        g_object.setSessionId("", (error, data) => {
275            console.info(TAG + error + "," + data);
276        });
277    })
278
279    /**
280     * @tc.name: V9testOn002
281     * @tc.desc: object join session and on,then object change data twice,object can receive two callbacks when data has been changed
282     * @tc.type: Function
283     * @tc.number: V9testOn002
284     * @tc.size: MediumTest
285     * @tc.level: Level 2
286     */
287    it('V9testOn002', 0, function () {
288        console.log(TAG + "************* V9testOn002 start *************");
289        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
290        expect(g_object == undefined).assertEqual(false);
291        g_object.setSessionId("session1");
292        expect("session1" == g_object.__sessionId).assertEqual(true);
293        console.info(TAG + " start call watch change");
294        try {
295            g_object.on(123, function (sessionId, changeData) {
296                console.info("V9testOn002 callback start.");
297                console.info(TAG + sessionId);
298                if (changeData != null && changeData != undefined) {
299                    changeData.forEach(element => {
300                        console.info(TAG + "data changed !" + element);
301                    });
302                }
303                console.info("V9testOn002 callback end.");
304            });
305
306        } catch (error) {
307            expect(error.code == 401).assertEqual(true);
308            expect(error.message == "Parameter error. The type of 'type' must be 'string'.").assertEqual(true);
309        }
310        console.log(TAG + "************* V9testOn002 end *************");
311        g_object.setSessionId("", (error, data) => {
312            console.info(TAG + error + "," + data);
313        });
314    })
315
316    /**
317     * @tc.name: testOn003
318     * @tc.desc object join session and on,then object do not change data,object can not receive callbacks
319     * @tc.type: Function
320     * @tc.number: testOn003
321     * @tc.size: MediumTest
322     * @tc.level: Level 2
323     */
324    it('V9testOn003', 0, function () {
325        console.log(TAG + "************* V9testOn003 start *************");
326        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
327        expect(g_object == undefined).assertEqual(false);
328        g_object.setSessionId("session1").then(() => {
329            console.info("join session");
330        }).catch((error) => {
331            console.info(TAG + error.code + error.message);
332        });
333        expect("session1" == g_object.__sessionId).assertEqual(true);
334        console.info(TAG + " start call watch change");
335        try {
336            g_object.on("error", function (sessionId, changeData) {
337                console.info("V9testOn003 callback start.");
338                if (changeData != null && changeData != undefined) {
339                    changeData.forEach(element => {
340                        console.info(TAG + "data changed !" + element);
341                    });
342                }
343                console.info("V9testOn003 callback end.");
344            });
345        } catch (error) {
346            expect(error != undefined).assertEqual(true);
347        }
348        console.log(TAG + "************* V9testOn003 end *************");
349        g_object.setSessionId("", (error, data) => {
350            console.info(TAG + error + "," + data);
351        });
352    })
353
354    /**
355     * @tc.name V9testOff001
356     * @tc.desc object join session and on&off,object can not receive callback after off
357     * @tc.type: Function
358     * @tc.number: V9testOff001
359     * @tc.size: MediumTest
360     * @tc.level: Level 2
361     */
362    it('V9testOff001', 0, function () {
363        console.log(TAG + "************* V9testOff001 start *************");
364        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
365        expect(g_object == undefined).assertEqual(false);
366        g_object.setSessionId("session5").then(() => {
367            console.info("join session");
368        }).catch((error) => {
369            console.info(TAG + error.code + error.message);
370        });
371        expect("session5" == g_object.__sessionId).assertEqual(true);
372
373        g_object.on("change", changeCallback);
374        console.info(TAG + " start call watch change");
375        if (g_object != undefined && g_object != null) {
376            g_object.name = "jack1";
377            g_object.age = 19;
378            g_object.isVis = true;
379            expect(g_object.name == "jack1").assertEqual(true);
380            expect(g_object.age == 19).assertEqual(true);
381            console.info(TAG + " set data success!");
382        } else {
383            console.info(TAG + " object is null,set name fail");
384        }
385        g_object.off("change", changeCallback);
386        console.info(TAG + " end call watch change");
387        if (g_object != undefined && g_object != null) {
388            g_object.name = "jack2";
389            g_object.age = 20;
390            g_object.isVis = false;
391            expect(g_object.name == "jack2").assertEqual(true);
392            expect(g_object.age == 20).assertEqual(true);
393            console.info(TAG + " set data success!");
394        } else {
395            console.info(TAG + " object is null,set name fail");
396        }
397        console.log(TAG + "************* V9testOff001 end *************");
398        g_object.setSessionId((error, data) => {
399            console.info(TAG + error + "," + data);
400        });
401    })
402
403    /**
404     * @tc.name: V9testOff002
405     * @tc.desc object join session and off,object can not receive callback
406     * @tc.type: Function
407     * @tc.number: V9testOff002
408     * @tc.size: MediumTest
409     * @tc.level: Level 2
410     */
411    it('V9testOff002', 0, function () {
412        console.log(TAG + "************* V9testOff002 start *************");
413        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
414        expect(g_object == undefined).assertEqual(false);
415        g_object.setSessionId("session6").then(() => {
416            console.info("join session");
417        }).catch((error) => {
418            console.info(TAG + error.code + error.message);
419        });
420        expect("session6" == g_object.__sessionId).assertEqual(true);
421        try {
422            g_object.off(123);
423        } catch (error) {
424            expect(error.code == 401).assertEqual(true);
425            expect(error.message == "Parameter error. The type of 'type' must be 'string'.").assertEqual(true);
426        }
427        console.info(TAG + " end call watch change");
428        console.log(TAG + "************* V9testOff002 end *************");
429        g_object.setSessionId().then((data) => {
430            console.info(TAG + data);
431            console.info(TAG + "setSessionId test");
432        }).catch((error) => {
433            console.info(TAG + error.code + error.message);
434        });
435    })
436
437    /**
438     * @tc.name: V9testOnStatus001
439     * @tc.desc: object set a listener to watch another object online/offline
440     * @tc.type: Function
441     * @tc.number: V9testOnStatus001
442     * @tc.size: MediumTest
443     * @tc.level: Level 2
444     */
445    it('V9testOnStatus001', 0, function () {
446        console.log(TAG + "************* V9testOnStatus001 start *************");
447        console.log(TAG + "start watch status");
448        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
449        expect(g_object == undefined).assertEqual(false);
450        try {
451            g_object.on("status", null);
452        } catch (error) {
453            expect(error.code == 401).assertEqual(true);
454            expect(error.message == "Parameter error. The type of 'callback' must be 'function'.").assertEqual(true);
455        }
456        console.log(TAG + "watch success");
457        console.log(TAG + "************* V9testOnStatus001 end *************");
458        g_object.setSessionId("").then((data) => {
459            console.info(TAG + data);
460            console.info(TAG + "setSessionId test");
461        }).catch((error) => {
462            console.info(TAG + error.code + error.message);
463        });
464    })
465
466    /**
467     * @tc.name: V9testOnStatus002
468     * @tc.desc: object set several listener and can unWatch all watcher
469     * @tc.type: Function
470     * @tc.number: V9testOnStatus002
471     * @tc.size: MediumTest
472     * @tc.level: Level 2
473     */
474    it('V9testOnStatus002', 0, function () {
475        console.log(TAG + "************* V9testOnStatus002 start *************");
476        console.log(TAG + "start watch status");
477        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
478        expect(g_object == undefined).assertEqual(false);
479        expect(g_object.name == "Amy").assertEqual(true);
480        g_object.on("status", statusCallback1);
481        console.log(TAG + "watch success");
482        console.log(TAG + "start call unwatch status");
483        g_object.off("status");
484        console.log(TAG + "unwatch success");
485        console.log(TAG + "************* V9testOnStatus002 end *************");
486        g_object.setSessionId().then(() => {
487            console.info("leave session");
488        }).catch((error) => {
489            console.info(TAG + error.code + error.message);
490        });
491    })
492
493    /**
494     * @tc.name: V9testSave001
495     * @tc.desc: test save local
496     * @tc.type: Function
497     * @tc.number: V9testSave001
498     * @tc.size: MediumTest
499     * @tc.level: Level 2
500     */
501    it('V9testSave001', 0, async function (done) {
502        console.log(TAG + "************* V9testSave001 start *************");
503        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
504        expect(g_object == undefined).assertEqual(false);
505
506        g_object.setSessionId("mySession1").then(() => {
507            console.info("join session");
508        }).catch((error) => {
509            console.info(TAG + error.code + error.message);
510        });
511        expect("mySession1" == g_object.__sessionId).assertEqual(true);
512
513        g_object.save("local").then((ret) => {
514            expect(ret.sessionId == "mySession1").assertEqual(true);
515            expect(ret.version == g_object.__version).assertEqual(true);
516            expect(ret.deviceId == "local").assertEqual(true);
517            done();
518
519            g_object.setSessionId("");
520            g_object.name = undefined;
521            g_object.age = undefined;
522            g_object.isVis = undefined;
523            g_object.setSessionId("mySession1");
524
525            expect(g_object.name == "Amy").assertEqual(true);
526            expect(g_object.age == 18).assertEqual(true);
527            expect(g_object.isVis == false).assertEqual(true);
528        }).catch((err) => {
529            expect("801").assertEqual(err.code.toString());
530            done();
531        });
532        console.log(TAG + "************* V9testSave001 end *************");
533    })
534
535    /**
536     * @tc.name: V9testSave002
537     * @tc.desc: test save local
538     * @tc.type: Function
539     * @tc.number: V9testSave002
540     * @tc.size: MediumTest
541     * @tc.level: Level 2
542     */
543    it('V9testSave002', 0, async function (done) {
544        console.log(TAG + "************* V9testSave002 start *************");
545        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
546        expect(g_object == undefined).assertEqual(false);
547
548        g_object.setSessionId("mySession2");
549        expect("mySession2" == g_object.__sessionId).assertEqual(true);
550
551        g_object.save("local", (err, result) => {
552            if (err) {
553                expect("801").assertEqual(err.code.toString());
554                done();
555                return;
556            }
557            expect(result.sessionId == "mySession2").assertEqual(true);
558            expect(result.version == g_object.__version).assertEqual(true);
559            expect(result.deviceId == "local").assertEqual(true);
560
561            g_object.setSessionId("");
562            g_object.name = undefined;
563            g_object.age = undefined;
564            g_object.isVis = undefined;
565            g_object.setSessionId("mySession2");
566
567            expect(g_object.name == "Amy").assertEqual(true);
568            expect(g_object.age == 18).assertEqual(true);
569            expect(g_object.isVis == false).assertEqual(true);
570            done();
571        });
572        console.log(TAG + "************* V9testSave002 end *************");
573    })
574
575    /**
576     * @tc.name: V9testSave003
577     * @tc.desc: test save local
578     * @tc.type: Function
579     * @tc.number: V9testSave003
580     * @tc.size: MediumTest
581     * @tc.level: Level 2
582     */
583    it('V9testSave003', 0, async function () {
584        console.log(TAG + "************* V9testSave003 start *************");
585        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
586        expect(g_object == undefined).assertEqual(false);
587
588        g_object.setSessionId("mySession3").then(() => {
589            console.info("join session");
590        }).catch((error) => {
591            console.info(TAG + error.code + error.message);
592        });
593        expect("mySession3" == g_object.__sessionId).assertEqual(true);
594        try {
595            g_object.save(1234).then((result) => {
596                expect(result.sessionId == "mySession3").assertEqual(true);
597                expect(result.version == g_object.__version).assertEqual(true);
598                expect(result.deviceId == "local").assertEqual(true);
599            })
600        } catch (error) {
601            expect(error.message == "Parameter error. The type of 'deviceId' must be 'string'.").assertEqual(true);
602        }
603        g_object.save("errorDeviceId").then((result) => {
604            expect(result.sessionId == "mySession3").assertEqual(true);
605            expect(result.version == g_object.__version).assertEqual(true);
606            expect(result.deviceId == "local").assertEqual(true);
607        }).catch((error) => {
608            expect(error != undefined).assertEqual(true);
609        });
610
611        try {
612            g_object.save("local", 123);
613        } catch (error) {
614            expect(error.code == 401).assertEqual(true);
615            expect(error.message == "Parameter error. The type of 'callback' must be 'function'.").assertEqual(true);
616        }
617        console.log(TAG + "************* V9testSave003 end *************");
618        g_object.setSessionId().then(() => {
619            console.info("leave session");
620        }).catch((error) => {
621            console.info(TAG + error.code + error.message);
622        });
623    })
624
625    /**
626     * @tc.name: V9testRevokeSave001
627     * @tc.desc: test RevokeSave
628     * @tc.type: Function
629     * @tc.number: V9testRevokeSave001
630     * @tc.size: MediumTest
631     * @tc.level: Level 2
632     */
633    it('V9testRevokeSave001', 0, async function (done) {
634        console.log(TAG + "************* V9testRevokeSave001 start *************");
635        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
636        expect(g_object == undefined).assertEqual(false);
637
638        g_object.setSessionId("mySession4");
639        expect("mySession4" == g_object.__sessionId).assertEqual(true);
640
641        g_object.save("local", (err, result) => {
642            if (err) {
643                expect("801").assertEqual(err.code.toString());
644                done();
645                return;
646            }
647            expect(result.sessionId == "mySession4").assertEqual(true);
648            expect(result.version == g_object.__version).assertEqual(true);
649            expect(result.deviceId == "local").assertEqual(true);
650            g_object.revokeSave((err, result) => {
651                if (err) {
652                    expect("801").assertEqual(err.code.toString());
653                    done();
654                    return;
655                }
656                expect("mySession4" == result.sessionId).assertEqual(true);
657                g_object.setSessionId("");
658                g_object.name = undefined;
659                g_object.age = undefined;
660                g_object.isVis = undefined;
661                g_object.setSessionId("mySession4");
662
663                expect(g_object.name == undefined).assertEqual(true);
664                expect(g_object.age == undefined).assertEqual(true);
665                expect(g_object.isVis == undefined).assertEqual(true);
666                done();
667            })
668        });
669        console.log(TAG + "************* V9testRevokeSave001 end *************");
670    })
671
672    /**
673     * @tc.name: V9testRevokeSave002
674     * @tc.desc: test save local
675     * @tc.type: Function
676     * @tc.require:
677     * @tc.number: V9testRevokeSave002
678     * @tc.size: MediumTest
679     * @tc.level: Level 2
680     */
681    it('V9testRevokeSave002', 0, async function () {
682        console.log(TAG + "************* V9testRevokeSave002 start *************");
683        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
684        expect(g_object != undefined).assertEqual(true);
685
686        g_object.setSessionId("mySession5");
687        expect("mySession5" == g_object.__sessionId.toString()).assertEqual(true);
688
689        let result = await g_object.save("local").catch((err)=> {
690            expect("801").assertEqual(err.code.toString());
691            return CATCH_ERR;
692        });
693        if (result === CATCH_ERR) {
694            return;
695        }
696
697        expect(result.sessionId.toString() == "mySession5").assertEqual(true);
698        expect(result.version.toString() == g_object.__version.toString()).assertEqual(true);
699        expect(result.deviceId.toString() == "local").assertEqual(true);
700
701        result = await g_object.revokeSave().catch((err)=> {
702            expect("801").assertEqual(err.code.toString());
703            return CATCH_ERR;
704        });
705
706        if (result === CATCH_ERR) {
707            return;
708        }
709        g_object.setSessionId("");
710        g_object.name = undefined;
711        g_object.age = undefined;
712        g_object.isVis = undefined;
713        g_object.setSessionId("mySession5");
714
715        expect(g_object.name == undefined).assertEqual(true);
716        expect(g_object.age == undefined).assertEqual(true);
717        expect(g_object.isVis == undefined).assertEqual(true);
718
719        console.log(TAG + "************* V9testRevokeSave002 end *************");
720    })
721
722    /**
723     * @tc.name: V9testRevokeSave003
724     * @tc.desc: test RevokeSave
725     * @tc.type: Function
726     * @tc.number: V9testRevokeSave003
727     * @tc.size: MediumTest
728     * @tc.level: Level 2
729     */
730    it('V9testRevokeSave003', 0, async function () {
731        console.log(TAG + "************* V9testRevokeSave003 start *************");
732        var g_object = distributedObject.create(context, {name: "Amy", age: 18, isVis: false});
733        expect(g_object == undefined).assertEqual(false);
734        g_object.setSessionId("mySession6").then(() => {
735            console.info("join session");
736        }).catch((error) => {
737            console.info(TAG + error.code + error.message);
738        });
739        expect("mySession6" == g_object.__sessionId).assertEqual(true);
740        let result = await g_object.save("local").catch((err) => {
741            expect("801").assertEqual(err.code.toString());
742            return CATCH_ERR;
743        });
744        if (result === CATCH_ERR) {
745            return;
746        }
747        expect(result.sessionId == "mySession6").assertEqual(true);
748        expect(result.version == g_object.__version).assertEqual(true);
749        expect(result.deviceId == "local").assertEqual(true);
750        try {
751            g_object.revokeSave(123).then((result) => {
752                expect(result.sessionId == "mySession6").assertEqual(true);
753            }).catch((err) => {
754                console.log(err.code + err.message);
755            });
756        } catch (error) {
757            console.info(error.code + error.message);
758            expect("401").assertEqual(error.code.toString());
759        }
760        console.log(TAG + "************* V9testRevokeSave003 end *************");
761    })
762
763    /**
764     * @tc.name: V9testbindAssetCommunType001
765     * @tc.desc: Test CommType Enum Value
766     * @tc.type: Function
767     * @tc.number: V9testbindAssetCommunType001
768     * @tc.size: MediumTest
769     * @tc.level: Level 2
770     */
771    it('V9testbindAssetCommunType001', 0, function (done) {
772        console.log(TAG + "************* V9testbindAssetCommunType001 start *************");
773        expect(commonType.AssetStatus.ASSET_NORMAL == 1).assertTrue();
774        expect(commonType.AssetStatus.ASSET_INSERT == 2).assertTrue();
775        expect(commonType.AssetStatus.ASSET_UPDATE == 3).assertTrue();
776        expect(commonType.AssetStatus.ASSET_DELETE == 4).assertTrue();
777        expect(commonType.AssetStatus.ASSET_ABNORMAL == 5).assertTrue();
778        expect(commonType.AssetStatus.ASSET_DOWNLOADING == 6).assertTrue();
779        done();
780    })
781
782    /**
783     * @tc.name: V9testsetSessionId001
784     * @tc.desc: Test bindAssetStore
785     * @tc.type: Function
786     * @tc.number: V9testbindAssetStore001
787	 * @tc.size: MediumTest
788     * @tc.level: Level 2
789     */
790    it('V9testbindAssetStore001', 0, function (done) {
791        console.log(TAG + "************* V9testbindAssetStore001 start *************");
792        let g_object = distributedObject.create(context, {
793            title:"bindAssettest-title",
794            content:"bindAssettest-content",
795            mark:"no mark",
796            asset001:
797            {
798                status:0,
799                name:"1.txt",
800                uri:"file://com.example.myapp/data/dir/1.txt",
801                path:"/dir/1.txt",
802                createTime: "2023/11/30 19:48:00",
803                modifyTime: "2023/11/30 20:10:00",
804                size:"1",
805            }
806        });
807
808        expect(g_object == undefined).assertEqual(false);
809        g_object.setSessionId("sessionBA1");
810
811        let asset1 = {
812            name: "name1",
813            uri: "uri1",
814            createTime: "createTime1",
815            modifyTime: "modifyTime1",
816            size: "size1",
817            path: "path1",
818            status: commonType.AssetStatus.ASSET_NORMAL,
819        }
820
821        let asset2 = {
822            name: "name2",
823            uri: "uri2",
824            createTime: "createTime2",
825            modifyTime: "modifyTime2",
826            size: "size2",
827            path: "path2",
828            status: commonType.AssetStatus.ASSET_UPDATE,
829        }
830
831        let asset3 = {
832            name: "name3",
833            uri: "uri3",
834            createTime: "createTime3",
835            modifyTime: "modifyTime3",
836            size: "size3",
837            path: "path3",
838        }
839
840        let result = new Uint8Array(8);
841        for (let i = 0; i < 8; i++) {
842          result[i] = 1;
843        }
844
845        let arr = [asset1, asset2];
846        let bindInfo  = {
847            storeName:"store1",
848            tableName:"table1",
849            primaryKey:{
850                "data1": 123,
851                "data2": arr,
852                "data3": asset3,
853                "data4": 101.5,
854                "data5": result,
855                "data6": false,
856                "data7": null,
857                "data8": "test1"},
858            field:"field1",
859            assetName:"asset1"
860        }
861
862        try {
863            g_object.bindAssetStore("asset001", bindInfo, (err, data)=>{
864                expect(err == undefined).assertEqual(true);
865                done();
866            });
867        } catch (error) {
868            console.info(`V9testbindAssetStore001 err is: ${error.code} and msg is: ${error.message}`);
869            expect(null).assertFail();
870            done();
871        }
872    })
873
874    /**
875     * @tc.name: V9testsetSessionId002
876     * @tc.desc: Test bindAssetStore with invalid args
877     * @tc.type: Function
878     * @tc.number: V9testsetSessionId002
879     * @tc.size: MediumTest
880     * @tc.level: Level 2
881     */
882    it('V9testbindAssetStore002', 0, function (done) {
883        console.log(TAG + "************* V9testbindAssetStore002 start *************");
884        let g_object = distributedObject.create(context, {
885            title:"bindAssettest-title",
886            content:"bindAssettest-content",
887            mark:"no mark",
888            asset002:
889            {
890                status:0,
891                name:"1.txt",
892                uri:"file://com.example.myapp/data/dir/1.txt",
893                path:"/dir/1.txt",
894                createTime: "2023/11/30 19:48:00",
895                modifyTime: "2023/11/30 20:10:00",
896                size:"1",
897            }
898        });
899
900        expect(g_object == undefined).assertEqual(false);
901        g_object.setSessionId("sessionBA2");
902
903        let bindInfo  = {
904            storeName: undefined,
905            tableName: "table1",
906            primaryKey: {"data1": 123},
907            field: "field1",
908            assetName: "asset1"
909        }
910
911        try {
912            g_object.bindAssetStore("asset002", bindInfo, (err, data)=>{
913                expect(null).assertFail();
914                done();
915            });
916        } catch (error) {
917            console.info(`V9testbindAssetStore002 err is: ${error.code} and msg is: ${error.message}`);
918            expect(error.code == 401).assertTrue();
919            done();
920        }
921    })
922
923    /**
924     * @tc.name: V9testbindAssetStore003
925     * @tc.desc: Test bindAssetStore with invalid args
926     * @tc.type: Function
927     * @tc.number: V9testbindAssetStore003
928     * @tc.size: MediumTest
929     * @tc.level: Level 2
930     */
931    it('V9testbindAssetStore003', 0, function (done) {
932        console.log(TAG + "************* V9testbindAssetStore003 start *************");
933        let g_object = distributedObject.create(context, {
934            title:"bindAssettest-title",
935            content:"bindAssettest-content",
936            mark:"no mark",
937            asset003:
938            {
939                status:0,
940                name:"1.txt",
941                uri:"file://com.example.myapp/data/dir/1.txt",
942                path:"/dir/1.txt",
943                createTime: "2023/11/30 19:48:00",
944                modifyTime: "2023/11/30 20:10:00",
945                size:"1",
946            }
947        });
948
949        expect(g_object == undefined).assertEqual(false);
950        g_object.setSessionId("sessionBA3");
951        let bindInfo  = {
952            storeName:"name1",
953            tableName: null,
954            primaryKey:{"data1": 123},
955            field:"field1",
956            assetName:"asset1"
957        }
958
959        try {
960            g_object.bindAssetStore("asset003", bindInfo, (err, data)=>{
961                expect(null).assertFail();
962                done();
963            });
964        } catch (error) {
965            console.info(`V9testbindAssetStore003 err is: ${error.code} and msg is: ${error.message}`);
966            expect(error.code == 401).assertTrue();
967            done();
968        }
969    })
970
971    /**
972     * @tc.name: V9testcreate002
973     * @tc.desc: object with asset create distributed data object
974     * @tc.type: Function
975     * @tc.number: V9testcreate002
976     * @tc.size: MediumTest
977     * @tc.level: Level 2
978     */
979    it('V9testcreate002', 0, function () {
980        console.log(TAG + "************* V9testcreate002 start *************");
981        var g_object;
982        const attachment = {
983            status: 0,
984            name: "1.txt",
985            uri: "file://com.example.myapplication/data/storage/el2/distributedfiles/dir/1.txt",
986            path: "/dir/1.txt",
987            createTime: "2023-11-26 10:00:00",
988            modifyTime: "2023-11-26 10:00:00",
989            size: "1"
990        };
991        try {
992            g_object = distributedObject.create(context, {
993                title: "my note",
994                content: "It's a nice day today.",
995                mark: false,
996                attachment
997            });
998        } catch (error) {
999            console.info(error.code + error.message);
1000        }
1001        expect(g_object === undefined).assertEqual(false);
1002
1003        g_object.setSessionId("123456").then((data) => {
1004            console.info(TAG + "V9testcreate002");
1005            console.info(TAG + data);
1006        }).catch((error) => {
1007            console.info(TAG + error);
1008        });
1009
1010        try {
1011            g_object.attachment = {};
1012        } catch (error) {
1013            expect(error.code === 401).assertEqual(true);
1014            expect(error.message === "cannot set attachment by non Asset type data").assertEqual(true);
1015        }
1016
1017        g_object.setSessionId("").then((data) => {
1018            console.info(TAG + "V9testcreate002");
1019            console.info(TAG + data);
1020        }).catch((error) => {
1021            console.info(TAG + error);
1022        });
1023
1024        console.log(TAG + "************* V9testcreate002 end *************");
1025        g_object.setSessionId((error, data) => {
1026            console.info(TAG + error + "," + data);
1027        });
1028    })
1029    console.log(TAG + "*************Unit Test End*************");
1030})