diff options
6 files changed, 104 insertions, 1 deletions
diff --git a/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/FakeServerHelper.java b/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/FakeServerHelper.java index 09a25ce..51cd031 100644 --- a/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/FakeServerHelper.java +++ b/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/FakeServerHelper.java @@ -7,7 +7,7 @@ package org.chromium.chrome.browser.sync; import android.content.Context; import org.chromium.base.ThreadUtils; -//import org.chromium.chrome.browser.sync.ProfileSyncService; +import org.chromium.sync.internal_api.pub.base.ModelType; import java.util.concurrent.Callable; @@ -113,6 +113,25 @@ public class FakeServerHelper { nativeDeleteFakeServer(mNativeFakeServerHelperAndroid, nativeFakeServer); } + /** + * Returns whether {@code count} entities exist on the fake Sync server with the given + * {@code modelType} and {@code name}. + * + * @param count the number of fake server entities to verify + * @param modelType the model type of entities to verify + * @param name the name of entities to verify + * + * @return whether the number of specified entities exist + */ + public boolean verifyEntityCountByTypeAndName(int count, ModelType modelType, String name) { + if (sNativeFakeServer == 0L) { + throw new IllegalStateException( + "useFakeServer must be called before data verification."); + } + return nativeVerifyEntityCountByTypeAndName(mNativeFakeServerHelperAndroid, + sNativeFakeServer, count, modelType.toString(), name); + } + // Native methods. private native long nativeInit(); private native long nativeCreateFakeServer(long nativeFakeServerHelperAndroid); @@ -120,4 +139,7 @@ public class FakeServerHelper { long nativeFakeServerHelperAndroid, long nativeFakeServer); private native void nativeDeleteFakeServer( long nativeFakeServerHelperAndroid, long nativeFakeServer); + private native boolean nativeVerifyEntityCountByTypeAndName( + long nativeFakeServerHelperAndroid, long nativeFakeServer, int count, String modelType, + String name); } diff --git a/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/SyncTest.java index 4386426..24c142d 100644 --- a/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/SyncTest.java +++ b/chrome/android/sync_shell/javatests/src/chromium/chrome/browser/sync/SyncTest.java @@ -23,11 +23,14 @@ import org.chromium.content.browser.ContentViewCore; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.JavaScriptUtils; +import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.sync.AndroidSyncSettings; +import org.chromium.sync.internal_api.pub.base.ModelType; import org.chromium.sync.signin.AccountManagerHelper; import org.chromium.sync.signin.ChromeSigninController; import org.chromium.sync.test.util.MockAccountManager; import org.chromium.sync.test.util.MockSyncContentResolverDelegate; +import org.chromium.ui.base.PageTransition; import java.util.concurrent.TimeoutException; @@ -43,6 +46,7 @@ public class SyncTest extends ChromeShellTestBase { private SyncTestUtil.SyncTestContext mContext; private MockAccountManager mAccountManager; private SyncController mSyncController; + private FakeServerHelper mFakeServerHelper; @Override protected void setUp() throws Exception { @@ -66,6 +70,7 @@ public class SyncTest extends ChromeShellTestBase { @Override public void run() { mSyncController = SyncController.get(mContext); + mFakeServerHelper = FakeServerHelper.get(); } }); FakeServerHelper.useFakeServer(getInstrumentation().getTargetContext()); @@ -181,6 +186,39 @@ public class SyncTest extends ChromeShellTestBase { SyncTestUtil.verifySignedInWithAccount(mContext, account); } + @LargeTest + @Feature({"Sync"}) + public void testUploadTypedUrl() throws Exception { + setupTestAccountAndSignInToSync(FOREIGN_SESSION_TEST_MACHINE_ID); + + // TestHttpServerClient is preferred here but it can't be used. The test server + // serves pages on localhost and Chrome doesn't sync localhost URLs as typed URLs. + // This type of URL requires no external data connection or resources. + final String urlToLoad = "data:text,testTypedUrl"; + assertTrue("A typed URL entity for " + urlToLoad + " already exists on the fake server.", + mFakeServerHelper.verifyEntityCountByTypeAndName(0, ModelType.TYPED_URL, + urlToLoad)); + + ThreadUtils.runOnUiThreadBlocking(new Runnable() { + @Override + public void run() { + LoadUrlParams params = new LoadUrlParams(urlToLoad, PageTransition.TYPED); + getActivity().getActiveTab().loadUrl(params); + } + }); + + boolean synced = CriteriaHelper.pollForCriteria(new Criteria() { + @Override + public boolean isSatisfied() { + return mFakeServerHelper.verifyEntityCountByTypeAndName(1, ModelType.TYPED_URL, + urlToLoad); + } + }, SyncTestUtil.UI_TIMEOUT_MS, SyncTestUtil.CHECK_INTERVAL_MS); + + assertTrue("The typed URL entity for " + urlToLoad + " was not found on the fake server.", + synced); + } + private void setupTestAccountAndSignInToSync( final String syncClientIdentifier) throws InterruptedException { diff --git a/sync/BUILD.gn b/sync/BUILD.gn index df5f23a..605f797 100644 --- a/sync/BUILD.gn +++ b/sync/BUILD.gn @@ -804,6 +804,7 @@ if (is_android) { ":fake_server_jni", ":test_support_sync_fake_server", "//base", + "//testing/gtest", ] } } diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi index b1ef9cf..1c39e5b 100644 --- a/sync/sync_tests.gypi +++ b/sync/sync_tests.gypi @@ -475,6 +475,7 @@ 'dependencies': [ 'sync_fake_server_jni_headers', 'test_support_sync_fake_server', + '../testing/gtest.gyp:gtest', '../base/base.gyp:base', ], 'sources': [ diff --git a/sync/test/fake_server/android/fake_server_helper_android.cc b/sync/test/fake_server/android/fake_server_helper_android.cc index 725ba63..8491474 100644 --- a/sync/test/fake_server/android/fake_server_helper_android.cc +++ b/sync/test/fake_server/android/fake_server_helper_android.cc @@ -6,11 +6,17 @@ #include <jni.h> +#include "base/android/jni_string.h" #include "base/basictypes.h" +#include "base/logging.h" +#include "base/memory/scoped_ptr.h" #include "jni/FakeServerHelper_jni.h" +#include "sync/internal_api/public/base/model_type.h" #include "sync/internal_api/public/network_resources.h" #include "sync/test/fake_server/fake_server.h" #include "sync/test/fake_server/fake_server_network_resources.h" +#include "sync/test/fake_server/fake_server_verifier.h" +#include "testing/gtest/include/gtest/gtest.h" FakeServerHelperAndroid::FakeServerHelperAndroid(JNIEnv* env, jobject obj) { } @@ -46,6 +52,32 @@ void FakeServerHelperAndroid::DeleteFakeServer(JNIEnv* env, delete fake_server_ptr; } +jboolean FakeServerHelperAndroid::VerifyEntityCountByTypeAndName( + JNIEnv* env, + jobject obj, + jlong fake_server, + jlong count, + jstring model_type_string, + jstring name) { + syncer::ModelType model_type; + if (!NotificationTypeToRealModelType(base::android::ConvertJavaStringToUTF8( + env, model_type_string), &model_type)) { + LOG(WARNING) << "Invalid ModelType string."; + return false; + } + fake_server::FakeServer* fake_server_ptr = + reinterpret_cast<fake_server::FakeServer*>(fake_server); + fake_server::FakeServerVerifier fake_server_verifier(fake_server_ptr); + testing::AssertionResult result = + fake_server_verifier.VerifyEntityCountByTypeAndName( + count, model_type, base::android::ConvertJavaStringToUTF8(env, name)); + + if (!result) + LOG(WARNING) << result.message(); + + return result; +} + // static bool FakeServerHelperAndroid::Register(JNIEnv* env) { return RegisterNativesImpl(env); diff --git a/sync/test/fake_server/android/fake_server_helper_android.h b/sync/test/fake_server/android/fake_server_helper_android.h index 24e1d9e..dfbdb7b 100644 --- a/sync/test/fake_server/android/fake_server_helper_android.h +++ b/sync/test/fake_server/android/fake_server_helper_android.h @@ -30,6 +30,15 @@ class FakeServerHelperAndroid { // CreateFakeServer). void DeleteFakeServer(JNIEnv* env, jobject obj, jlong fake_server); + // Returns true if and only if |fake_server| contains |count| entities that + // match |model_type_string| and |name|. + jboolean VerifyEntityCountByTypeAndName(JNIEnv* env, + jobject obj, + jlong fake_server, + jlong count, + jstring model_type_string, + jstring name); + private: virtual ~FakeServerHelperAndroid(); }; |