mobile/android/tests/background/junit3/src/healthreport/upload/TestAndroidSubmissionClient.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 package org.mozilla.gecko.background.healthreport.upload;
     6 import java.util.Collection;
     8 import org.mozilla.gecko.background.bagheera.BagheeraRequestDelegate;
     9 import org.mozilla.gecko.background.healthreport.Environment;
    10 import org.mozilla.gecko.background.healthreport.HealthReportStorage;
    11 import org.mozilla.gecko.background.healthreport.HealthReportDatabaseStorage;
    12 import org.mozilla.gecko.background.healthreport.MockHealthReportDatabaseStorage.PrepopulatedMockHealthReportDatabaseStorage;
    13 import org.mozilla.gecko.background.healthreport.MockProfileInformationCache;
    14 import org.mozilla.gecko.background.healthreport.ProfileInformationCache;
    15 import org.mozilla.gecko.background.healthreport.upload.AndroidSubmissionClient;
    16 import org.mozilla.gecko.background.healthreport.upload.AndroidSubmissionClient.SubmissionsFieldName;
    17 import org.mozilla.gecko.background.helpers.FakeProfileTestCase;
    18 import org.mozilla.gecko.background.testhelpers.StubDelegate;
    20 import android.content.ContentProviderClient;
    21 import android.content.Context;
    22 import android.content.SharedPreferences;
    23 import org.json.JSONException;
    24 import org.json.JSONObject;
    26 public class TestAndroidSubmissionClient extends FakeProfileTestCase {
    27   public static class MockAndroidSubmissionClient extends AndroidSubmissionClient {
    28     protected final PrepopulatedMockHealthReportDatabaseStorage storage;
    30     public SubmissionState submissionState = SubmissionState.SUCCESS;
    31     public DocumentStatus documentStatus = DocumentStatus.VALID;
    32     public boolean hasUploadBeenRequested = true;
    34     public MockAndroidSubmissionClient(final Context context, final SharedPreferences sharedPrefs,
    35         final PrepopulatedMockHealthReportDatabaseStorage storage) {
    36       super(context, sharedPrefs, "profilePath");
    37       this.storage = storage;
    38     }
    40     @Override
    41     public HealthReportDatabaseStorage getStorage(final ContentProviderClient client) {
    42       return storage;
    43     }
    45     @Override
    46     public boolean hasUploadBeenRequested() {
    47       return hasUploadBeenRequested;
    48     }
    50     @Override
    51     protected void uploadPayload(String id, String payload, Collection<String> oldIds,
    52         BagheeraRequestDelegate delegate) {
    53       switch (submissionState) {
    54       case SUCCESS:
    55         delegate.handleSuccess(0, null, id, null);
    56         break;
    58       case FAILURE:
    59         delegate.handleFailure(0, null, null);
    60         break;
    62       case ERROR:
    63         delegate.handleError(null);
    64         break;
    66       default:
    67         throw new IllegalStateException("Unknown submissionState, " + submissionState);
    68       }
    69     }
    71     @Override
    72     public SubmissionsTracker getSubmissionsTracker(final HealthReportStorage storage,
    73         final long localTime, final boolean hasUploadBeenRequested) {
    74       return new MockSubmissionsTracker(storage, localTime, hasUploadBeenRequested);
    75     }
    77     public class MockSubmissionsTracker extends SubmissionsTracker {
    78       public MockSubmissionsTracker (final HealthReportStorage storage, final long localTime,
    79           final boolean hasUploadBeenRequested) {
    80         super(storage, localTime, hasUploadBeenRequested);
    81       }
    83       @Override
    84       public ProfileInformationCache getProfileInformationCache() {
    85         final MockProfileInformationCache cache = new MockProfileInformationCache(profilePath);
    86         cache.setInitialized(true); // Will throw errors otherwise.
    87         return cache;
    88       }
    90       @Override
    91       public TrackingGenerator getGenerator() {
    92         return new MockTrackingGenerator();
    93       }
    95       public class MockTrackingGenerator extends TrackingGenerator {
    96         @Override
    97         public JSONObject generateDocument(final long localTime, final long last,
    98             final String profilePath) throws JSONException {
    99           switch (documentStatus) {
   100           case VALID:
   101             return new JSONObject(); // Beyond == null, we don't check for valid FHR documents.
   103           case NULL:
   104             // The overridden method should return null since we return a null has for the current
   105             // Environment.
   106             return super.generateDocument(localTime, last, profilePath);
   108           case EXCEPTION:
   109             throw new IllegalStateException("Intended Exception");
   111           default:
   112             throw new IllegalStateException("Unintended Exception");
   113           }
   114         }
   116         // Used in super.generateDocument, where a null document is returned if getHash returns null
   117         @Override
   118         public Environment getCurrentEnvironment() {
   119           return new Environment() {
   120             @Override
   121             public int register() {
   122               return 0;
   123             }
   125             @Override
   126             public String getHash() {
   127               return null;
   128             }
   129           };
   130         }
   131       }
   132     }
   133   }
   135   public final SubmissionsFieldName[] SUBMISSIONS_STATUS_FIELD_NAMES = new SubmissionsFieldName[] {
   136     SubmissionsFieldName.SUCCESS,
   137     SubmissionsFieldName.CLIENT_FAILURE,
   138     SubmissionsFieldName.TRANSPORT_FAILURE,
   139     SubmissionsFieldName.SERVER_FAILURE
   140   };
   142   public static enum SubmissionState { SUCCESS, FAILURE, ERROR }
   143   public static enum DocumentStatus { VALID, NULL, EXCEPTION };
   145   public StubDelegate stubDelegate;
   146   public PrepopulatedMockHealthReportDatabaseStorage storage;
   147   public MockAndroidSubmissionClient client;
   149   public void setUp() throws Exception {
   150     super.setUp();
   151     stubDelegate = new StubDelegate();
   152     storage = new PrepopulatedMockHealthReportDatabaseStorage(context, fakeProfileDirectory);
   153     client = new MockAndroidSubmissionClient(context, getSharedPreferences(), storage);
   154   }
   156   public int getSubmissionsCount(final SubmissionsFieldName fieldName) {
   157     final int id = fieldName.getID(storage);
   158     return storage.getIntFromQuery("SELECT COUNT(*) FROM events WHERE field = " + id, null);
   159   }
   161   public void testUploadSubmissionsFirstAttemptCount() throws Exception {
   162     client.hasUploadBeenRequested = false;
   163     client.upload(storage.now, null, null, stubDelegate);
   164     assertEquals(1, getSubmissionsCount(SubmissionsFieldName.FIRST_ATTEMPT));
   165     assertEquals(0, getSubmissionsCount(SubmissionsFieldName.CONTINUATION_ATTEMPT));
   166   }
   168   public void testUploadSubmissionsContinuationAttemptCount() throws Exception {
   169     client.upload(storage.now, null, null, stubDelegate);
   170     assertEquals(0, getSubmissionsCount(SubmissionsFieldName.FIRST_ATTEMPT));
   171     assertEquals(1, getSubmissionsCount(SubmissionsFieldName.CONTINUATION_ATTEMPT));
   172   }
   174   /**
   175    * Asserts that the given field name has a count of 1 and all other status (success and failures)
   176    * have a count of 0.
   177    */
   178   public void assertStatusCount(final SubmissionsFieldName fieldName) {
   179     for (SubmissionsFieldName name : SUBMISSIONS_STATUS_FIELD_NAMES) {
   180       if (name == fieldName) {
   181         assertEquals(1, getSubmissionsCount(name));
   182       } else {
   183         assertEquals(0, getSubmissionsCount(name));
   184       }
   185     }
   186   }
   188   public void testUploadSubmissionsSuccessCount() throws Exception {
   189     client.upload(storage.now, null, null, stubDelegate);
   190     assertStatusCount(SubmissionsFieldName.SUCCESS);
   191   }
   193   public void testUploadNullDocumentSubmissionsFailureCount() throws Exception {
   194     client.documentStatus = DocumentStatus.NULL;
   195     client.upload(storage.now, null, null, stubDelegate);
   196     assertStatusCount(SubmissionsFieldName.CLIENT_FAILURE);
   197   }
   199   public void testUploadDocumentGenerationExceptionSubmissionsFailureCount() throws Exception {
   200     client.documentStatus = DocumentStatus.EXCEPTION;
   201     client.upload(storage.now, null, null, stubDelegate);
   202     assertStatusCount(SubmissionsFieldName.CLIENT_FAILURE);
   203   }
   204 }

mercurial