blob: fc3a21a9aad01ce89eb7735cb696b1c81ea3b561 [file] [log] [blame]
/*
* Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app.appsearch.cts.app;
import static com.google.common.truth.Truth.assertThat;
import android.app.appsearch.AppSearchSchema;
import android.app.appsearch.GetSchemaResponse;
import android.app.appsearch.PackageIdentifier;
import android.app.appsearch.SetSchemaRequest;
import com.google.common.collect.ImmutableSet;
import org.junit.Test;
import java.util.Arrays;
public class GetSchemaResponseCtsTest {
@Test
public void testRebuild() {
byte[] sha256cert1 = new byte[32];
byte[] sha256cert2 = new byte[32];
Arrays.fill(sha256cert1, (byte) 1);
Arrays.fill(sha256cert2, (byte) 2);
PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
AppSearchSchema schema1 =
new AppSearchSchema.Builder("Email1")
.addProperty(
new AppSearchSchema.StringPropertyConfig.Builder("subject")
.setCardinality(
AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
.setIndexingType(
AppSearchSchema.StringPropertyConfig
.INDEXING_TYPE_PREFIXES)
.setTokenizerType(
AppSearchSchema.StringPropertyConfig
.TOKENIZER_TYPE_PLAIN)
.build())
.build();
AppSearchSchema schema2 =
new AppSearchSchema.Builder("Email2")
.addProperty(
new AppSearchSchema.StringPropertyConfig.Builder("subject")
.setCardinality(
AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
.setIndexingType(
AppSearchSchema.StringPropertyConfig
.INDEXING_TYPE_PREFIXES)
.setTokenizerType(
AppSearchSchema.StringPropertyConfig
.TOKENIZER_TYPE_PLAIN)
.build())
.build();
GetSchemaResponse.Builder builder =
new GetSchemaResponse.Builder()
.setVersion(42)
.addSchema(schema1)
.addSchemaTypeNotDisplayedBySystem("Email1")
.setSchemaTypeVisibleToPackages(
"Email1", ImmutableSet.of(packageIdentifier1))
.setRequiredPermissionsForSchemaTypeVisibility(
"Email1",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_SMS,
SetSchemaRequest.READ_CALENDAR),
ImmutableSet.of(
SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
GetSchemaResponse original = builder.build();
GetSchemaResponse rebuild =
builder.setVersion(37)
.addSchema(schema2)
.addSchemaTypeNotDisplayedBySystem("Email2")
.setSchemaTypeVisibleToPackages(
"Email2", ImmutableSet.of(packageIdentifier2))
.setRequiredPermissionsForSchemaTypeVisibility(
"Email2",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_CONTACTS,
SetSchemaRequest.READ_EXTERNAL_STORAGE),
ImmutableSet.of(
SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)))
.build();
// rebuild won't effect the original object
assertThat(original.getVersion()).isEqualTo(42);
assertThat(original.getSchemas()).containsExactly(schema1);
assertThat(original.getSchemaTypesNotDisplayedBySystem()).containsExactly("Email1");
assertThat(original.getSchemaTypesVisibleToPackages()).hasSize(1);
assertThat(original.getSchemaTypesVisibleToPackages().get("Email1"))
.containsExactly(packageIdentifier1);
assertThat(original.getRequiredPermissionsForSchemaTypeVisibility())
.containsExactly(
"Email1",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
assertThat(rebuild.getVersion()).isEqualTo(37);
assertThat(rebuild.getSchemas()).containsExactly(schema1, schema2);
assertThat(rebuild.getSchemaTypesNotDisplayedBySystem())
.containsExactly("Email1", "Email2");
assertThat(rebuild.getSchemaTypesVisibleToPackages()).hasSize(2);
assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email1"))
.containsExactly(packageIdentifier1);
assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email2"))
.containsExactly(packageIdentifier2);
assertThat(rebuild.getRequiredPermissionsForSchemaTypeVisibility())
.containsExactly(
"Email1",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
"Email2",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_CONTACTS,
SetSchemaRequest.READ_EXTERNAL_STORAGE),
ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
}
@Test
public void setVisibility() {
byte[] sha256cert1 = new byte[32];
byte[] sha256cert2 = new byte[32];
Arrays.fill(sha256cert1, (byte) 1);
Arrays.fill(sha256cert2, (byte) 2);
PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
GetSchemaResponse getSchemaResponse =
new GetSchemaResponse.Builder()
.setVersion(42)
.addSchemaTypeNotDisplayedBySystem("Email")
.addSchemaTypeNotDisplayedBySystem("Text")
.setSchemaTypeVisibleToPackages(
"Email", ImmutableSet.of(packageIdentifier1, packageIdentifier2))
.setRequiredPermissionsForSchemaTypeVisibility(
"Email",
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_CONTACTS,
SetSchemaRequest.READ_EXTERNAL_STORAGE),
ImmutableSet.of(
SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)))
.build();
assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem())
.containsExactly("Email", "Text");
assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).hasSize(1);
assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages().get("Email"))
.containsExactly(packageIdentifier1, packageIdentifier2);
assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility().get("Email"))
.containsExactlyElementsIn(
ImmutableSet.of(
ImmutableSet.of(
SetSchemaRequest.READ_CONTACTS,
SetSchemaRequest.READ_EXTERNAL_STORAGE),
ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
}
@Test
public void getEmptyVisibility() {
GetSchemaResponse getSchemaResponse =
new GetSchemaResponse.Builder().setVersion(42).build();
assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).isEmpty();
assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
}
}