ReadMedicalResourcesRequestParcelTest.java
1 /*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package android.healthconnect.aidl;
17
18 import static android.health.connect.Constants.MAXIMUM_PAGE_SIZE;
19 import static android.health.connect.Constants.MINIMUM_PAGE_SIZE;
20 import static android.health.connect.datatypes.MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES;
21 import static android.healthconnect.cts.phr.utils.PhrDataFactory.DATA_SOURCE_ID;
22 import static android.healthconnect.cts.phr.utils.PhrDataFactory.DIFFERENT_DATA_SOURCE_ID;
23 import static android.healthconnect.cts.phr.utils.PhrDataFactory.PAGE_TOKEN;
24 import static android.healthconnect.cts.utils.TestUtils.setFieldValueUsingReflection;
25
26 import static com.google.common.truth.Truth.assertThat;
27
28 import static org.junit.Assert.assertThrows;
29
30 import android.health.connect.ReadMedicalResourcesInitialRequest;
31 import android.health.connect.ReadMedicalResourcesPageRequest;
32 import android.health.connect.aidl.ReadMedicalResourcesRequestParcel;
33 import android.os.Parcel;
34
35 import org.junit.Test;
36
37 import java.util.Set;
38
39 public class ReadMedicalResourcesRequestParcelTest {
40
41 @Test
testWriteInitialRequestToParcelThenRestore_propertiesAreIdentical()42 public void testWriteInitialRequestToParcelThenRestore_propertiesAreIdentical() {
43 ReadMedicalResourcesInitialRequest original =
44 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
45 .addDataSourceId(DATA_SOURCE_ID)
46 .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
47 .setPageSize(100)
48 .build();
49
50 Parcel parcel = Parcel.obtain();
51 original.toParcel().writeToParcel(parcel, 0);
52 parcel.setDataPosition(0);
53 ReadMedicalResourcesRequestParcel restoredParcel =
54 ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel);
55
56 assertThat(restoredParcel.getMedicalResourceType())
57 .isEqualTo(MEDICAL_RESOURCE_TYPE_VACCINES);
58 assertThat(restoredParcel.getDataSourceIds())
59 .containsExactly(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID);
60 assertThat(restoredParcel.getPageToken()).isNull();
61 assertThat(restoredParcel.getPageSize()).isEqualTo(100);
62 parcel.recycle();
63 }
64
65 @Test
testWritePageRequestToParcelThenRestore_propertiesAreIdentical()66 public void testWritePageRequestToParcelThenRestore_propertiesAreIdentical() {
67 ReadMedicalResourcesPageRequest original =
68 new ReadMedicalResourcesPageRequest.Builder(PAGE_TOKEN).setPageSize(100).build();
69
70 Parcel parcel = Parcel.obtain();
71 original.toParcel().writeToParcel(parcel, 0);
72 parcel.setDataPosition(0);
73 ReadMedicalResourcesRequestParcel restoredParcel =
74 ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel);
75
76 assertThat(restoredParcel.getMedicalResourceType()).isEqualTo(0);
77 assertThat(restoredParcel.getDataSourceIds()).isEmpty();
78 assertThat(restoredParcel.getPageToken()).isEqualTo(PAGE_TOKEN);
79 assertThat(restoredParcel.getPageSize()).isEqualTo(100);
80 }
81
82 @Test
testRestoreInvalidPageRequestFromParcel_nullPageToken_expectException()83 public void testRestoreInvalidPageRequestFromParcel_nullPageToken_expectException()
84 throws NoSuchFieldException, IllegalAccessException {
85 ReadMedicalResourcesPageRequest original =
86 new ReadMedicalResourcesPageRequest.Builder(PAGE_TOKEN).setPageSize(100).build();
87 setFieldValueUsingReflection(original, "mPageToken", null);
88
89 Parcel parcel = Parcel.obtain();
90 original.toParcel().writeToParcel(parcel, 0);
91 parcel.setDataPosition(0);
92
93 assertThrows(
94 IllegalArgumentException.class,
95 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
96 }
97
98 @Test
testRestoreInvalidMedicalResourceTypeFromParcel_expectException()99 public void testRestoreInvalidMedicalResourceTypeFromParcel_expectException()
100 throws NoSuchFieldException, IllegalAccessException {
101 ReadMedicalResourcesRequestParcel original =
102 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
103 .addDataSourceId(DATA_SOURCE_ID)
104 .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
105 .setPageSize(100)
106 .build()
107 .toParcel();
108 setFieldValueUsingReflection(original, "mMedicalResourceType", -1);
109
110 Parcel parcel = Parcel.obtain();
111 original.writeToParcel(parcel, 0);
112 parcel.setDataPosition(0);
113
114 assertThrows(
115 IllegalArgumentException.class,
116 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
117 }
118
119 @Test
testRestoreInvalidDataSourceIdFromParcel_expectException()120 public void testRestoreInvalidDataSourceIdFromParcel_expectException()
121 throws NoSuchFieldException, IllegalAccessException {
122 ReadMedicalResourcesRequestParcel original =
123 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
124 .addDataSourceId(DATA_SOURCE_ID)
125 .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
126 .setPageSize(100)
127 .build()
128 .toParcel();
129 setFieldValueUsingReflection(original, "mDataSourceIds", Set.of("1"));
130
131 Parcel parcel = Parcel.obtain();
132 original.writeToParcel(parcel, 0);
133 parcel.setDataPosition(0);
134
135 assertThrows(
136 IllegalArgumentException.class,
137 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
138 }
139
140 @Test
testRestoreTooSmallPageSizeFromParcel_expectException()141 public void testRestoreTooSmallPageSizeFromParcel_expectException()
142 throws NoSuchFieldException, IllegalAccessException {
143 ReadMedicalResourcesRequestParcel original =
144 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
145 .addDataSourceId(DATA_SOURCE_ID)
146 .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
147 .setPageSize(100)
148 .build()
149 .toParcel();
150 setFieldValueUsingReflection(original, "mPageSize", MINIMUM_PAGE_SIZE - 1);
151
152 Parcel parcel = Parcel.obtain();
153 original.writeToParcel(parcel, 0);
154 parcel.setDataPosition(0);
155
156 assertThrows(
157 IllegalArgumentException.class,
158 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
159 }
160
161 @Test
testRestoreTooLargePageSizeFromParcel_expectException()162 public void testRestoreTooLargePageSizeFromParcel_expectException()
163 throws NoSuchFieldException, IllegalAccessException {
164 ReadMedicalResourcesRequestParcel original =
165 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
166 .addDataSourceId(DATA_SOURCE_ID)
167 .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
168 .setPageSize(100)
169 .build()
170 .toParcel();
171 setFieldValueUsingReflection(original, "mPageSize", MAXIMUM_PAGE_SIZE + 1);
172
173 Parcel parcel = Parcel.obtain();
174 original.writeToParcel(parcel, 0);
175 parcel.setDataPosition(0);
176
177 assertThrows(
178 IllegalArgumentException.class,
179 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
180 }
181 }
182