replicant-packages_apps_Email/tests/src/com/android/email/service/AttachmentServiceTests.java

391 lines
15 KiB
Java

/*
* Copyright (C) 2014 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.test.suitebuilder.annotation.SmallTest;
import com.android.emailcommon.provider.EmailContent;
import junit.framework.TestCase;
/**
* Tests of the AttachmentService
*
* You can run this entire test case with:
* runtest -c com.android.email.service.AttachmentServiceTests email
*/
@SmallTest
public class AttachmentServiceTests extends TestCase {
public void testDownloadRequestIsEquals() {
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
final AttachmentService.DownloadRequest dr2 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 2);
assertTrue(dr.equals(dr));
assertFalse(dr.equals(dr2));
}
public void testDownloadQueueEmptyQueue() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
assertEquals(0, dq.getSize());
assertTrue(dq.isEmpty());
}
public void testDownloadQueueAddRequest() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
final boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
}
public void testDownloadQueueAddRequestNull() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final boolean result = dq.addRequest(null);
assertFalse(result);
assertEquals(0, dq.getSize());
assertTrue(dq.isEmpty());
}
public void testDownloadQueueAddRequestExisting() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
// Now try to add the same one again. The queue should remain the same size.
result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
}
public void testDownloadQueueRemoveRequest() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
// Now remove the request and check the status of the queue
result = dq.removeRequest(dr);
assertTrue(result);
// The queue should be empty.
assertEquals(0, dq.getSize());
assertTrue(dq.isEmpty());
}
public void testDownloadQueueRemoveRequestNull() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(dq.getSize(), 1);
assertFalse(dq.isEmpty());
// Now remove the request and check the status of the queue
result = dq.removeRequest(null);
assertTrue(result);
// The queue should still have 1.
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
}
public void testDownloadQueueRemoveRequestDoesNotExist() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
// Generate a new request and try to remove it.
result = dq.removeRequest(new AttachmentService.DownloadRequest(
AttachmentService.PRIORITY_FOREGROUND, 2));
assertFalse(result);
// The queue should still have 1.
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
}
public void testDownloadQueueFindRequestById() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
final boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest drResult = dq.findRequestById(1);
assertNotNull(drResult);
// Now let's make sure that these objects are the same
assertEquals(dr, drResult);
}
public void testDownloadQueueFindRequestByIdInvalidId() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
final boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest drResult = dq.findRequestById(-1);
assertNull(drResult);
}
public void testDownloadQueueFindRequestByIdUnknownId() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
final boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest drResult = dq.findRequestById(5);
assertNull(drResult);
}
/**
* This is just to test the FIFOness of our queue. We test priorities in a latter
* test case.
*/
public void testDownloadQueueGetNextRequest() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest dr2 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_SEND_MAIL, 2);
result = dq.addRequest(dr2);
assertTrue(result);
final AttachmentService.DownloadRequest dr3 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_BACKGROUND, 3);
result = dq.addRequest(dr3);
assertTrue(result);
assertEquals(3, dq.getSize());
assertFalse(dq.isEmpty());
AttachmentService.DownloadRequest drResult = dq.getNextRequest();
assertEquals(dr, drResult);
assertEquals(2, dq.getSize());
assertFalse(dq.isEmpty());
drResult = dq.getNextRequest();
assertEquals(dr2, drResult);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
drResult = dq.getNextRequest();
assertEquals(dr3, drResult);
assertEquals(0, dq.getSize());
assertTrue(dq.isEmpty());
}
public void testDownloadQueueGetNextRequestEmptyQueue() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
AttachmentService.DownloadRequest drResult = dq.getNextRequest();
assertNull(drResult);
}
public void testDownloadQueueSizeReporting() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
// Start adding some download request objects, note that the empty queue case has been
// tested in above.
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
// Add the first DownloadRequest to the queue
boolean result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
// Add the same one again, the size should be the same.
result = dq.addRequest(dr);
assertTrue(result);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
final AttachmentService.DownloadRequest dr2 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 2);
// Add another DownloadRequest
result = dq.addRequest(dr2);
assertTrue(result);
assertEquals(2, dq.getSize());
assertFalse(dq.isEmpty());
final AttachmentService.DownloadRequest dr3 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 3);
result = dq.addRequest(dr3);
assertTrue(result);
assertEquals(3, dq.getSize());
assertFalse(dq.isEmpty());
// Remove a request and check new size.
AttachmentService.DownloadRequest returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
assertEquals(2, dq.getSize());
assertFalse(dq.isEmpty());
final AttachmentService.DownloadRequest dr4 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 4);
// Adding the last DownloadRequest
result = dq.addRequest(dr4);
assertTrue(result);
assertEquals(3, dq.getSize());
assertFalse(dq.isEmpty());
// Start removing all the final requests and check sizes.
returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
assertEquals(2, dq.getSize());
assertFalse(dq.isEmpty());
returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
assertEquals(1, dq.getSize());
assertFalse(dq.isEmpty());
returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
assertEquals(0, dq.getSize());
assertTrue(dq.isEmpty());
}
/**
* Insert DownloadRequest obje cts in a random priority sequence and make sure that
* The highest priority items come out of the queue first.
*/
public void testDownloadQueueTestPriority() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
// Start adding some download request objects, note that the empty queue case has been
// tested in above.
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest dr2 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_BACKGROUND, 2);
result = dq.addRequest(dr2);
assertTrue(result);
final AttachmentService.DownloadRequest dr3 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_SEND_MAIL, 3);
result = dq.addRequest(dr3);
assertTrue(result);
final AttachmentService.DownloadRequest dr4 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_SEND_MAIL, 4);
result = dq.addRequest(dr4);
assertTrue(result);
final AttachmentService.DownloadRequest dr5 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 5);
result = dq.addRequest(dr5);
assertTrue(result);
final AttachmentService.DownloadRequest dr6 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_BACKGROUND, 6);
result = dq.addRequest(dr6);
assertTrue(result);
// Set the priority to the highest possible value and everything show be
// in descending order.
int lastPriority = AttachmentService.PRIORITY_HIGHEST;
for (int i = 0; i < dq.getSize(); i++){
final AttachmentService.DownloadRequest returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
final int requestPriority = returnRequest.mPriority;
// The values should be going up or staying the same...indicating a lower priority
assertTrue(requestPriority >= lastPriority);
lastPriority = requestPriority;
}
}
/**
* Insert DownloadRequest objects in a random time based sequence and make sure that
* The oldest requests come out of the queue first.
*/
public void testDownloadQueueTestDate() {
final AttachmentService.DownloadQueue dq = new AttachmentService.DownloadQueue();
// Start adding some unique attachments but with the same priority
final AttachmentService.DownloadRequest dr =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 1);
boolean result = dq.addRequest(dr);
assertTrue(result);
final AttachmentService.DownloadRequest dr2 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 2);
result = dq.addRequest(dr2);
assertTrue(result);
final AttachmentService.DownloadRequest dr3 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 3);
result = dq.addRequest(dr3);
assertTrue(result);
final AttachmentService.DownloadRequest dr4 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 4);
result = dq.addRequest(dr4);
assertTrue(result);
final AttachmentService.DownloadRequest dr5 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 5);
result = dq.addRequest(dr5);
assertTrue(result);
final AttachmentService.DownloadRequest dr6 =
new AttachmentService.DownloadRequest(AttachmentService.PRIORITY_FOREGROUND, 6);
result = dq.addRequest(dr6);
assertTrue(result);
// The output should return requests in increasing time.
long lastTime = 0;
for (int i = 0; i < dq.getSize(); i++){
final AttachmentService.DownloadRequest returnRequest = dq.getNextRequest();
assertNotNull(returnRequest);
final long requestTime = returnRequest.mTime;
// The time should be going up.
assertTrue(requestTime >= lastTime);
lastTime = requestTime;
}
}
}