Skip to content

Commit 88347e1

Browse files
committed
Added tests to reason about backward compatibility
1 parent ab66fe5 commit 88347e1

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed

transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/persistence/SchemaManager.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,12 @@ private void ensureConfigured(SQLiteDatabase db) {
142142

143143
@Override
144144
public void onCreate(SQLiteDatabase db) {
145+
onCreate(db, schemaVersion);
146+
}
147+
148+
private void onCreate(SQLiteDatabase db, int version) {
145149
ensureConfigured(db);
146-
upgrade(db, 0, schemaVersion);
150+
upgrade(db, 0, version);
147151
}
148152

149153
@Override
@@ -159,7 +163,7 @@ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
159163
db.execSQL(DROP_CONTEXTS_SQL);
160164
// Indices are dropped automatically when the tables are dropped
161165

162-
onCreate(db);
166+
onCreate(db, newVersion);
163167
}
164168

165169
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2019 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
package com.google.android.datatransport.runtime.scheduling.persistence;
15+
16+
import static com.google.android.datatransport.runtime.scheduling.persistence.SchemaManager.DB_NAME;
17+
import static com.google.android.datatransport.runtime.scheduling.persistence.SchemaManager.SCHEMA_VERSION;
18+
import static com.google.common.truth.Truth.assertThat;
19+
20+
import android.content.ContentValues;
21+
import android.database.sqlite.SQLiteDatabase;
22+
import androidx.test.core.app.ApplicationProvider;
23+
import com.google.android.datatransport.Encoding;
24+
import com.google.android.datatransport.Priority;
25+
import com.google.android.datatransport.runtime.EncodedPayload;
26+
import com.google.android.datatransport.runtime.EventInternal;
27+
import com.google.android.datatransport.runtime.TransportContext;
28+
import com.google.android.datatransport.runtime.time.TestClock;
29+
import com.google.android.datatransport.runtime.time.UptimeClock;
30+
import com.google.android.datatransport.runtime.util.PriorityMapping;
31+
import java.nio.charset.Charset;
32+
import java.util.ArrayList;
33+
import java.util.Arrays;
34+
import java.util.Collection;
35+
import java.util.Map;
36+
import org.junit.Assert;
37+
import org.junit.Test;
38+
import org.junit.runner.RunWith;
39+
import org.robolectric.ParameterizedRobolectricTestRunner;
40+
import org.robolectric.RobolectricTestRunner;
41+
42+
@RunWith(ParameterizedRobolectricTestRunner.class)
43+
public class SchemaManagerMigrationTest {
44+
private final int toVersion;
45+
private final int fromVersion;
46+
47+
@ParameterizedRobolectricTestRunner.Parameters(name = "lowVersion = {0}, highVersion = {1}")
48+
public static Collection<Object[]> data() {
49+
Collection<Object[]> params = new ArrayList<>();
50+
for(int fromVersion = 1 ; fromVersion < SCHEMA_VERSION; fromVersion ++) {
51+
for (int toVersion = fromVersion + 1; toVersion <= SCHEMA_VERSION; toVersion++) {
52+
params.add(new Object[]{fromVersion, toVersion});
53+
}
54+
}
55+
return params;
56+
}
57+
58+
public SchemaManagerMigrationTest(int fromVersion, int toVersion) {
59+
this.fromVersion = fromVersion;
60+
this.toVersion = toVersion;
61+
}
62+
63+
@Test
64+
public void upgrade_migratesSuccessfully() {
65+
SchemaManager schemaManager =
66+
new SchemaManager(ApplicationProvider.getApplicationContext(), DB_NAME, fromVersion);
67+
schemaManager.onUpgrade(schemaManager.getWritableDatabase(), fromVersion, toVersion);
68+
}
69+
70+
@Test
71+
public void downgrade_migratesSuccessfully() {
72+
SchemaManager schemaManager =
73+
new SchemaManager(ApplicationProvider.getApplicationContext(), DB_NAME, toVersion);
74+
schemaManager.onDowngrade(schemaManager.getWritableDatabase(), toVersion, fromVersion);
75+
}
76+
77+
@Test
78+
public void downgrade_upgrade_migratesSuccessfully() {
79+
SchemaManager schemaManager =
80+
new SchemaManager(ApplicationProvider.getApplicationContext(), DB_NAME, toVersion);
81+
82+
schemaManager.onDowngrade(schemaManager.getWritableDatabase(), toVersion, fromVersion);
83+
schemaManager.onUpgrade(schemaManager.getWritableDatabase(), fromVersion, toVersion);
84+
}
85+
}

0 commit comments

Comments
 (0)