Commit 611a195c authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

SyncCustomizationFragmentTest: don't use PDM.addServerCreditCardForTest

PersonalDataManager.addServerCreditCardForTest adds a server credit card
directly to PDM's cache, without going through Sync. That creates an
inconsistent state, which makes the tests fragile to unrelated changes
(e.g. https://crrev.com/c/1251041).
Instead, this CL uses FakeServer::SetWalletData, which needed to be
plumbed through to Java.

Bug: 889941
Change-Id: Ie70a2f8ca311d36267c9aa16dca9363b60b4ee2c
Reviewed-on: https://chromium-review.googlesource.com/1255062Reviewed-by: default avatarMikel Astiz <mastiz@chromium.org>
Commit-Queue: Marc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595764}
parent 6a9a1a24
......@@ -223,6 +223,27 @@ public class FakeServerHelper {
});
}
/**
* Sets the Wallet card and address data to be served in following GetUpdates requests. Note
* that (opposed to the native implementation) this currently only accepts a single entity,
* because that's all we needed so far.
*
* @param entity the SyncEntity to serve for Wallet.
*/
public void setWalletData(final SyncEntity entity) {
checkFakeServerInitialized("useFakeServer must be called before data injection.");
ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Void>() {
@Override
public Void call() {
// The protocol buffer is serialized as a byte array because it can be easily
// deserialized from this format in native code.
nativeSetWalletData(
mNativeFakeServerHelperAndroid, sNativeFakeServer, entity.toByteArray());
return null;
}
});
}
/**
* Modify the specifics of an entity on the fake Sync server.
*
......@@ -400,6 +421,8 @@ public class FakeServerHelper {
private native void nativeInjectUniqueClientEntity(
long nativeFakeServerHelperAndroid, long nativeFakeServer, String name,
byte[] serializedEntitySpecifics);
private native void nativeSetWalletData(
long nativeFakeServerHelperAndroid, long nativeFakeServer, byte[] serializedEntity);
private native void nativeModifyEntitySpecifics(long nativeFakeServerHelperAndroid,
long nativeFakeServer, String id, byte[] serializedEntitySpecifics);
private native void nativeInjectBookmarkEntity(
......
......@@ -31,7 +31,6 @@ import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.autofill.CardType;
import org.chromium.chrome.browser.autofill.PersonalDataManager;
import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
import org.chromium.chrome.browser.preferences.Preferences;
......@@ -45,6 +44,10 @@ import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
import org.chromium.components.sync.AndroidSyncSettings;
import org.chromium.components.sync.ModelType;
import org.chromium.components.sync.PassphraseType;
import org.chromium.components.sync.protocol.AutofillWalletSpecifics;
import org.chromium.components.sync.protocol.EntitySpecifics;
import org.chromium.components.sync.protocol.SyncEntity;
import org.chromium.components.sync.protocol.WalletMaskedCreditCard;
import java.util.Collection;
import java.util.Collections;
......@@ -766,13 +769,31 @@ public class SyncCustomizationFragmentTest {
}
private void addServerAutofillCreditCard() {
ThreadUtils.runOnUiThreadBlocking(() -> {
boolean isLocal = false;
PersonalDataManager.getInstance().addServerCreditCardForTest(new CreditCard("",
"https://example.com", isLocal, false, "Jon Doe", "4111111111111111",
"1111", "11", "20", "visa", 0, CardType.UNKNOWN, "" /* billingAddressId */,
"025eb937c022489eb8dc78cbaa969218" /* serverId */));
});
final String serverId = "025eb937c022489eb8dc78cbaa969218";
WalletMaskedCreditCard card =
WalletMaskedCreditCard.newBuilder()
.setId(serverId)
.setStatus(WalletMaskedCreditCard.WalletCardStatus.VALID)
.setNameOnCard("Jon Doe")
.setType(WalletMaskedCreditCard.WalletCardType.UNKNOWN)
.setLastFour("1111")
.setExpMonth(11)
.setExpYear(2020)
.build();
AutofillWalletSpecifics wallet_specifics =
AutofillWalletSpecifics.newBuilder()
.setType(AutofillWalletSpecifics.WalletInfoType.MASKED_CREDIT_CARD)
.setMaskedCard(card)
.build();
EntitySpecifics specifics =
EntitySpecifics.newBuilder().setAutofillWallet(wallet_specifics).build();
SyncEntity entity = SyncEntity.newBuilder()
.setName(serverId)
.setIdString(serverId)
.setSpecifics(specifics)
.build();
mSyncTestRule.getFakeServerHelper().setWalletData(entity);
SyncTestUtil.triggerSyncAndWaitForCompletion();
}
private boolean hasServerAutofillCreditCards() {
......
......@@ -154,6 +154,20 @@ void FakeServerHelperAndroid::InjectUniqueClientEntity(
/*creation_time=*/now, /*last_modified_time=*/now));
}
void FakeServerHelperAndroid::SetWalletData(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong fake_server,
const base::android::JavaParamRef<jbyteArray>& serialized_entity) {
fake_server::FakeServer* fake_server_ptr =
reinterpret_cast<fake_server::FakeServer*>(fake_server);
sync_pb::SyncEntity entity;
DeserializeEntity(env, serialized_entity, &entity);
fake_server_ptr->SetWalletData({entity});
}
void FakeServerHelperAndroid::ModifyEntitySpecifics(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
......@@ -171,6 +185,17 @@ void FakeServerHelperAndroid::ModifyEntitySpecifics(
base::android::ConvertJavaStringToUTF8(env, id), entity_specifics);
}
void FakeServerHelperAndroid::DeserializeEntity(JNIEnv* env,
jbyteArray serialized_entity,
sync_pb::SyncEntity* entity) {
int bytes_length = env->GetArrayLength(serialized_entity);
jbyte* bytes = env->GetByteArrayElements(serialized_entity, nullptr);
std::string string(reinterpret_cast<char*>(bytes), bytes_length);
if (!entity->ParseFromString(string))
NOTREACHED() << "Could not deserialize Entity";
}
void FakeServerHelperAndroid::DeserializeEntitySpecifics(
JNIEnv* env,
jbyteArray serialized_entity_specifics,
......
......@@ -70,6 +70,14 @@ class FakeServerHelperAndroid {
const base::android::JavaParamRef<jbyteArray>&
serialized_entity_specifics);
// Sets the Wallet card and address data to be served in following GetUpdates
// requests.
void SetWalletData(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong fake_server,
const base::android::JavaParamRef<jbyteArray>& serialized_entity);
// Modifies the entity with |id| on |fake_server|.
void ModifyEntitySpecifics(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
......@@ -137,6 +145,11 @@ class FakeServerHelperAndroid {
private:
virtual ~FakeServerHelperAndroid();
// Deserializes |serialized_entity| into |entity|.
void DeserializeEntity(JNIEnv* env,
jbyteArray serialized_entity,
sync_pb::SyncEntity* entity);
// Deserializes |serialized_entity_specifics| into |entity_specifics|.
void DeserializeEntitySpecifics(JNIEnv* env,
jbyteArray serialized_entity_specifics,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment