Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Unified Diff: components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java

Issue 2627093009: Fetch Finch seed during restore (Closed)
Patch Set: Fix nits and tests Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
diff --git a/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c725103ddb9e6a058187904d2b46a9aa073cac0
--- /dev/null
+++ b/components/variations/android/junit/src/org/chromium/components/variations/firstrun/VariationsSeedFetcherTest.java
@@ -0,0 +1,132 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.variations.firstrun;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.SharedPreferences;
+import android.os.Looper;
+import android.util.Base64;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.base.ThreadUtils;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+
+/**
+ * Tests for VariationsSeedFetcher
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class VariationsSeedFetcherTest {
+ private HttpURLConnection mConnection;
+ private VariationsSeedFetcher mFetcher;
+ private SharedPreferences mPrefs;
+
+ @Before
+ public void setUp() throws IOException {
+ // Pretend we are not on the UI thread, since the class we are testing is supposed to run
+ // only on a background thread.
+ ThreadUtils.setUiThread(mock(Looper.class));
+ mFetcher = spy(VariationsSeedFetcher.get());
+ mConnection = mock(HttpURLConnection.class);
+ doReturn(mConnection).when(mFetcher).getServerConnection();
+ mPrefs = ContextUtils.getAppSharedPreferences();
+ mPrefs.edit().clear().apply();
+ }
+
+ @After
+ public void tearDown() {
+ ThreadUtils.setUiThread(null);
+ }
+
+ /**
+ * Test method for {@link VariationsSeedFetcher#fetchSeed()}.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testFetchSeed() throws IOException {
+ // Pretend we are on a background thread; set the UI thread looper to something other than
+ // the current thread.
+
+ when(mConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
+ when(mConnection.getHeaderField("X-Seed-Signature")).thenReturn("signature");
+ when(mConnection.getHeaderField("X-Country")).thenReturn("Nowhere Land");
+ when(mConnection.getHeaderField("Date")).thenReturn("A date");
+ when(mConnection.getHeaderField("IM")).thenReturn("gzip");
+ when(mConnection.getInputStream()).thenReturn(new ByteArrayInputStream("1234".getBytes()));
+
+ mFetcher.fetchSeed();
+
+ assertThat(mPrefs.getString(VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_SIGNATURE, ""),
+ equalTo("signature"));
+ assertThat(mPrefs.getString(VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_COUNTRY, ""),
+ equalTo("Nowhere Land"));
+ assertThat(mPrefs.getString(VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_DATE, ""),
+ equalTo("A date"));
+ assertTrue(mPrefs.getBoolean(
+ VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_IS_GZIP_COMPRESSED, false));
+ assertThat(mPrefs.getString(VariationsSeedBridge.VARIATIONS_FIRST_RUN_SEED_BASE64, ""),
+ equalTo(Base64.encodeToString("1234".getBytes(), Base64.NO_WRAP)));
+ }
+
+ /**
+ * Test method for {@link VariationsSeedFetcher#fetchSeed()} when no fetch is needed
+ */
+ @Test
+ public void testFetchSeed_noFetchNeeded() throws IOException {
+ mPrefs.edit().putBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, true).apply();
+
+ mFetcher.fetchSeed();
+
+ verify(mConnection, never()).connect();
+ }
+
+ /**
+ * Test method for {@link VariationsSeedFetcher#fetchSeed()} with a bad response
+ */
+ @Test
+ public void testFetchSeed_badResponse() throws IOException {
+ when(mConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NOT_FOUND);
+
+ mFetcher.fetchSeed();
+
+ assertTrue(mPrefs.getBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, false));
+ assertFalse(VariationsSeedBridge.hasJavaPref(ContextUtils.getApplicationContext()));
+ }
+
+ /**
+ * Test method for {@link VariationsSeedFetcher#fetchSeed()} with an exception when connecting
+ */
+ @Test
+ public void testFetchSeed_IOException() throws IOException {
+ doThrow(new IOException()).when(mConnection).connect();
+
+ mFetcher.fetchSeed();
+
+ assertTrue(mPrefs.getBoolean(VariationsSeedFetcher.VARIATIONS_INITIALIZED_PREF, false));
+ assertFalse(VariationsSeedBridge.hasJavaPref(ContextUtils.getApplicationContext()));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698