1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 package org.mozilla.gecko.sync.repositories.uploaders; 5 6 import org.junit.Before; 7 import org.junit.Test; 8 import org.junit.runner.RunWith; 9 import org.mozilla.gecko.background.testhelpers.TestRunner; 10 11 import static org.junit.Assert.*; 12 13 @RunWith(TestRunner.class) 14 public class PayloadTest { 15 private Payload payload; 16 private long byteLimit = 1024; 17 private long recordLimit = 5; 18 private Object lock = new Object(); 19 20 @Before setUp()21 public void setUp() throws Exception { 22 payload = new Payload(lock, byteLimit, recordLimit); 23 } 24 25 @Test testByteLimits()26 public void testByteLimits() { 27 assertTrue(payload.canFit(0)); 28 29 // Should just fit 30 assertTrue(payload.canFit(byteLimit - BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT)); 31 32 // Can't fit a record due to payload overhead. 33 assertFalse(payload.canFit(byteLimit)); 34 35 assertFalse(payload.canFit(byteLimit + BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT)); 36 assertFalse(payload.canFit(byteLimit * 1000)); 37 38 long recordDelta = byteLimit / 2; 39 assertFalse(payload.addAndEstimateIfFull(recordDelta, new byte[0], null)); 40 41 // Record delta shouldn't fit due to payload overhead. 42 assertFalse(payload.canFit(recordDelta)); 43 } 44 45 @Test testCountLimits()46 public void testCountLimits() { 47 byte[] bytes = new byte[0]; 48 49 // Our record limit is 5, let's add 4. 50 assertFalse(payload.addAndEstimateIfFull(1, bytes, null)); 51 assertFalse(payload.addAndEstimateIfFull(1, bytes, null)); 52 assertFalse(payload.addAndEstimateIfFull(1, bytes, null)); 53 assertFalse(payload.addAndEstimateIfFull(1, bytes, null)); 54 55 // 5th record still fits in 56 assertTrue(payload.canFit(1)); 57 58 // Add the 5th record 59 assertTrue(payload.addAndEstimateIfFull(1, bytes, null)); 60 61 // 6th record won't fit 62 assertFalse(payload.canFit(1)); 63 } 64 65 @Test testAdd()66 public void testAdd() { 67 assertTrue(payload.getByteCount() == 2 * BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT); 68 assertTrue(payload.getRecordCount() == 0); 69 assertTrue(payload.isEmpty()); 70 assertTrue(payload.getRecordsBuffer().isEmpty()); 71 assertTrue(payload.getRecordGuidsBuffer().isEmpty()); 72 73 try { 74 payload.addAndEstimateIfFull(1024); 75 fail("Simple add is not supported"); 76 } catch (UnsupportedOperationException e) { 77 assertTrue(true); 78 } 79 80 byte[] recordBytes1 = new byte[100]; 81 assertFalse(payload.addAndEstimateIfFull(1, recordBytes1, "guid1")); 82 83 assertTrue(payload.getRecordsBuffer().size() == 1); 84 assertTrue(payload.getRecordGuidsBuffer().size() == 1); 85 assertTrue(payload.getRecordGuidsBuffer().contains("guid1")); 86 assertTrue(payload.getRecordsBuffer().contains(recordBytes1)); 87 88 assertTrue(payload.getByteCount() == (1 + BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT)); 89 assertTrue(payload.getRecordCount() == 1); 90 91 assertFalse(payload.isEmpty()); 92 93 assertFalse(payload.addAndEstimateIfFull(1, recordBytes1, "guid2")); 94 assertFalse(payload.addAndEstimateIfFull(1, recordBytes1, "guid3")); 95 assertFalse(payload.addAndEstimateIfFull(1, recordBytes1, "guid4")); 96 97 assertTrue(payload.getByteCount() == (4 + BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT)); 98 assertTrue(payload.getRecordCount() == 4); 99 100 assertTrue(payload.addAndEstimateIfFull(1, recordBytes1, "guid5")); 101 102 try { 103 assertTrue(payload.addAndEstimateIfFull(1, recordBytes1, "guid6")); 104 fail("Payload should not let us insert records that won't fit"); 105 } catch (IllegalStateException e) { 106 assertTrue(true); 107 } 108 } 109 110 @Test testReset()111 public void testReset() { 112 assertTrue(payload.getByteCount() == 2 * BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT); 113 assertTrue(payload.getRecordCount() == 0); 114 assertTrue(payload.getRecordsBuffer().isEmpty()); 115 assertTrue(payload.getRecordGuidsBuffer().isEmpty()); 116 assertTrue(payload.isEmpty()); 117 118 // Shouldn't throw even if already empty 119 payload.reset(); 120 assertTrue(payload.getByteCount() == 2 * BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT); 121 assertTrue(payload.getRecordCount() == 0); 122 assertTrue(payload.getRecordsBuffer().isEmpty()); 123 assertTrue(payload.getRecordGuidsBuffer().isEmpty()); 124 assertTrue(payload.isEmpty()); 125 126 byte[] recordBytes1 = new byte[100]; 127 assertFalse(payload.addAndEstimateIfFull(1, recordBytes1, "guid1")); 128 assertFalse(payload.isEmpty()); 129 payload.reset(); 130 131 assertTrue(payload.getByteCount() == 2 * BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT); 132 assertTrue(payload.getRecordCount() == 0); 133 assertTrue(payload.getRecordsBuffer().isEmpty()); 134 assertTrue(payload.getRecordGuidsBuffer().isEmpty()); 135 assertTrue(payload.isEmpty()); 136 } 137 }