1/*
2* Copyright (c) 2021 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 {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
16import storage from '@ohos.data.storage'
17
18const PATH = "/data/storage/el2/database/test_storage";
19const KEY_TEST_INT_ELEMENT = 'key_test_int';
20const KEY_TEST_LONG_ELEMENT = 'key_test_long';
21const KEY_TEST_FLOAT_ELEMENT = 'key_test_float';
22const KEY_TEST_BOOLEAN_ELEMENT = 'key_test_boolean';
23const KEY_TEST_STRING_ELEMENT = 'key_test_string';
24var mPref;
25
26describe('StorageCallBackJsunit', function () {
27    beforeAll(function () {
28        console.info('beforeAll')
29    })
30
31    beforeEach( function () {
32        console.info('beforeEach');
33        mPref = storage.getStorageSync(PATH);
34    })
35
36    afterEach(function () {
37        console.info('afterEach');
38        storage.deleteStorageSync(PATH);
39    })
40
41    afterAll(function () {
42        console.info('afterAll')
43    })
44
45    /**
46     * @tc.name clear callback interface test
47     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0010
48     * @tc.desc clear callback interface test
49     */
50    it('testClear0012', 0, function (done) {
51        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
52        mPref.flushSync();
53        mPref.clear(function (err, ret) {
54            expect("defaultvalue").assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
55            done();
56        });
57    })
58
59    /**
60     * @tc.name has string callback interface test
61     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0020
62     * @tc.desc has string callback interface test
63     */
64    it('testHasKey0032', 0, function (done) {
65        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
66        mPref.has(KEY_TEST_STRING_ELEMENT, function (err, ret) {
67            expect(true).assertEqual(ret);
68            done();
69        })
70    })
71
72    /**
73     * @tc.name has int callback interface test
74     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0130
75     * @tc.desc has int callback interface test
76     */
77    it('testHasKey0033', 0, function (done) {
78        mPref.putSync(KEY_TEST_INT_ELEMENT, 1);
79        mPref.has(KEY_TEST_INT_ELEMENT, function (err, ret) {
80            expect(true).assertEqual(ret);
81            done();
82        })
83    })
84
85    /**
86     * @tc.name has float callback interface test
87     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0140
88     * @tc.desc has float callback interface test
89     */
90    it('testHasKey0034', 0, function (done) {
91        mPref.putSync(KEY_TEST_FLOAT_ELEMENT, 1.1);
92        mPref.has(KEY_TEST_FLOAT_ELEMENT, function (err, ret) {
93            expect(true).assertEqual(ret);
94            done();
95        })
96    })
97
98    /**
99     * @tc.name has long callback interface test
100     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0150
101     * @tc.desc has long callback interface test
102     */
103    it('testHasKey0035', 0, function (done) {
104        mPref.putSync(KEY_TEST_LONG_ELEMENT, 0);
105        mPref.has(KEY_TEST_LONG_ELEMENT, function (err, ret) {
106            expect(true).assertEqual(ret);
107            done();
108        })
109    })
110
111    /**
112     * @tc.name has boolean callback interface test
113     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0160
114     * @tc.desc has boolean callback interface test
115     */
116    it('testHasKey0036', 0, function (done) {
117        mPref.putSync(KEY_TEST_BOOLEAN_ELEMENT, false);
118        mPref.has(KEY_TEST_BOOLEAN_ELEMENT, function (err, ret) {
119            expect(true).assertEqual(ret);
120            done();
121        })
122    })
123
124    /**
125     * @tc.name get defaultValue callback interface test
126     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0030
127     * @tc.desc get defaultValue callback interface test
128     */
129    it('testGetDefValue0062', 0, function (done) {
130        mPref.get(KEY_TEST_STRING_ELEMENT, "defaultValue", function (err, ret) {
131            expect('defaultValue').assertEqual(ret);
132            done();
133        })
134    })
135
136    /**
137     * @tc.name get float callback interface test
138     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0040
139     * @tc.desc get float callback interface test
140     */
141    it('testGetFloat0072', 0, function (done) {
142        mPref.putSync(KEY_TEST_FLOAT_ELEMENT, 3.0);
143        mPref.get(KEY_TEST_FLOAT_ELEMENT, 0.0, function (err, ret) {
144            expect(3.0).assertEqual(ret);
145            done();
146        })
147    })
148
149    /**
150     * @tc.name get int callback interface test
151     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0050
152     * @tc.desc get int callback interface test
153     */
154    it('testGetInt0082', 0, function (done) {
155        mPref.putSync(KEY_TEST_INT_ELEMENT, 3);
156        mPref.get(KEY_TEST_INT_ELEMENT, 0.0, function (err, ret) {
157            expect(3).assertEqual(ret);
158            done();
159        })
160    })
161
162    /**
163     * @tc.name get long callback interface test
164     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0060
165     * @tc.desc get long callback interface test
166     */
167    it('testGetLong0092', 0, function (done) {
168        mPref.putSync(KEY_TEST_LONG_ELEMENT, 3);
169        expect(3).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
170        mPref.get(KEY_TEST_LONG_ELEMENT, 0, function (err, ret) {
171            expect(3).assertEqual(ret);
172            done();
173        });
174    })
175
176    /**
177     * @tc.name get String callback interface test
178     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0070
179     * @tc.desc get String callback interface test
180     */
181    it('testGetString102', 0, function (done) {
182        mPref.putSync(KEY_TEST_STRING_ELEMENT, "test");
183        mPref.flushSync();
184        mPref.get(KEY_TEST_STRING_ELEMENT, "defaultvalue", function (err, ret) {
185            expect('test').assertEqual(ret);
186            done();
187        });
188    })
189
190    /**
191     * @tc.name put boolean callback interface test
192     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0080
193     * @tc.desc put boolean callback interface test
194     */
195    it('testPutBoolean0122', 0, function (done) {
196        mPref.put(KEY_TEST_BOOLEAN_ELEMENT, true, function (err, ret) {
197            expect(true).assertEqual(mPref.getSync(KEY_TEST_BOOLEAN_ELEMENT, false));
198            mPref.flushSync();
199            storage.removeStorageFromCacheSync(PATH);
200            mPref = null;
201            mPref = storage.getStorageSync(PATH);
202            expect(true).assertEqual(mPref.getSync(KEY_TEST_BOOLEAN_ELEMENT, false));
203            done();
204        });
205    })
206
207    /**
208     * @tc.name put float callback interface test
209     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0090
210     * @tc.desc put float callback interface test
211     */
212    it('testPutFloat0132', 0, function (done) {
213        mPref.put(KEY_TEST_FLOAT_ELEMENT, 4.0, function (err, ret) {
214            expect(4.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 0.0));
215            mPref.flushSync();
216            storage.removeStorageFromCache(PATH);
217            mPref = null;
218            mPref = storage.getStorageSync(PATH);
219            expect(4.0).assertEqual(mPref.getSync(KEY_TEST_FLOAT_ELEMENT, 0.0));
220            done();
221        });
222    })
223
224    /**
225     * @tc.name put int callback interface test
226     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0100
227     * @tc.desc put int callback interface test
228     */
229    it('testPutInt0142', 0, function (done) {
230        mPref.put(KEY_TEST_INT_ELEMENT, 4,  function (err, ret) {
231            expect(4).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0));
232            mPref.flushSync();
233            storage.removeStorageFromCache(PATH);
234            mPref = null;
235            mPref = storage.getStorageSync(PATH);
236            expect(4).assertEqual(mPref.getSync(KEY_TEST_INT_ELEMENT, 0));
237            done();
238        });
239    })
240
241    /**
242     * @tc.name put long callback interface test
243     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0110
244     * @tc.desc put long callback interface test
245     */
246    it('testPutLong0152', 0, function (done) {
247        mPref.putSync(KEY_TEST_LONG_ELEMENT, 4);
248        mPref.put(KEY_TEST_LONG_ELEMENT, 4, function (err, ret) {
249            expect(4).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
250            mPref.flushSync();
251            storage.removeStorageFromCacheSync(PATH);
252            mPref = null;
253            mPref = storage.getStorageSync(PATH);
254            expect(4).assertEqual(mPref.getSync(KEY_TEST_LONG_ELEMENT, 0));
255            done();
256        });
257    })
258
259    /**
260     * @tc.name put String callback interface test
261     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0120
262     * @tc.desc put String callback interface test
263     */
264    it('testPutString0162', 0, function (done) {
265        mPref.put(KEY_TEST_STRING_ELEMENT, '', function (err, ret) {
266            expect('').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
267            mPref.flushSync();
268            storage.removeStorageFromCacheSync(PATH);
269            mPref = null;
270            mPref = storage.getStorageSync(PATH);
271            expect('').assertEqual(mPref.getSync(KEY_TEST_STRING_ELEMENT, "defaultvalue"));
272            done();
273        });
274    })
275
276    /**
277     * @tc.name clear、put、get、flush String callback interface test
278     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0120
279     * @tc.desc flush String callback interface test
280     */
281     it('testCallback0172', 0, function (done) {
282        console.log("*******************testCallback0172 begin.");
283        mPref.clear(function (err, val) {
284            if(err){
285                console.log("*******************clear error: " + err);
286                expect(false).assertTrue();
287            }
288            mPref.put(KEY_TEST_STRING_ELEMENT, '', function (err, ret) {
289                if(err){
290                    console.log("*******************put error: " + err);
291                    expect(false).assertTrue();
292                }
293                console.log("*******************put done.");
294                mPref.get(KEY_TEST_STRING_ELEMENT, "defaultvalue", function (err, pre) {
295                    if(err){
296                        console.log("*******************get error: " + err);
297                        expect(false).assertTrue();
298                    }
299                    expect('').assertEqual(pre);
300                    mPref.flush(function (err, val) {
301                        if(err){
302                            console.log("*******************flush error: " + err);
303                            expect(false).assertTrue();
304                        }
305                        mPref.get(KEY_TEST_STRING_ELEMENT, "defaultvalue", function (err, pre2) {
306                            if(err){
307                                console.log("*******************get error: " + err);
308                                expect(false).assertTrue();
309                            }
310                            expect('').assertEqual(pre2);
311                            done();
312                            console.log("*******************testCallback0172 end.");
313                        })
314                    });
315                })
316            });
317        });
318    })
319
320    /**
321     * @tc.name test put interface
322     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0121
323     * @tc.desc test put interface input parameter is illegal.
324     */
325    it('testPutIllegal001', 0, async function (done) {
326        let illegalKey = false;
327        let legalValue = "test";
328        try {
329            mPref.put(illegalKey, legalValue, (ret) => {
330                done();
331            });
332            expect(false).assertTrue();
333        } catch (err) {
334            console.log("try catch err =" + err);
335            done();
336        }
337    })
338
339    /**
340     * @tc.name test put interface
341     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0122
342     * @tc.desc test put interface input parameter is illegal.
343     */
344    it('testPutIllegal002', 0, async function (done) {
345        let illegalKey = 123;
346        let legalValue = "test";
347        try {
348            mPref.put(illegalKey, legalValue, (ret) => {
349                done();
350            });
351            expect(false).assertTrue();
352        } catch (err) {
353            console.log("try catch err =" + err);
354            done();
355        }
356    })
357
358    /**
359     * @tc.name test put interface
360     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0123
361     * @tc.desc test put interface input parameter value exceed 16 * 1024 * 1024byte.
362     */
363    it('testPutIllegal003', 0, async function (done) {
364        let phoneStr = "1";
365        phoneStr = phoneStr.repeat(16 * 1024 * 1024 + 1);
366        try {
367            mPref.put("phoneNum", phoneStr, (ret) => {
368                done();
369            });
370            expect(false).assertTrue();
371        } catch (err) {
372            console.log("try catch err =" + err);
373            done();
374        }
375    })
376
377    /**
378     * @tc.name test put interface
379     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0124
380     * @tc.desc test put interface input parameter value is legal.
381     */
382    it('testPutIllegal004', 0, async function (done) {
383        let phoneStr = "1";
384        phoneStr = phoneStr.repeat(16 * 1024 * 1024);
385        try {
386            mPref.put("phoneNum", phoneStr, (ret) => {
387                done();
388            });
389        } catch (err) {
390            console.log("try catch err =" + err);
391            expect(false).assertTrue();
392            done();
393        }
394    })
395
396    /**
397     * @tc.name test put interface
398     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0125
399     * @tc.desc test put interface input parameter key exceed 1024 byte.
400     */
401    it('testPutIllegal005', 0, async function (done) {
402        let phoneNum = "1";
403        phoneNum = phoneNum.repeat(1025);
404        try {
405            mPref.put(phoneNum, "123456", (ret) => {
406                done();
407            });
408            expect(false).assertTrue();
409        } catch (err) {
410            console.log("try catch err =" + err);
411            done();
412        }
413    })
414
415    /**
416     * @tc.name test put interface
417     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0126
418     * @tc.desc test put interface input parameter key is legal.
419     */
420    it('testPutIllegal006', 0, async function (done) {
421        let phoneNum = "1";
422        phoneNum = phoneNum.repeat(1024);
423        try {
424            mPref.put(phoneNum, "123456", (ret) => {
425                done();
426            });
427        } catch (err) {
428            console.log("try catch err =" + err);
429            expect(false).assertTrue();
430            done();
431        }
432    })
433
434    /**
435     * @tc.name test get interface
436     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0127
437     * @tc.desc test get interface input parameter is illegal.
438     */
439    it('testGetIllegal001', 0, async function (done) {
440        let illegalKey = 123;
441        try {
442            mPref.get(illegalKey, "defaultValue", (ret) => {
443                done();
444            });
445            expect(false).assertTrue();
446        } catch (err) {
447            console.log("try catch err =" + err);
448            done();
449        }
450    })
451
452    /**
453     * @tc.name test get interface
454     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0127
455     * @tc.desc test get interface input parameter is illegal.
456     */
457    it('testGetIllegal002', 0, async function (done) {
458        let illegalKey = true;
459        try {
460            mPref.get(illegalKey, "defaultValue", (ret) => {
461                done();
462            });
463            expect(false).assertTrue();
464        } catch (err) {
465            console.log("try catch err =" + err);
466            done();
467        }
468    })
469
470    /**
471     * @tc.name test get interface
472     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0128
473     * @tc.desc test get interface input parameter key exceed 1024 byte.
474     */
475    it('testGetIllegal003', 0, async function (done) {
476        let illegalKey = "1";
477        illegalKey = illegalKey.repeat(1025);
478        try {
479            mPref.get(illegalKey, "defaultValue", (ret) => {
480                done();
481            });
482            expect(false).assertTrue();
483        } catch (err) {
484            console.log("try catch err =" + err);
485            done();
486        }
487    })
488
489    /**
490     * @tc.name test get interface
491     * @tc.number SUB_DDM_AppDataFWK_JSPreferences_CallBack_0129
492     * @tc.desc test get interface input parameter key is legal.
493     */
494    it('testGetIllegal004', 0, async function (done) {
495        let legalKey = "1";
496        legalKey = legalKey.repeat(1024);
497        try {
498            mPref.get(legalKey, "defaultValue", (ret) => {
499                done();
500            });
501        } catch (err) {
502            console.log("try catch err =" + err);
503            expect(false).assertTrue();
504            done();
505        }
506    })
507})