aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-02 22:13:41 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-02 22:13:41 +0000
commit067aaed60b8b74fd03044ae614ad95e4c3b80f80 (patch)
tree155e68e900a1f37adf113e6f91090dfb41f63c84
parent8fbaef6e5584fa1f850e9fe8ce4f8ef88a2597d4 (diff)
parenta7a951e46e76865b3f82d7538177290c99d6f8ea (diff)
downloadicing-android14-mainline-tethering-release.tar.gz
Snap for 11041982 from a7a951e46e76865b3f82d7538177290c99d6f8ea to mainline-tethering-releaseaml_tet_341411060aml_tet_341310230android14-mainline-tethering-release
Change-Id: I6f993dca9472956f691c3286ea9c7fa450b37534
-rw-r--r--icing/icing-search-engine_schema_test.cc20
-rw-r--r--icing/jni/icing-search-engine-jni.cc14
-rw-r--r--icing/schema/schema-store.cc6
-rw-r--r--java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java75
4 files changed, 112 insertions, 3 deletions
diff --git a/icing/icing-search-engine_schema_test.cc b/icing/icing-search-engine_schema_test.cc
index 0e88c5a..d665673 100644
--- a/icing/icing-search-engine_schema_test.cc
+++ b/icing/icing-search-engine_schema_test.cc
@@ -3131,6 +3131,26 @@ TEST_F(IcingSearchEngineSchemaTest, IcingShouldWorkFor64Sections) {
EqualsSearchResultIgnoreStatsAndScores(expected_no_documents));
}
+TEST_F(IcingSearchEngineSchemaTest, IcingShouldReturnErrorForExtraSections) {
+ // Create a schema with more sections than allowed.
+ SchemaTypeConfigBuilder schema_type_config_builder =
+ SchemaTypeConfigBuilder().SetType("type");
+ for (int i = 0; i <= kMaxSectionId + 1; ++i) {
+ schema_type_config_builder.AddProperty(
+ PropertyConfigBuilder()
+ .SetName("prop" + std::to_string(i))
+ .SetDataTypeString(TERM_MATCH_PREFIX, TOKENIZER_PLAIN)
+ .SetCardinality(CARDINALITY_OPTIONAL));
+ }
+ SchemaProto schema =
+ SchemaBuilder().AddType(schema_type_config_builder).Build();
+
+ IcingSearchEngine icing(GetDefaultIcingOptions(), GetTestJniCache());
+ ASSERT_THAT(icing.Initialize().status(), ProtoIsOk());
+ ASSERT_THAT(icing.SetSchema(schema).status().message(),
+ HasSubstr("Too many properties to be indexed"));
+}
+
} // namespace
} // namespace lib
} // namespace icing
diff --git a/icing/jni/icing-search-engine-jni.cc b/icing/jni/icing-search-engine-jni.cc
index f551054..a0883fa 100644
--- a/icing/jni/icing-search-engine-jni.cc
+++ b/icing/jni/icing-search-engine-jni.cc
@@ -499,6 +499,9 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
{"nativeGetSchema",
"(Lcom/google/android/icing/IcingSearchEngineImpl;)[B",
reinterpret_cast<void*>(nativeGetSchema)},
+ {"nativeGetSchemaType",
+ "(Lcom/google/android/icing/IcingSearchEngineImpl;Ljava/lang/String;)[B",
+ reinterpret_cast<void*>(nativeGetSchemaType)},
{"nativePut", "(Lcom/google/android/icing/IcingSearchEngineImpl;[B)[B",
reinterpret_cast<void*>(nativePut)},
{"nativeGet",
@@ -524,6 +527,12 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
"(Lcom/google/android/icing/IcingSearchEngineImpl;Ljava/lang/"
"String;Ljava/lang/String;)[B",
reinterpret_cast<void*>(nativeDelete)},
+ {"nativeDeleteByNamespace",
+ "(Lcom/google/android/icing/IcingSearchEngineImpl;Ljava/lang/String;)[B",
+ reinterpret_cast<void*>(nativeDeleteByNamespace)},
+ {"nativeDeleteBySchemaType",
+ "(Lcom/google/android/icing/IcingSearchEngineImpl;Ljava/lang/String;)[B",
+ reinterpret_cast<void*>(nativeDeleteBySchemaType)},
{"nativeDeleteByQuery",
"(Lcom/google/android/icing/IcingSearchEngineImpl;[BZ)[B",
reinterpret_cast<void*>(nativeDeleteByQuery)},
@@ -546,6 +555,11 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
{"nativeGetDebugInfo",
"(Lcom/google/android/icing/IcingSearchEngineImpl;I)[B",
reinterpret_cast<void*>(nativeGetDebugInfo)},
+ {"nativeShouldLog", "(SS)Z", reinterpret_cast<void*>(nativeShouldLog)},
+ {"nativeSetLoggingLevel", "(SS)Z",
+ reinterpret_cast<void*>(nativeSetLoggingLevel)},
+ {"nativeGetLoggingTag", "()Ljava/lang/String;",
+ reinterpret_cast<void*>(nativeGetLoggingTag)},
};
int register_natives_success = env->RegisterNatives(
java_class, methods, sizeof(methods) / sizeof(JNINativeMethod));
diff --git a/icing/schema/schema-store.cc b/icing/schema/schema-store.cc
index a389d13..85ee6b6 100644
--- a/icing/schema/schema-store.cc
+++ b/icing/schema/schema-store.cc
@@ -448,7 +448,7 @@ libtextclassifier3::Status SchemaStore::InitializeDerivedFiles() {
"Combined checksum of SchemaStore was inconsistent");
}
- BuildInMemoryCache();
+ ICING_RETURN_IF_ERROR(BuildInMemoryCache());
return libtextclassifier3::Status::OK;
}
@@ -463,7 +463,7 @@ libtextclassifier3::Status SchemaStore::RegenerateDerivedFiles(
ICING_RETURN_IF_ERROR(schema_type_mapper_->Put(
type_config.schema_type(), schema_type_mapper_->num_keys()));
}
- BuildInMemoryCache();
+ ICING_RETURN_IF_ERROR(BuildInMemoryCache());
if (create_overlay_if_necessary) {
ICING_ASSIGN_OR_RETURN(
@@ -494,7 +494,7 @@ libtextclassifier3::Status SchemaStore::RegenerateDerivedFiles(
/*overlay_created=*/true, min_overlay_version_compatibility);
// Rebuild in memory data - references to the old schema will be invalid
// now.
- BuildInMemoryCache();
+ ICING_RETURN_IF_ERROR(BuildInMemoryCache());
}
}
diff --git a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
index d243f87..2bbd621 100644
--- a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
+++ b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
@@ -296,6 +296,56 @@ public final class IcingSearchEngineTest {
}
@Test
+ public void testDeleteByNamespace() throws Exception {
+ assertStatusOk(icingSearchEngine.initialize().getStatus());
+
+ SchemaTypeConfigProto emailTypeConfig = createEmailTypeConfig();
+ SchemaProto schema = SchemaProto.newBuilder().addTypes(emailTypeConfig).build();
+ assertThat(
+ icingSearchEngine
+ .setSchema(schema, /*ignoreErrorsAndDeleteDocuments=*/ false)
+ .getStatus()
+ .getCode())
+ .isEqualTo(StatusProto.Code.OK);
+
+ DocumentProto emailDocument = createEmailDocument("namespace", "uri");
+ assertStatusOk(icingSearchEngine.put(emailDocument).getStatus());
+
+ DeleteByNamespaceResultProto deleteByNamespaceResultProto =
+ icingSearchEngine.deleteByNamespace("namespace");
+ assertStatusOk(deleteByNamespaceResultProto.getStatus());
+
+ GetResultProto getResultProto =
+ icingSearchEngine.get("namespace", "uri", GetResultSpecProto.getDefaultInstance());
+ assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.NOT_FOUND);
+ }
+
+ @Test
+ public void testDeleteBySchemaType() throws Exception {
+ assertStatusOk(icingSearchEngine.initialize().getStatus());
+
+ SchemaTypeConfigProto emailTypeConfig = createEmailTypeConfig();
+ SchemaProto schema = SchemaProto.newBuilder().addTypes(emailTypeConfig).build();
+ assertThat(
+ icingSearchEngine
+ .setSchema(schema, /*ignoreErrorsAndDeleteDocuments=*/ false)
+ .getStatus()
+ .getCode())
+ .isEqualTo(StatusProto.Code.OK);
+
+ DocumentProto emailDocument = createEmailDocument("namespace", "uri");
+ assertStatusOk(icingSearchEngine.put(emailDocument).getStatus());
+
+ DeleteBySchemaTypeResultProto deleteBySchemaTypeResultProto =
+ icingSearchEngine.deleteBySchemaType(EMAIL_TYPE);
+ assertStatusOk(deleteBySchemaTypeResultProto.getStatus());
+
+ GetResultProto getResultProto =
+ icingSearchEngine.get("namespace", "uri", GetResultSpecProto.getDefaultInstance());
+ assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.NOT_FOUND);
+ }
+
+ @Test
public void testDeleteByQuery() throws Exception {
assertStatusOk(icingSearchEngine.initialize().getStatus());
@@ -700,6 +750,31 @@ public final class IcingSearchEngineTest {
assertThat(response.getSuggestions(1).getQuery()).isEqualTo("fo");
}
+ @Test
+ public void testLogging() throws Exception {
+ // Set to INFO
+ assertThat(IcingSearchEngine.setLoggingLevel(LogSeverity.Code.INFO)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.INFO)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.DBG)).isFalse();
+
+ // Set to WARNING
+ assertThat(IcingSearchEngine.setLoggingLevel(LogSeverity.Code.WARNING)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.WARNING)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.INFO)).isFalse();
+
+ // Set to DEBUG
+ assertThat(IcingSearchEngine.setLoggingLevel(LogSeverity.Code.DBG)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.DBG)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.VERBOSE)).isFalse();
+
+ // Set to VERBOSE
+ assertThat(IcingSearchEngine.setLoggingLevel(LogSeverity.Code.VERBOSE, (short) 1)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.VERBOSE, (short) 1)).isTrue();
+ assertThat(IcingSearchEngine.shouldLog(LogSeverity.Code.VERBOSE, (short) 2)).isFalse();
+
+ assertThat(IcingSearchEngine.getLoggingTag()).isNotEmpty();
+ }
+
private static void assertStatusOk(StatusProto status) {
assertWithMessage(status.getMessage()).that(status.getCode()).isEqualTo(StatusProto.Code.OK);
}