ClipStorageTest.java revision edce554c3eaff20a9bf349c1bc18c0b49e812c74
184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay/*
284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Copyright (C) 2016 The Android Open Source Project
384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay *
484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Licensed under the Apache License, Version 2.0 (the "License");
584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * you may not use this file except in compliance with the License.
684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * You may obtain a copy of the License at
784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay *
884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay *      http://www.apache.org/licenses/LICENSE-2.0
984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay *
1084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * Unless required by applicable law or agreed to in writing, software
1184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * distributed under the License is distributed on an "AS IS" BASIS,
1284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * See the License for the specific language governing permissions and
1484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay * limitations under the License.
1584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay */
1684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
1784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKaypackage com.android.documentsui;
1884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
1984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertEquals;
2084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertFalse;
2184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport static org.junit.Assert.assertTrue;
2284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
2384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.net.Uri;
24edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport android.os.AsyncTask;
2584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.support.test.filters.SmallTest;
2684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport android.support.test.runner.AndroidJUnit4;
2784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
28edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport com.android.documentsui.ClipStorage.Reader;
2984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport com.android.documentsui.dirlist.TestModel;
30edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport com.android.documentsui.testing.TestScheduledExecutorService;
3184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
32edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport org.junit.AfterClass;
3384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Before;
3484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Rule;
3584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.Test;
3684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.rules.TemporaryFolder;
3784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKayimport org.junit.runner.RunWith;
3884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
39edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.io.File;
40edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.io.IOException;
41edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.util.ArrayList;
42edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tanimport java.util.List;
43edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
4484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay@RunWith(AndroidJUnit4.class)
4584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay@SmallTest
4684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKaypublic class ClipStorageTest {
4784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    private static final List<Uri> TEST_URIS = createList(
4884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay            "content://ham/fancy",
4984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay            "content://poodle/monkey/giraffe");
5084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
5184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Rule
5284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    public TemporaryFolder folder = new TemporaryFolder();
5384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
54edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    private TestScheduledExecutorService mExecutor;
55edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
5684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    private ClipStorage mStorage;
5784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    private TestModel mModel;
5884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
59edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    private long mTag;
60edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
6184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Before
6284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    public void setUp() {
6384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        File clipDir = ClipStorage.prepareStorage(folder.getRoot());
6484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        mStorage = new ClipStorage(clipDir);
65edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
66edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        mExecutor = new TestScheduledExecutorService();
67edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        AsyncTask.setDefaultExecutor(mExecutor);
68edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
69edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        mTag = mStorage.createTag();
70edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    }
71edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan
72edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    @AfterClass
73edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    public static void tearDownOnce() {
74edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        AsyncTask.setDefaultExecutor(AsyncTask.SERIAL_EXECUTOR);
7584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
7684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
7784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Test
78edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    public void testWrite() throws Exception {
79edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        writeAll(mTag, TEST_URIS);
8084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
8184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
8284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Test
8384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    public void testRead() throws Exception {
84edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        writeAll(mTag, TEST_URIS);
85edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        List<Uri> uris = new ArrayList<>();
86edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        try(Reader provider = mStorage.createReader(mTag)) {
87edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan            for (Uri uri : provider) {
88edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan                uris.add(uri);
89edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan            }
90edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        }
9184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        assertEquals(TEST_URIS, uris);
9284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
9384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
9484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Test
9584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    public void testDelete() throws Exception {
96edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        writeAll(mTag, TEST_URIS);
97edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        mStorage.delete(mTag);
9884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        try {
99edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan            mStorage.createReader(mTag);
10084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        } catch (IOException expected) {}
10184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
10284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
10384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    @Test
10484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    public void testPrepareStorage_CreatesDir() throws Exception {
10584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        File clipDir = ClipStorage.prepareStorage(folder.getRoot());
10684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        assertTrue(clipDir.exists());
10784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        assertTrue(clipDir.isDirectory());
10884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        assertFalse(clipDir.equals(folder.getRoot()));
10984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
11084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
111edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan    private void writeAll(long tag, List<Uri> uris) {
112edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        new ClipStorage.PersistTask(mStorage, uris, tag).execute();
113edce554c3eaff20a9bf349c1bc18c0b49e812c74Garfield, Tan        mExecutor.runAll();
11484769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
11584769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay
11684769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    private static List<Uri> createList(String... values) {
11784769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        List<Uri> uris = new ArrayList<>(values.length);
11884769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        for (int i = 0; i < values.length; i++) {
11984769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay            uris.add(i, Uri.parse(values[i]));
12084769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        }
12184769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay        return uris;
12284769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay    }
12384769b8205cf4a100c9d4f65c41cf72ba7a3b40fSteve McKay}
124