| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.omaha; | 5 package org.chromium.chrome.browser.omaha; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.content.Intent; | 8 import android.content.Intent; |
| 9 import android.support.test.InstrumentationRegistry; |
| 9 import android.support.test.filters.SmallTest; | 10 import android.support.test.filters.SmallTest; |
| 10 import android.test.InstrumentationTestCase; | 11 |
| 12 import org.junit.Assert; |
| 13 import org.junit.Test; |
| 14 import org.junit.runner.RunWith; |
| 11 | 15 |
| 12 import org.chromium.base.test.util.AdvancedMockContext; | 16 import org.chromium.base.test.util.AdvancedMockContext; |
| 13 import org.chromium.base.test.util.Feature; | 17 import org.chromium.base.test.util.Feature; |
| 18 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
| 14 | 19 |
| 15 /** Tests the ExponentialBackoffScheduler. */ | 20 /** Tests the ExponentialBackoffScheduler. */ |
| 16 public class ExponentialBackoffSchedulerTest extends InstrumentationTestCase { | 21 @RunWith(ChromeJUnit4ClassRunner.class) |
| 22 public class ExponentialBackoffSchedulerTest { |
| 17 private static final String INTENT_STRING = "schedulerIntent"; | 23 private static final String INTENT_STRING = "schedulerIntent"; |
| 18 private static final String PREFERENCE_NAME = "scheduler"; | 24 private static final String PREFERENCE_NAME = "scheduler"; |
| 19 private static final long BACKOFF_MS = 15000; | 25 private static final long BACKOFF_MS = 15000; |
| 20 private static final long MAX_MS = 1000000; | 26 private static final long MAX_MS = 1000000; |
| 21 | 27 |
| 22 /** | 28 /** |
| 23 * Checks that the correct number of failures are set/reset. | 29 * Checks that the correct number of failures are set/reset. |
| 24 */ | 30 */ |
| 31 @Test |
| 25 @SmallTest | 32 @SmallTest |
| 26 @Feature({"Omaha", "Sync"}) | 33 @Feature({"Omaha", "Sync"}) |
| 27 public void testExponentialBackoffSchedulerFailureSetting() { | 34 public void testExponentialBackoffSchedulerFailureSetting() { |
| 28 Context targetContext = getInstrumentation().getTargetContext(); | 35 Context targetContext = InstrumentationRegistry.getInstrumentation().get
TargetContext(); |
| 29 TestContext context = new TestContext(targetContext); | 36 TestContext context = new TestContext(targetContext); |
| 30 | 37 |
| 31 ExponentialBackoffScheduler writer = | 38 ExponentialBackoffScheduler writer = |
| 32 new ExponentialBackoffScheduler(PREFERENCE_NAME, context, BACKOF
F_MS, MAX_MS); | 39 new ExponentialBackoffScheduler(PREFERENCE_NAME, context, BACKOF
F_MS, MAX_MS); |
| 33 ExponentialBackoffScheduler reader = | 40 ExponentialBackoffScheduler reader = |
| 34 new ExponentialBackoffScheduler(PREFERENCE_NAME, context, BACKOF
F_MS, MAX_MS); | 41 new ExponentialBackoffScheduler(PREFERENCE_NAME, context, BACKOF
F_MS, MAX_MS); |
| 35 | 42 |
| 36 assertEquals("Expected no failures for freshly created class", 0, | 43 Assert.assertEquals( |
| 37 reader.getNumFailedAttempts()); | 44 "Expected no failures for freshly created class", 0, reader.getN
umFailedAttempts()); |
| 38 writer.increaseFailedAttempts(); | 45 writer.increaseFailedAttempts(); |
| 39 writer.increaseFailedAttempts(); | 46 writer.increaseFailedAttempts(); |
| 40 assertEquals("Expected 2 failures after 2 increments.", 2, reader.getNum
FailedAttempts()); | 47 Assert.assertEquals( |
| 48 "Expected 2 failures after 2 increments.", 2, reader.getNumFaile
dAttempts()); |
| 41 writer.resetFailedAttempts(); | 49 writer.resetFailedAttempts(); |
| 42 assertEquals("Expected 0 failures after reset.", 0, reader.getNumFailedA
ttempts()); | 50 Assert.assertEquals("Expected 0 failures after reset.", 0, reader.getNum
FailedAttempts()); |
| 43 } | 51 } |
| 44 | 52 |
| 45 /** | 53 /** |
| 46 * Check that the delay generated by the scheduler is within the correct ran
ge. | 54 * Check that the delay generated by the scheduler is within the correct ran
ge. |
| 47 */ | 55 */ |
| 56 @Test |
| 48 @SmallTest | 57 @SmallTest |
| 49 @Feature({"Omaha", "Sync"}) | 58 @Feature({"Omaha", "Sync"}) |
| 50 public void testExponentialBackoffSchedulerDelayCalculation() { | 59 public void testExponentialBackoffSchedulerDelayCalculation() { |
| 51 Context targetContext = getInstrumentation().getTargetContext(); | 60 Context targetContext = InstrumentationRegistry.getInstrumentation().get
TargetContext(); |
| 52 TestContext context = new TestContext(targetContext); | 61 TestContext context = new TestContext(targetContext); |
| 53 MockExponentialBackoffScheduler scheduler = | 62 MockExponentialBackoffScheduler scheduler = |
| 54 new MockExponentialBackoffScheduler(PREFERENCE_NAME, context, BA
CKOFF_MS, MAX_MS); | 63 new MockExponentialBackoffScheduler(PREFERENCE_NAME, context, BA
CKOFF_MS, MAX_MS); |
| 55 | 64 |
| 56 Intent intent = new Intent(INTENT_STRING); | 65 Intent intent = new Intent(INTENT_STRING); |
| 57 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); | 66 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); |
| 58 | 67 |
| 59 // With no failures, expect the base backoff delay. | 68 // With no failures, expect the base backoff delay. |
| 60 long delay = scheduler.getAlarmTimestamp() - scheduler.getCurrentTime(); | 69 long delay = scheduler.getAlarmTimestamp() - scheduler.getCurrentTime(); |
| 61 assertEquals("Expected delay of " + BACKOFF_MS + " milliseconds.", BACKO
FF_MS, | 70 Assert.assertEquals( |
| 62 delay); | 71 "Expected delay of " + BACKOFF_MS + " milliseconds.", BACKOFF_MS
, delay); |
| 63 | 72 |
| 64 // With two failures, expect a delay within [BACKOFF_MS, BACKOFF_MS * 2^
2]. | 73 // With two failures, expect a delay within [BACKOFF_MS, BACKOFF_MS * 2^
2]. |
| 65 scheduler.increaseFailedAttempts(); | 74 scheduler.increaseFailedAttempts(); |
| 66 scheduler.increaseFailedAttempts(); | 75 scheduler.increaseFailedAttempts(); |
| 67 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); | 76 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); |
| 68 | 77 |
| 69 delay = scheduler.getAlarmTimestamp() - scheduler.getCurrentTime(); | 78 delay = scheduler.getAlarmTimestamp() - scheduler.getCurrentTime(); |
| 70 final long minDelay = BACKOFF_MS; | 79 final long minDelay = BACKOFF_MS; |
| 71 final long maxDelay = BACKOFF_MS * (1 << scheduler.getNumFailedAttempts(
)); | 80 final long maxDelay = BACKOFF_MS * (1 << scheduler.getNumFailedAttempts(
)); |
| 72 assertTrue("Expected delay greater than the minimum.", delay >= minDelay
); | 81 Assert.assertTrue("Expected delay greater than the minimum.", delay >= m
inDelay); |
| 73 assertTrue("Expected delay within maximum of " + maxDelay, delay <= maxD
elay); | 82 Assert.assertTrue("Expected delay within maximum of " + maxDelay, delay
<= maxDelay); |
| 74 } | 83 } |
| 75 | 84 |
| 76 /** | 85 /** |
| 77 * Check that the alarm is being set by the class. | 86 * Check that the alarm is being set by the class. |
| 78 */ | 87 */ |
| 88 @Test |
| 79 @SmallTest | 89 @SmallTest |
| 80 @Feature({"Omaha", "Sync"}) | 90 @Feature({"Omaha", "Sync"}) |
| 81 public void testExponentialBackoffSchedulerAlarmCreation() { | 91 public void testExponentialBackoffSchedulerAlarmCreation() { |
| 82 Context targetContext = getInstrumentation().getTargetContext(); | 92 Context targetContext = InstrumentationRegistry.getInstrumentation().get
TargetContext(); |
| 83 TestContext context = new TestContext(targetContext); | 93 TestContext context = new TestContext(targetContext); |
| 84 | 94 |
| 85 MockExponentialBackoffScheduler scheduler = | 95 MockExponentialBackoffScheduler scheduler = |
| 86 new MockExponentialBackoffScheduler(PREFERENCE_NAME, context, BA
CKOFF_MS, MAX_MS); | 96 new MockExponentialBackoffScheduler(PREFERENCE_NAME, context, BA
CKOFF_MS, MAX_MS); |
| 87 | 97 |
| 88 Intent intent = new Intent(INTENT_STRING); | 98 Intent intent = new Intent(INTENT_STRING); |
| 89 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); | 99 scheduler.createAlarm(intent, scheduler.calculateNextTimestamp()); |
| 90 assertTrue("Never requested the alarm manager.", context.mRequestedAlarm
Manager); | 100 Assert.assertTrue("Never requested the alarm manager.", context.mRequest
edAlarmManager); |
| 91 assertTrue("Never received a call to set the alarm.", scheduler.getAlarm
WasSet()); | 101 Assert.assertTrue("Never received a call to set the alarm.", scheduler.g
etAlarmWasSet()); |
| 92 } | 102 } |
| 93 | 103 |
| 94 /** | 104 /** |
| 95 * Ensures that the AlarmManager is the only service requested. | 105 * Ensures that the AlarmManager is the only service requested. |
| 96 */ | 106 */ |
| 97 private static class TestContext extends AdvancedMockContext { | 107 private static class TestContext extends AdvancedMockContext { |
| 98 public boolean mRequestedAlarmManager; | 108 public boolean mRequestedAlarmManager; |
| 99 | 109 |
| 100 public TestContext(Context context) { | 110 public TestContext(Context context) { |
| 101 super(context); | 111 super(context); |
| 102 } | 112 } |
| 103 | 113 |
| 104 /** | 114 /** |
| 105 * Checks that we're requesting the AlarmManager. | 115 * Checks that we're requesting the AlarmManager. |
| 106 * @param name Name of the service. Should be the AlarmManager's servic
e name. | 116 * @param name Name of the service. Should be the AlarmManager's servic
e name. |
| 107 * @return null since we can't create an AlarmManager. | 117 * @return null since we can't create an AlarmManager. |
| 108 */ | 118 */ |
| 109 @Override | 119 @Override |
| 110 public Object getSystemService(final String name) { | 120 public Object getSystemService(final String name) { |
| 111 assertTrue("Requested service other than AlarmManager.", | 121 Assert.assertTrue("Requested service other than AlarmManager.", |
| 112 Context.ALARM_SERVICE.equals(name)); | 122 Context.ALARM_SERVICE.equals(name)); |
| 113 mRequestedAlarmManager = true; | 123 mRequestedAlarmManager = true; |
| 114 return super.getSystemService(name); | 124 return super.getSystemService(name); |
| 115 } | 125 } |
| 116 } | 126 } |
| 117 } | 127 } |
| OLD | NEW |