1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "sync/test/fake_server/android/fake_server_helper_android.h"
9 #include "base/android/jni_string.h"
10 #include "base/basictypes.h"
11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "jni/FakeServerHelper_jni.h"
14 #include "sync/internal_api/public/base/model_type.h"
15 #include "sync/internal_api/public/network_resources.h"
16 #include "sync/protocol/sync.pb.h"
17 #include "sync/test/fake_server/bookmark_entity_builder.h"
18 #include "sync/test/fake_server/entity_builder_factory.h"
19 #include "sync/test/fake_server/fake_server.h"
20 #include "sync/test/fake_server/fake_server_network_resources.h"
21 #include "sync/test/fake_server/fake_server_verifier.h"
22 #include "sync/test/fake_server/tombstone_entity.h"
23 #include "sync/test/fake_server/unique_client_entity.h"
24 #include "testing/gtest/include/gtest/gtest.h"
27 FakeServerHelperAndroid::FakeServerHelperAndroid(JNIEnv
* env
, jobject obj
) {
30 FakeServerHelperAndroid::~FakeServerHelperAndroid() { }
32 static jlong
Init(JNIEnv
* env
, jobject obj
) {
33 FakeServerHelperAndroid
* fake_server_android
=
34 new FakeServerHelperAndroid(env
, obj
);
35 return reinterpret_cast<intptr_t>(fake_server_android
);
38 jlong
FakeServerHelperAndroid::CreateFakeServer(JNIEnv
* env
, jobject obj
) {
39 fake_server::FakeServer
* fake_server
= new fake_server::FakeServer();
40 return reinterpret_cast<intptr_t>(fake_server
);
43 jlong
FakeServerHelperAndroid::CreateNetworkResources(JNIEnv
* env
,
46 fake_server::FakeServer
* fake_server_ptr
=
47 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
48 syncer::NetworkResources
* resources
=
49 new fake_server::FakeServerNetworkResources(fake_server_ptr
->AsWeakPtr());
50 return reinterpret_cast<intptr_t>(resources
);
53 void FakeServerHelperAndroid::DeleteFakeServer(JNIEnv
* env
,
56 fake_server::FakeServer
* fake_server_ptr
=
57 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
58 delete fake_server_ptr
;
61 jboolean
FakeServerHelperAndroid::VerifyEntityCountByTypeAndName(
66 jstring model_type_string
,
68 syncer::ModelType model_type
;
69 if (!NotificationTypeToRealModelType(base::android::ConvertJavaStringToUTF8(
70 env
, model_type_string
), &model_type
)) {
71 LOG(WARNING
) << "Invalid ModelType string.";
74 fake_server::FakeServer
* fake_server_ptr
=
75 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
76 fake_server::FakeServerVerifier
fake_server_verifier(fake_server_ptr
);
77 testing::AssertionResult result
=
78 fake_server_verifier
.VerifyEntityCountByTypeAndName(
79 count
, model_type
, base::android::ConvertJavaStringToUTF8(env
, name
));
82 LOG(WARNING
) << result
.message();
87 jboolean
FakeServerHelperAndroid::VerifySessions(
91 jobjectArray url_array
) {
92 std::multiset
<std::string
> tab_urls
;
93 for (int i
= 0; i
< env
->GetArrayLength(url_array
); i
++) {
94 jstring s
= (jstring
) env
->GetObjectArrayElement(url_array
, i
);
95 tab_urls
.insert(base::android::ConvertJavaStringToUTF8(env
, s
));
97 fake_server::SessionsHierarchy expected_sessions
;
98 expected_sessions
.AddWindow(tab_urls
);
100 fake_server::FakeServer
* fake_server_ptr
=
101 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
102 fake_server::FakeServerVerifier
fake_server_verifier(fake_server_ptr
);
103 testing::AssertionResult result
=
104 fake_server_verifier
.VerifySessions(expected_sessions
);
107 LOG(WARNING
) << result
.message();
112 void FakeServerHelperAndroid::InjectUniqueClientEntity(
117 jbyteArray serialized_entity_specifics
) {
118 fake_server::FakeServer
* fake_server_ptr
=
119 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
121 sync_pb::EntitySpecifics entity_specifics
;
122 DeserializeEntitySpecifics(env
, serialized_entity_specifics
,
125 fake_server_ptr
->InjectEntity(
126 fake_server::UniqueClientEntity::CreateForInjection(
127 base::android::ConvertJavaStringToUTF8(env
, name
), entity_specifics
));
130 void FakeServerHelperAndroid::ModifyEntitySpecifics(
135 jbyteArray serialized_entity_specifics
) {
136 fake_server::FakeServer
* fake_server_ptr
=
137 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
139 sync_pb::EntitySpecifics entity_specifics
;
140 DeserializeEntitySpecifics(env
, serialized_entity_specifics
,
143 fake_server_ptr
->ModifyEntitySpecifics(
144 base::android::ConvertJavaStringToUTF8(env
, id
), entity_specifics
);
147 void FakeServerHelperAndroid::DeserializeEntitySpecifics(
149 jbyteArray serialized_entity_specifics
,
150 sync_pb::EntitySpecifics
& entity_specifics
) {
151 int specifics_bytes_length
= env
->GetArrayLength(serialized_entity_specifics
);
152 jbyte
* specifics_bytes
=
153 env
->GetByteArrayElements(serialized_entity_specifics
, NULL
);
154 std::string
specifics_string(reinterpret_cast<char *>(specifics_bytes
),
155 specifics_bytes_length
);
157 if (!entity_specifics
.ParseFromString(specifics_string
))
158 NOTREACHED() << "Could not deserialize EntitySpecifics";
161 void FakeServerHelperAndroid::InjectBookmarkEntity(
168 fake_server::FakeServer
* fake_server_ptr
=
169 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
170 fake_server_ptr
->InjectEntity(
171 CreateBookmarkEntity(env
, title
, url
, parent_id
));
174 void FakeServerHelperAndroid::ModifyBookmarkEntity(JNIEnv
* env
,
181 fake_server::FakeServer
* fake_server_ptr
=
182 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
183 scoped_ptr
<fake_server::FakeServerEntity
> bookmark
=
184 CreateBookmarkEntity(env
, title
, url
, parent_id
);
185 sync_pb::SyncEntity proto
;
186 bookmark
->SerializeAsProto(&proto
);
187 fake_server_ptr
->ModifyEntitySpecifics(
188 base::android::ConvertJavaStringToUTF8(env
, entity_id
),
192 scoped_ptr
<fake_server::FakeServerEntity
>
193 FakeServerHelperAndroid::CreateBookmarkEntity(JNIEnv
* env
,
197 std::string url_as_string
= base::android::ConvertJavaStringToUTF8(env
, url
);
198 GURL gurl
= GURL(url_as_string
);
199 if (!gurl
.is_valid()) {
200 NOTREACHED() << "The given string (" << url_as_string
201 << ") is not a valid URL.";
204 fake_server::EntityBuilderFactory entity_builder_factory
;
205 fake_server::BookmarkEntityBuilder bookmark_builder
=
206 entity_builder_factory
.NewBookmarkEntityBuilder(
207 base::android::ConvertJavaStringToUTF8(env
, title
));
208 bookmark_builder
.SetParentId(
209 base::android::ConvertJavaStringToUTF8(env
, parent_id
));
210 return bookmark_builder
.BuildBookmark(gurl
);
213 base::android::ScopedJavaLocalRef
<jstring
>
214 FakeServerHelperAndroid::GetBookmarkBarFolderId(
218 fake_server::FakeServer
* fake_server_ptr
=
219 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
220 return base::android::ConvertUTF8ToJavaString(
221 env
, fake_server_ptr
->GetBookmarkBarFolderId());
224 void FakeServerHelperAndroid::DeleteEntity(
229 fake_server::FakeServer
* fake_server_ptr
=
230 reinterpret_cast<fake_server::FakeServer
*>(fake_server
);
231 std::string native_id
= base::android::ConvertJavaStringToUTF8(env
, id
);
232 fake_server_ptr
->InjectEntity(
233 fake_server::TombstoneEntity::Create(native_id
));
237 bool FakeServerHelperAndroid::Register(JNIEnv
* env
) {
238 return RegisterNativesImpl(env
);