summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/email/service/AttachmentDownloadServiceTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/email/service/AttachmentDownloadServiceTests.java')
-rw-r--r--tests/src/com/android/email/service/AttachmentDownloadServiceTests.java283
1 files changed, 0 insertions, 283 deletions
diff --git a/tests/src/com/android/email/service/AttachmentDownloadServiceTests.java b/tests/src/com/android/email/service/AttachmentDownloadServiceTests.java
deleted file mode 100644
index 32b68f7ae..000000000
--- a/tests/src/com/android/email/service/AttachmentDownloadServiceTests.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.email.service;
-
-import android.content.Context;
-import android.test.suitebuilder.annotation.Suppress;
-
-import com.android.email.AccountTestCase;
-import com.android.email.EmailConnectivityManager;
-import com.android.email.provider.ProviderTestUtils;
-import com.android.email.service.AttachmentDownloadService.DownloadRequest;
-import com.android.email.service.AttachmentDownloadService.DownloadSet;
-import com.android.emailcommon.provider.Account;
-import com.android.emailcommon.provider.EmailContent.Attachment;
-import com.android.emailcommon.provider.EmailContent.Message;
-import com.android.emailcommon.provider.Mailbox;
-import com.android.emailcommon.service.EmailServiceStatus;
-
-import java.io.File;
-import java.util.Iterator;
-
-/**
- * Tests of the AttachmentDownloadService
- *
- * You can run this entire test case with:
- * runtest -c com.android.email.service.AttachmentDownloadServiceTests email
- */
-@Suppress
-public class AttachmentDownloadServiceTests extends AccountTestCase {
- private AttachmentDownloadService mService;
- private Context mMockContext;
- private Account mAccount;
- private Mailbox mMailbox;
- private long mAccountId;
- private long mMailboxId;
- private AttachmentDownloadService.AccountManagerStub mAccountManagerStub;
- private MockDirectory mMockDirectory;
-
- private DownloadSet mDownloadSet;
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- mMockContext = getMockContext();
-
- // Set up an account and mailbox
- mAccount = ProviderTestUtils.setupAccount("account", false, mMockContext);
- mAccount.mFlags |= Account.FLAGS_BACKGROUND_ATTACHMENTS;
- mAccount.save(mMockContext);
- mAccountId = mAccount.mId;
-
- mMailbox = ProviderTestUtils.setupMailbox("mailbox", mAccountId, true, mMockContext);
- mMailboxId = mMailbox.mId;
-
- // Set up our download service to simulate a running environment
- // Use the NullEmailService so that the loadAttachment calls become no-ops
- mService = new AttachmentDownloadService();
- mService.mContext = mMockContext;
- // there's no NullEmailService class
- /*mService.addServiceIntentForTest(mAccountId, new Intent(mContext,
- NullEmailService.class));*/
- mAccountManagerStub = new AttachmentDownloadService.AccountManagerStub(null);
- mService.mAccountManagerStub = mAccountManagerStub;
- mService.mConnectivityManager = new MockConnectivityManager(mContext, "mock");
- mDownloadSet = mService.mDownloadSet;
- mMockDirectory =
- new MockDirectory(mService.mContext.getCacheDir().getAbsolutePath());
- }
-
- @Override
- public void tearDown() throws Exception {
- super.tearDown();
- }
-
- /**
- * This test creates attachments and places them in the DownloadSet; we then do various checks
- * that exercise its functionality.
- */
- public void testDownloadSet() {
- // TODO: Make sure that this doesn't interfere with the "real" ADS that might be running
- // on device
- Message message = ProviderTestUtils.setupMessage("message", mAccountId, mMailboxId, false,
- true, mMockContext);
- Attachment att1 = ProviderTestUtils.setupAttachment(message.mId, "filename1", 1000,
- Attachment.FLAG_DOWNLOAD_USER_REQUEST, true, mMockContext);
- Attachment att2 = ProviderTestUtils.setupAttachment(message.mId, "filename2", 1000,
- Attachment.FLAG_DOWNLOAD_FORWARD, true, mMockContext);
- Attachment att3 = ProviderTestUtils.setupAttachment(message.mId, "filename3", 1000,
- Attachment.FLAG_DOWNLOAD_FORWARD, true, mMockContext);
- Attachment att4 = ProviderTestUtils.setupAttachment(message.mId, "filename4", 1000,
- Attachment.FLAG_DOWNLOAD_USER_REQUEST, true, mMockContext);
- // Indicate that these attachments have changed; they will be added to the queue
- mDownloadSet.onChange(mMockContext, att1);
- mDownloadSet.onChange(mMockContext, att2);
- mDownloadSet.onChange(mMockContext, att3);
- mDownloadSet.onChange(mMockContext, att4);
- Iterator<DownloadRequest> iterator = mDownloadSet.descendingIterator();
- // Check the expected ordering; 1 & 4 are higher priority than 2 & 3
- // 1 and 3 were created earlier than their priority equals
- long[] expectedAttachmentIds = new long[] {att1.mId, att4.mId, att2.mId, att3.mId};
- for (int i = 0; i < expectedAttachmentIds.length; i++) {
- assertTrue(iterator.hasNext());
- DownloadRequest req = iterator.next();
- assertEquals(expectedAttachmentIds[i], req.attachmentId);
- }
-
- // Process the queue; attachment 1 should be marked "in progress", and should be in
- // the in-progress map
- mDownloadSet.processQueue();
- DownloadRequest req = mDownloadSet.findDownloadRequest(att1.mId);
- assertNotNull(req);
- assertTrue(req.inProgress);
- assertTrue(mDownloadSet.mDownloadsInProgress.containsKey(att1.mId));
- // There should also be only one download in progress (testing the per-account limitation)
- assertEquals(1, mDownloadSet.mDownloadsInProgress.size());
- // End the "download" with a connection error; we should still have this in the queue,
- // but it should no longer be in-progress
- mDownloadSet.endDownload(att1.mId, EmailServiceStatus.CONNECTION_ERROR);
- assertFalse(req.inProgress);
- assertEquals(0, mDownloadSet.mDownloadsInProgress.size());
-
- mDownloadSet.processQueue();
- // Things should be as they were earlier; att1 should be an in-progress download
- req = mDownloadSet.findDownloadRequest(att1.mId);
- assertNotNull(req);
- assertTrue(req.inProgress);
- assertTrue(mDownloadSet.mDownloadsInProgress.containsKey(att1.mId));
- // Successfully download the attachment; there should be no downloads in progress, and
- // att1 should no longer be in the queue
- mDownloadSet.endDownload(att1.mId, EmailServiceStatus.SUCCESS);
- assertEquals(0, mDownloadSet.mDownloadsInProgress.size());
- assertNull(mDownloadSet.findDownloadRequest(att1.mId));
-
- // Test dequeue and isQueued
- assertEquals(3, mDownloadSet.size());
- mService.dequeue(att2.mId);
- assertEquals(2, mDownloadSet.size());
- assertTrue(mService.isQueued(att4.mId));
- assertTrue(mService.isQueued(att3.mId));
-
- mDownloadSet.processQueue();
- // att4 should be the download in progress
- req = mDownloadSet.findDownloadRequest(att4.mId);
- assertNotNull(req);
- assertTrue(req.inProgress);
- assertTrue(mDownloadSet.mDownloadsInProgress.containsKey(att4.mId));
- }
-
- /**
- * A mock file directory containing a single (Mock)File. The total space, usable space, and
- * length of the single file can be set
- */
- private static class MockDirectory extends File {
- private static final long serialVersionUID = 1L;
- private long mTotalSpace;
- private long mUsableSpace;
- private MockFile[] mFiles;
- private final MockFile mMockFile = new MockFile();
-
-
- public MockDirectory(String path) {
- super(path);
- mFiles = new MockFile[1];
- mFiles[0] = mMockFile;
- }
-
- private void setTotalAndUsableSpace(long total, long usable) {
- mTotalSpace = total;
- mUsableSpace = usable;
- }
-
- @Override
- public long getTotalSpace() {
- return mTotalSpace;
- }
-
- @Override
- public long getUsableSpace() {
- return mUsableSpace;
- }
-
- public void setFileLength(long length) {
- mMockFile.mLength = length;
- }
-
- @Override
- public File[] listFiles() {
- return mFiles;
- }
- }
-
- /**
- * A mock file that reports back a pre-set length
- */
- private static class MockFile extends File {
- private static final long serialVersionUID = 1L;
- private long mLength = 0;
-
- public MockFile() {
- super("_mock");
- }
-
- @Override
- public long length() {
- return mLength;
- }
- }
-
- private static class MockConnectivityManager extends EmailConnectivityManager {
- public MockConnectivityManager(Context context, String name) {
- super(context, name);
- }
-
- @Override
- public void waitForConnectivity() {
- }
-
- @Override
- public boolean isAutoSyncAllowed() {
- return true;
- }
- }
-
- public void testCanPrefetchForAccount() {
- // First, test our "global" limits (based on free storage)
- // Mock storage @ 100 total and 26 available
- // Note that all file lengths in this test are in arbitrary units
- mMockDirectory.setTotalAndUsableSpace(100L, 26L);
- // Mock 2 accounts in total
- mAccountManagerStub.setNumberOfAccounts(2);
- // With 26% available, we should be ok to prefetch
- assertTrue(mService.canPrefetchForAccount(mAccount, mMockDirectory));
- // Now change to 24 available
- mMockDirectory.setTotalAndUsableSpace(100L, 24L);
- // With 24% available, we should NOT be ok to prefetch
- assertFalse(mService.canPrefetchForAccount(mAccount, mMockDirectory));
-
- // Now, test per-account storage
- // Mock storage @ 100 total and 50 available
- mMockDirectory.setTotalAndUsableSpace(100L, 50L);
- // Mock a file of length 12, but need to uncache previous amount first
- mService.mAttachmentStorageMap.remove(mAccountId);
- mMockDirectory.setFileLength(11);
- // We can prefetch since 11 < 50/4
- assertTrue(mService.canPrefetchForAccount(mAccount, mMockDirectory));
- // Mock a file of length 13, but need to uncache previous amount first
- mService.mAttachmentStorageMap.remove(mAccountId);
- mMockDirectory.setFileLength(13);
- // We can't prefetch since 13 > 50/4
- assertFalse(mService.canPrefetchForAccount(mAccount, mMockDirectory));
- }
-
- public void testCanPrefetchForAccountNoBackgroundDownload() {
- Account account = ProviderTestUtils.setupAccount("account2", false, mMockContext);
- account.mFlags &= ~Account.FLAGS_BACKGROUND_ATTACHMENTS;
- account.save(mMockContext);
-
- // First, test our "global" limits (based on free storage)
- // Mock storage @ 100 total and 26 available
- // Note that all file lengths in this test are in arbitrary units
- mMockDirectory.setTotalAndUsableSpace(100L, 26L);
- // Mock 2 accounts in total
- mAccountManagerStub.setNumberOfAccounts(2);
-
- // With 26% available, we should be ok to prefetch,
- // *but* bg download is disabled on the account.
- assertFalse(mService.canPrefetchForAccount(account, mMockDirectory));
- }
-}