summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot2018-02-28 02:26:24 -0600
committerandroid-build-team Robot2018-02-28 02:26:24 -0600
commitb0ad4bb9349ccc00f2e79782ad29a113422bb033 (patch)
tree54f1c62b9ff873f6717402ee9d0d66163f601aac
parent81852ae83cee61cd6323ad5e43150ad5ba1d0c66 (diff)
parent88550b22f5f1f2e7ec5be9e8c0c11bc51205fea0 (diff)
downloadplatform-hardware-interfaces-b0ad4bb9349ccc00f2e79782ad29a113422bb033.tar.gz
platform-hardware-interfaces-b0ad4bb9349ccc00f2e79782ad29a113422bb033.tar.xz
platform-hardware-interfaces-b0ad4bb9349ccc00f2e79782ad29a113422bb033.zip
Snap for 4625912 from 88550b22f5f1f2e7ec5be9e8c0c11bc51205fea0 to pi-release
Change-Id: Iccd61e7cde747f80811ce1fc271796e7c31a699c
-rw-r--r--gnss/1.1/IGnssCallback.hal18
-rw-r--r--neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp46
-rw-r--r--neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0BasicTest.cpp84
-rw-r--r--neuralnetworks/1.1/vts/functional/VtsHalNeuralnetworksV1_1BasicTest.cpp85
-rw-r--r--wifi/supplicant/1.1/vts/functional/Android.bp1
-rw-r--r--wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.cpp5
-rw-r--r--wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.h4
-rw-r--r--wifi/supplicant/1.1/vts/functional/supplicant_sta_network_hidl_test.cpp89
8 files changed, 238 insertions, 94 deletions
diff --git a/gnss/1.1/IGnssCallback.hal b/gnss/1.1/IGnssCallback.hal
index 9fd71aef..fdd2ebee 100644
--- a/gnss/1.1/IGnssCallback.hal
+++ b/gnss/1.1/IGnssCallback.hal
@@ -39,11 +39,19 @@ interface IGnssCallback extends @1.0::IGnssCallback {
39 /** 39 /**
40 * Callback for requesting Location. 40 * Callback for requesting Location.
41 * 41 *
42 * HAL implementation shall call this when it wants the framework to provide location to assist 42 * HAL implementation must call this when it wants the framework to provide locations to assist
43 * with GNSS HAL operation. For example, to assist with time to first fix, and/or error 43 * with GNSS HAL operation, for example, to assist with time to first fix, error recovery, or to
44 * recovery, it may ask for a location that is independent from GNSS (e.g. from the "network" 44 * supplement GNSS location for other clients of the GNSS HAL.
45 * LocationProvier), or to provide a Device-Based-Hybrid location to supplement A-GPS/GNSS 45 *
46 * emergency call flows managed by the GNSS HAL. 46 * If a request is made with independentFromGnss set to true, the framework must avoid
47 * providing locations derived from GNSS locations (such as "fused" location), to help improve
48 * information independence for situations such as error recovery.
49 *
50 * In response to this method call, GNSS HAL can expect zero, one, or more calls to
51 * IGnss::injectLocation or IGnss::injectBestLocation, dependent on availability of location
52 * from other sources, which may happen at some arbitrary delay. Generally speaking, HAL
53 * implementations must be able to handle calls to IGnss::injectLocation or
54 * IGnss::injectBestLocation at any time.
47 * 55 *
48 * @param independentFromGnss True if requesting a location that is independent from GNSS. 56 * @param independentFromGnss True if requesting a location that is independent from GNSS.
49 */ 57 */
diff --git a/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp b/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
index f0ce9382..8646a4cb 100644
--- a/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
+++ b/neuralnetworks/1.0/vts/functional/GeneratedTestHarness.cpp
@@ -186,35 +186,29 @@ void Execute(sp<V1_0::IDevice>& device, std::function<V1_0::Model(void)> create_
186 186
187 // see if service can handle model 187 // see if service can handle model
188 bool fullySupportsModel = false; 188 bool fullySupportsModel = false;
189 ErrorStatus supportedStatus;
190 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
191 ASSERT_NE(nullptr, preparedModelCallback.get());
192
193 Return<void> supportedCall = device->getSupportedOperations( 189 Return<void> supportedCall = device->getSupportedOperations(
194 model, [&](ErrorStatus status, const hidl_vec<bool>& supported) { 190 model, [&fullySupportsModel](ErrorStatus status, const hidl_vec<bool>& supported) {
195 supportedStatus = status; 191 ASSERT_EQ(ErrorStatus::NONE, status);
196 ASSERT_NE(0ul, supported.size()); 192 ASSERT_NE(0ul, supported.size());
197 fullySupportsModel = 193 fullySupportsModel =
198 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; }); 194 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; });
199 }); 195 });
200 ASSERT_TRUE(supportedCall.isOk()); 196 ASSERT_TRUE(supportedCall.isOk());
201 ASSERT_EQ(ErrorStatus::NONE, supportedStatus); 197
198 // launch prepare model
199 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
200 ASSERT_NE(nullptr, preparedModelCallback.get());
202 Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback); 201 Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
203 ASSERT_TRUE(prepareLaunchStatus.isOk()); 202 ASSERT_TRUE(prepareLaunchStatus.isOk());
203 ASSERT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
204 204
205 // retrieve prepared model 205 // retrieve prepared model
206 preparedModelCallback->wait(); 206 preparedModelCallback->wait();
207 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus(); 207 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
208 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel(); 208 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
209 if (fullySupportsModel) {
210 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
211 } else {
212 EXPECT_TRUE(prepareReturnStatus == ErrorStatus::NONE ||
213 prepareReturnStatus == ErrorStatus::GENERAL_FAILURE);
214 }
215 209
216 // early termination if vendor service cannot fully prepare model 210 // early termination if vendor service cannot fully prepare model
217 if (!fullySupportsModel && prepareReturnStatus == ErrorStatus::GENERAL_FAILURE) { 211 if (!fullySupportsModel && prepareReturnStatus != ErrorStatus::NONE) {
218 ASSERT_EQ(nullptr, preparedModel.get()); 212 ASSERT_EQ(nullptr, preparedModel.get());
219 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot " 213 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot "
220 "prepare model that it does not support."; 214 "prepare model that it does not support.";
@@ -223,6 +217,7 @@ void Execute(sp<V1_0::IDevice>& device, std::function<V1_0::Model(void)> create_
223 << std::endl; 217 << std::endl;
224 return; 218 return;
225 } 219 }
220 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
226 ASSERT_NE(nullptr, preparedModel.get()); 221 ASSERT_NE(nullptr, preparedModel.get());
227 222
228 EvaluatePreparedModel(preparedModel, is_ignored, examples); 223 EvaluatePreparedModel(preparedModel, is_ignored, examples);
@@ -235,36 +230,30 @@ void Execute(sp<V1_1::IDevice>& device, std::function<V1_1::Model(void)> create_
235 230
236 // see if service can handle model 231 // see if service can handle model
237 bool fullySupportsModel = false; 232 bool fullySupportsModel = false;
238 ErrorStatus supportedStatus;
239 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
240 ASSERT_NE(nullptr, preparedModelCallback.get());
241
242 Return<void> supportedCall = device->getSupportedOperations_1_1( 233 Return<void> supportedCall = device->getSupportedOperations_1_1(
243 model, [&](ErrorStatus status, const hidl_vec<bool>& supported) { 234 model, [&fullySupportsModel](ErrorStatus status, const hidl_vec<bool>& supported) {
244 supportedStatus = status; 235 ASSERT_EQ(ErrorStatus::NONE, status);
245 ASSERT_NE(0ul, supported.size()); 236 ASSERT_NE(0ul, supported.size());
246 fullySupportsModel = 237 fullySupportsModel =
247 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; }); 238 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; });
248 }); 239 });
249 ASSERT_TRUE(supportedCall.isOk()); 240 ASSERT_TRUE(supportedCall.isOk());
250 ASSERT_EQ(ErrorStatus::NONE, supportedStatus); 241
242 // launch prepare model
243 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
244 ASSERT_NE(nullptr, preparedModelCallback.get());
251 Return<ErrorStatus> prepareLaunchStatus = 245 Return<ErrorStatus> prepareLaunchStatus =
252 device->prepareModel_1_1(model, preparedModelCallback); 246 device->prepareModel_1_1(model, preparedModelCallback);
253 ASSERT_TRUE(prepareLaunchStatus.isOk()); 247 ASSERT_TRUE(prepareLaunchStatus.isOk());
248 ASSERT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
254 249
255 // retrieve prepared model 250 // retrieve prepared model
256 preparedModelCallback->wait(); 251 preparedModelCallback->wait();
257 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus(); 252 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
258 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel(); 253 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
259 if (fullySupportsModel) {
260 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
261 } else {
262 EXPECT_TRUE(prepareReturnStatus == ErrorStatus::NONE ||
263 prepareReturnStatus == ErrorStatus::GENERAL_FAILURE);
264 }
265 254
266 // early termination if vendor service cannot fully prepare model 255 // early termination if vendor service cannot fully prepare model
267 if (!fullySupportsModel && prepareReturnStatus == ErrorStatus::GENERAL_FAILURE) { 256 if (!fullySupportsModel && prepareReturnStatus != ErrorStatus::NONE) {
268 ASSERT_EQ(nullptr, preparedModel.get()); 257 ASSERT_EQ(nullptr, preparedModel.get());
269 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot " 258 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot "
270 "prepare model that it does not support."; 259 "prepare model that it does not support.";
@@ -273,6 +262,7 @@ void Execute(sp<V1_1::IDevice>& device, std::function<V1_1::Model(void)> create_
273 << std::endl; 262 << std::endl;
274 return; 263 return;
275 } 264 }
265 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
276 ASSERT_NE(nullptr, preparedModel.get()); 266 ASSERT_NE(nullptr, preparedModel.get());
277 267
278 // If in relaxed mode, set the error range to be 5ULP of FP16. 268 // If in relaxed mode, set the error range to be 5ULP of FP16.
diff --git a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0BasicTest.cpp b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0BasicTest.cpp
index e838997a..59e5b806 100644
--- a/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0BasicTest.cpp
+++ b/neuralnetworks/1.0/vts/functional/VtsHalNeuralnetworksV1_0BasicTest.cpp
@@ -52,26 +52,51 @@ namespace functional {
52using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback; 52using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback;
53using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback; 53using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback;
54 54
55inline sp<IPreparedModel> doPrepareModelShortcut(sp<IDevice>& device) { 55static void doPrepareModelShortcut(const sp<IDevice>& device, sp<IPreparedModel>* preparedModel) {
56 ASSERT_NE(nullptr, preparedModel);
56 Model model = createValidTestModel_1_0(); 57 Model model = createValidTestModel_1_0();
57 58
59 // see if service can handle model
60 bool fullySupportsModel = false;
61 Return<void> supportedOpsLaunchStatus = device->getSupportedOperations(
62 model, [&fullySupportsModel](ErrorStatus status, const hidl_vec<bool>& supported) {
63 ASSERT_EQ(ErrorStatus::NONE, status);
64 ASSERT_NE(0ul, supported.size());
65 fullySupportsModel =
66 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; });
67 });
68 ASSERT_TRUE(supportedOpsLaunchStatus.isOk());
69
70 // launch prepare model
58 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback(); 71 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
59 if (preparedModelCallback == nullptr) { 72 ASSERT_NE(nullptr, preparedModelCallback.get());
60 return nullptr;
61 }
62 Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback); 73 Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
63 if (!prepareLaunchStatus.isOk() || prepareLaunchStatus != ErrorStatus::NONE) { 74 ASSERT_TRUE(prepareLaunchStatus.isOk());
64 return nullptr; 75 ASSERT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
65 }
66 76
77 // retrieve prepared model
67 preparedModelCallback->wait(); 78 preparedModelCallback->wait();
68 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus(); 79 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
69 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel(); 80 *preparedModel = preparedModelCallback->getPreparedModel();
70 if (prepareReturnStatus != ErrorStatus::NONE || preparedModel == nullptr) { 81
71 return nullptr; 82 // The getSupportedOperations call returns a list of operations that are
83 // guaranteed not to fail if prepareModel is called, and
84 // 'fullySupportsModel' is true i.f.f. the entire model is guaranteed.
85 // If a driver has any doubt that it can prepare an operation, it must
86 // return false. So here, if a driver isn't sure if it can support an
87 // operation, but reports that it successfully prepared the model, the test
88 // can continue.
89 if (!fullySupportsModel && prepareReturnStatus != ErrorStatus::NONE) {
90 ASSERT_EQ(nullptr, preparedModel->get());
91 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot "
92 "prepare model that it does not support.";
93 std::cout << "[ ] Early termination of test because vendor service cannot "
94 "prepare model that it does not support."
95 << std::endl;
96 return;
72 } 97 }
73 98 ASSERT_EQ(ErrorStatus::NONE, prepareReturnStatus);
74 return preparedModel; 99 ASSERT_NE(nullptr, preparedModel->get());
75} 100}
76 101
77// create device test 102// create device test
@@ -132,18 +157,8 @@ TEST_F(NeuralnetworksHidlTest, SupportedOperationsNegativeTest2) {
132 157
133// prepare simple model positive test 158// prepare simple model positive test
134TEST_F(NeuralnetworksHidlTest, SimplePrepareModelPositiveTest) { 159TEST_F(NeuralnetworksHidlTest, SimplePrepareModelPositiveTest) {
135 Model model = createValidTestModel_1_0(); 160 sp<IPreparedModel> preparedModel;
136 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback(); 161 doPrepareModelShortcut(device, &preparedModel);
137 ASSERT_NE(nullptr, preparedModelCallback.get());
138 Return<ErrorStatus> prepareLaunchStatus = device->prepareModel(model, preparedModelCallback);
139 ASSERT_TRUE(prepareLaunchStatus.isOk());
140 EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
141
142 preparedModelCallback->wait();
143 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
144 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
145 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
146 EXPECT_NE(nullptr, preparedModel.get());
147} 162}
148 163
149// prepare simple model negative test 1 164// prepare simple model negative test 1
@@ -184,8 +199,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphPositiveTest) {
184 std::vector<float> expectedData = {6.0f, 8.0f, 10.0f, 12.0f}; 199 std::vector<float> expectedData = {6.0f, 8.0f, 10.0f, 12.0f};
185 const uint32_t OUTPUT = 1; 200 const uint32_t OUTPUT = 1;
186 201
187 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 202 sp<IPreparedModel> preparedModel;
188 ASSERT_NE(nullptr, preparedModel.get()); 203 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
204 if (preparedModel == nullptr) {
205 return;
206 }
189 Request request = createValidTestRequest(); 207 Request request = createValidTestRequest();
190 208
191 auto postWork = [&] { 209 auto postWork = [&] {
@@ -218,8 +236,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphPositiveTest) {
218 236
219// execute simple graph negative test 1 237// execute simple graph negative test 1
220TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) { 238TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) {
221 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 239 sp<IPreparedModel> preparedModel;
222 ASSERT_NE(nullptr, preparedModel.get()); 240 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
241 if (preparedModel == nullptr) {
242 return;
243 }
223 Request request = createInvalidTestRequest1(); 244 Request request = createInvalidTestRequest1();
224 245
225 sp<ExecutionCallback> executionCallback = new ExecutionCallback(); 246 sp<ExecutionCallback> executionCallback = new ExecutionCallback();
@@ -235,8 +256,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) {
235 256
236// execute simple graph negative test 2 257// execute simple graph negative test 2
237TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest2) { 258TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest2) {
238 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 259 sp<IPreparedModel> preparedModel;
239 ASSERT_NE(nullptr, preparedModel.get()); 260 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
261 if (preparedModel == nullptr) {
262 return;
263 }
240 Request request = createInvalidTestRequest2(); 264 Request request = createInvalidTestRequest2();
241 265
242 sp<ExecutionCallback> executionCallback = new ExecutionCallback(); 266 sp<ExecutionCallback> executionCallback = new ExecutionCallback();
diff --git a/neuralnetworks/1.1/vts/functional/VtsHalNeuralnetworksV1_1BasicTest.cpp b/neuralnetworks/1.1/vts/functional/VtsHalNeuralnetworksV1_1BasicTest.cpp
index d2e99a70..17f6744c 100644
--- a/neuralnetworks/1.1/vts/functional/VtsHalNeuralnetworksV1_1BasicTest.cpp
+++ b/neuralnetworks/1.1/vts/functional/VtsHalNeuralnetworksV1_1BasicTest.cpp
@@ -59,27 +59,52 @@ namespace functional {
59using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback; 59using ::android::hardware::neuralnetworks::V1_0::implementation::ExecutionCallback;
60using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback; 60using ::android::hardware::neuralnetworks::V1_0::implementation::PreparedModelCallback;
61 61
62inline sp<IPreparedModel> doPrepareModelShortcut(sp<IDevice>& device) { 62static void doPrepareModelShortcut(const sp<IDevice>& device, sp<IPreparedModel>* preparedModel) {
63 ASSERT_NE(nullptr, preparedModel);
63 Model model = createValidTestModel_1_1(); 64 Model model = createValidTestModel_1_1();
64 65
66 // see if service can handle model
67 bool fullySupportsModel = false;
68 Return<void> supportedOpsLaunchStatus = device->getSupportedOperations_1_1(
69 model, [&fullySupportsModel](ErrorStatus status, const hidl_vec<bool>& supported) {
70 ASSERT_EQ(ErrorStatus::NONE, status);
71 ASSERT_NE(0ul, supported.size());
72 fullySupportsModel =
73 std::all_of(supported.begin(), supported.end(), [](bool valid) { return valid; });
74 });
75 ASSERT_TRUE(supportedOpsLaunchStatus.isOk());
76
77 // launch prepare model
65 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback(); 78 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback();
66 if (preparedModelCallback == nullptr) { 79 ASSERT_NE(nullptr, preparedModelCallback.get());
67 return nullptr;
68 }
69 Return<ErrorStatus> prepareLaunchStatus = 80 Return<ErrorStatus> prepareLaunchStatus =
70 device->prepareModel_1_1(model, preparedModelCallback); 81 device->prepareModel_1_1(model, preparedModelCallback);
71 if (!prepareLaunchStatus.isOk() || prepareLaunchStatus != ErrorStatus::NONE) { 82 ASSERT_TRUE(prepareLaunchStatus.isOk());
72 return nullptr; 83 ASSERT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
73 }
74 84
85 // retrieve prepared model
75 preparedModelCallback->wait(); 86 preparedModelCallback->wait();
76 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus(); 87 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
77 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel(); 88 *preparedModel = preparedModelCallback->getPreparedModel();
78 if (prepareReturnStatus != ErrorStatus::NONE || preparedModel == nullptr) { 89
79 return nullptr; 90 // The getSupportedOperations call returns a list of operations that are
91 // guaranteed not to fail if prepareModel is called, and
92 // 'fullySupportsModel' is true i.f.f. the entire model is guaranteed.
93 // If a driver has any doubt that it can prepare an operation, it must
94 // return false. So here, if a driver isn't sure if it can support an
95 // operation, but reports that it successfully prepared the model, the test
96 // can continue.
97 if (!fullySupportsModel && prepareReturnStatus != ErrorStatus::NONE) {
98 ASSERT_EQ(nullptr, preparedModel->get());
99 LOG(INFO) << "NN VTS: Early termination of test because vendor service cannot "
100 "prepare model that it does not support.";
101 std::cout << "[ ] Early termination of test because vendor service cannot "
102 "prepare model that it does not support."
103 << std::endl;
104 return;
80 } 105 }
81 106 ASSERT_EQ(ErrorStatus::NONE, prepareReturnStatus);
82 return preparedModel; 107 ASSERT_NE(nullptr, preparedModel->get());
83} 108}
84 109
85// create device test 110// create device test
@@ -142,19 +167,8 @@ TEST_F(NeuralnetworksHidlTest, SupportedOperationsNegativeTest2) {
142 167
143// prepare simple model positive test 168// prepare simple model positive test
144TEST_F(NeuralnetworksHidlTest, SimplePrepareModelPositiveTest) { 169TEST_F(NeuralnetworksHidlTest, SimplePrepareModelPositiveTest) {
145 Model model = createValidTestModel_1_1(); 170 sp<IPreparedModel> preparedModel;
146 sp<PreparedModelCallback> preparedModelCallback = new PreparedModelCallback(); 171 doPrepareModelShortcut(device, &preparedModel);
147 ASSERT_NE(nullptr, preparedModelCallback.get());
148 Return<ErrorStatus> prepareLaunchStatus =
149 device->prepareModel_1_1(model, preparedModelCallback);
150 ASSERT_TRUE(prepareLaunchStatus.isOk());
151 EXPECT_EQ(ErrorStatus::NONE, static_cast<ErrorStatus>(prepareLaunchStatus));
152
153 preparedModelCallback->wait();
154 ErrorStatus prepareReturnStatus = preparedModelCallback->getStatus();
155 EXPECT_EQ(ErrorStatus::NONE, prepareReturnStatus);
156 sp<IPreparedModel> preparedModel = preparedModelCallback->getPreparedModel();
157 EXPECT_NE(nullptr, preparedModel.get());
158} 172}
159 173
160// prepare simple model negative test 1 174// prepare simple model negative test 1
@@ -197,8 +211,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphPositiveTest) {
197 std::vector<float> expectedData = {6.0f, 8.0f, 10.0f, 12.0f}; 211 std::vector<float> expectedData = {6.0f, 8.0f, 10.0f, 12.0f};
198 const uint32_t OUTPUT = 1; 212 const uint32_t OUTPUT = 1;
199 213
200 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 214 sp<IPreparedModel> preparedModel;
201 ASSERT_NE(nullptr, preparedModel.get()); 215 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
216 if (preparedModel == nullptr) {
217 return;
218 }
202 Request request = createValidTestRequest(); 219 Request request = createValidTestRequest();
203 220
204 auto postWork = [&] { 221 auto postWork = [&] {
@@ -231,8 +248,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphPositiveTest) {
231 248
232// execute simple graph negative test 1 249// execute simple graph negative test 1
233TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) { 250TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) {
234 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 251 sp<IPreparedModel> preparedModel;
235 ASSERT_NE(nullptr, preparedModel.get()); 252 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
253 if (preparedModel == nullptr) {
254 return;
255 }
236 Request request = createInvalidTestRequest1(); 256 Request request = createInvalidTestRequest1();
237 257
238 sp<ExecutionCallback> executionCallback = new ExecutionCallback(); 258 sp<ExecutionCallback> executionCallback = new ExecutionCallback();
@@ -248,8 +268,11 @@ TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest1) {
248 268
249// execute simple graph negative test 2 269// execute simple graph negative test 2
250TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest2) { 270TEST_F(NeuralnetworksHidlTest, SimpleExecuteGraphNegativeTest2) {
251 sp<IPreparedModel> preparedModel = doPrepareModelShortcut(device); 271 sp<IPreparedModel> preparedModel;
252 ASSERT_NE(nullptr, preparedModel.get()); 272 ASSERT_NO_FATAL_FAILURE(doPrepareModelShortcut(device, &preparedModel));
273 if (preparedModel == nullptr) {
274 return;
275 }
253 Request request = createInvalidTestRequest2(); 276 Request request = createInvalidTestRequest2();
254 277
255 sp<ExecutionCallback> executionCallback = new ExecutionCallback(); 278 sp<ExecutionCallback> executionCallback = new ExecutionCallback();
diff --git a/wifi/supplicant/1.1/vts/functional/Android.bp b/wifi/supplicant/1.1/vts/functional/Android.bp
index 188dba32..3efe15d7 100644
--- a/wifi/supplicant/1.1/vts/functional/Android.bp
+++ b/wifi/supplicant/1.1/vts/functional/Android.bp
@@ -40,6 +40,7 @@ cc_test {
40 srcs: [ 40 srcs: [
41 "VtsHalWifiSupplicantV1_1TargetTest.cpp", 41 "VtsHalWifiSupplicantV1_1TargetTest.cpp",
42 "supplicant_hidl_test.cpp", 42 "supplicant_hidl_test.cpp",
43 "supplicant_sta_network_hidl_test.cpp",
43 ], 44 ],
44 static_libs: [ 45 static_libs: [
45 "VtsHalWifiV1_0TargetTestUtil", 46 "VtsHalWifiV1_0TargetTestUtil",
diff --git a/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.cpp b/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.cpp
index 8cc4a9fd..3f177404 100644
--- a/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.cpp
+++ b/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.cpp
@@ -21,8 +21,13 @@
21#include "supplicant_hidl_test_utils_1_1.h" 21#include "supplicant_hidl_test_utils_1_1.h"
22 22
23using ::android::hardware::wifi::supplicant::V1_1::ISupplicant; 23using ::android::hardware::wifi::supplicant::V1_1::ISupplicant;
24using ::android::hardware::wifi::supplicant::V1_1::ISupplicantStaNetwork;
24using ::android::sp; 25using ::android::sp;
25 26
26sp<ISupplicant> getSupplicant_1_1() { 27sp<ISupplicant> getSupplicant_1_1() {
27 return ISupplicant::castFrom(getSupplicant()); 28 return ISupplicant::castFrom(getSupplicant());
28} 29}
30
31sp<ISupplicantStaNetwork> createSupplicantStaNetwork_1_1() {
32 return ISupplicantStaNetwork::castFrom(createSupplicantStaNetwork());
33}
diff --git a/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.h b/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.h
index c42a35bd..e7ce54ae 100644
--- a/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.h
+++ b/wifi/supplicant/1.1/vts/functional/supplicant_hidl_test_utils_1_1.h
@@ -18,8 +18,12 @@
18#define SUPPLICANT_HIDL_TEST_UTILS_1_1_H 18#define SUPPLICANT_HIDL_TEST_UTILS_1_1_H
19 19
20#include <android/hardware/wifi/supplicant/1.1/ISupplicant.h> 20#include <android/hardware/wifi/supplicant/1.1/ISupplicant.h>
21#include <android/hardware/wifi/supplicant/1.1/ISupplicantStaNetwork.h>
21 22
22android::sp<android::hardware::wifi::supplicant::V1_1::ISupplicant> 23android::sp<android::hardware::wifi::supplicant::V1_1::ISupplicant>
23 getSupplicant_1_1(); 24 getSupplicant_1_1();
24 25
26android::sp<android::hardware::wifi::supplicant::V1_1::ISupplicantStaNetwork>
27 createSupplicantStaNetwork_1_1();
28
25#endif /* SUPPLICANT_HIDL_TEST_UTILS_1_1_H */ 29#endif /* SUPPLICANT_HIDL_TEST_UTILS_1_1_H */
diff --git a/wifi/supplicant/1.1/vts/functional/supplicant_sta_network_hidl_test.cpp b/wifi/supplicant/1.1/vts/functional/supplicant_sta_network_hidl_test.cpp
new file mode 100644
index 00000000..fa52556b
--- /dev/null
+++ b/wifi/supplicant/1.1/vts/functional/supplicant_sta_network_hidl_test.cpp
@@ -0,0 +1,89 @@
1/*
2 * Copyright (C) 2018 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
17#include <android-base/logging.h>
18
19#include <VtsHalHidlTargetTestBase.h>
20#include <android/hardware/wifi/supplicant/1.1/ISupplicantStaNetwork.h>
21
22#include "supplicant_hidl_test_utils.h"
23#include "supplicant_hidl_test_utils_1_1.h"
24
25using ::android::sp;
26using ::android::hardware::hidl_vec;
27using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
28using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode;
29using ::android::hardware::wifi::supplicant::V1_1::ISupplicantStaNetwork;
30namespace {
31constexpr uint8_t kTestIdentity[] = {0x45, 0x67, 0x98, 0x67, 0x56};
32constexpr uint8_t kTestEncryptedIdentity[] = {0x35, 0x37, 0x58, 0x57, 0x26};
33} // namespace
34
35class SupplicantStaNetworkHidlTest
36 : public ::testing::VtsHalHidlTargetTestBase {
37 public:
38 virtual void SetUp() override {
39 startSupplicantAndWaitForHidlService();
40 EXPECT_TRUE(turnOnExcessiveLogging());
41 sta_network_ = createSupplicantStaNetwork_1_1();
42 ASSERT_NE(sta_network_.get(), nullptr);
43 }
44
45 virtual void TearDown() override { stopSupplicant(); }
46
47 protected:
48 // ISupplicantStaNetwork object used for all tests in this fixture.
49 sp<ISupplicantStaNetwork> sta_network_;
50};
51
52/*
53 * Create:
54 * Ensures that an instance of the ISupplicantStaNetwork proxy object is
55 * successfully created.
56 */
57TEST(SupplicantStaNetworkHidlTestNoFixture, Create) {
58 startSupplicantAndWaitForHidlService();
59 EXPECT_NE(nullptr, createSupplicantStaNetwork_1_1().get());
60 stopSupplicant();
61}
62
63/*
64 * Ensure that the encrypted imsi identity is set successfully.
65 */
66TEST_F(SupplicantStaNetworkHidlTest, setEapEncryptedImsiIdentity) {
67 std::vector<uint8_t> encrypted_identity(
68 kTestEncryptedIdentity,
69 kTestEncryptedIdentity + sizeof(kTestEncryptedIdentity));
70 sta_network_->setEapEncryptedImsiIdentity(
71 encrypted_identity, [](const SupplicantStatus &status) {
72 EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
73 });
74}
75
76/*
77 * Ensure that the identity and the encrypted imsi identity are sent
78 * successfully.
79 */
80TEST_F(SupplicantStaNetworkHidlTest, SendNetworkEapIdentityResponse_1_1) {
81 sta_network_->sendNetworkEapIdentityResponse_1_1(
82 std::vector<uint8_t>(kTestIdentity,
83 kTestIdentity + sizeof(kTestIdentity)),
84 std::vector<uint8_t>(kTestEncryptedIdentity,
85 kTestIdentity + sizeof(kTestEncryptedIdentity)),
86 [](const SupplicantStatus &status) {
87 EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
88 });
89}