diff options
author | Nirav Atre <natre@google.com> | 2018-06-08 16:51:29 -0700 |
---|---|---|
committer | Nirav Atre <natre@google.com> | 2018-06-26 15:42:54 -0700 |
commit | b418616ea468da83886c19c26528961ddc99a773 (patch) | |
tree | e9211e380e02407a9def2fbbdb9e156529172b79 /tests | |
parent | 485c5cd192e6466a9c840aaaad54ebac373d6c18 (diff) | |
download | android_hardware_interfaces-b418616ea468da83886c19c26528961ddc99a773.tar.gz android_hardware_interfaces-b418616ea468da83886c19c26528961ddc99a773.tar.bz2 android_hardware_interfaces-b418616ea468da83886c19c26528961ddc99a773.zip |
Test HAL for HIDL safe_union construct
This change implements a basic HAL and server-side functionality to test
the HIDL implementation of safe unions.
Bug: 79878527
Test: Ran make, new tests in hidl_test/ pass successfully (included in a
separate CL).
Change-Id: Ia420137bc1dc0a188e04176081c7f5418e74449c
Diffstat (limited to 'tests')
-rw-r--r-- | tests/safeunion/1.0/.hidl_for_test | 0 | ||||
-rw-r--r-- | tests/safeunion/1.0/Android.bp | 21 | ||||
-rw-r--r-- | tests/safeunion/1.0/ISafeUnion.hal | 38 | ||||
-rw-r--r-- | tests/safeunion/1.0/default/Android.bp | 21 | ||||
-rw-r--r-- | tests/safeunion/1.0/default/SafeUnion.cpp | 204 | ||||
-rw-r--r-- | tests/safeunion/1.0/default/SafeUnion.h | 68 | ||||
-rw-r--r-- | tests/safeunion/1.0/types.hal | 67 |
7 files changed, 419 insertions, 0 deletions
diff --git a/tests/safeunion/1.0/.hidl_for_test b/tests/safeunion/1.0/.hidl_for_test new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/safeunion/1.0/.hidl_for_test diff --git a/tests/safeunion/1.0/Android.bp b/tests/safeunion/1.0/Android.bp new file mode 100644 index 000000000..5082f4721 --- /dev/null +++ b/tests/safeunion/1.0/Android.bp @@ -0,0 +1,21 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "android.hardware.tests.safeunion@1.0", + root: "android.hardware", + srcs: [ + "types.hal", + "ISafeUnion.hal", + ], + interfaces: [ + "android.hidl.base@1.0", + ], + types: [ + "EmptySafeUnion", + "SmallSafeUnion", + "LargeSafeUnion", + "MiscTypesSafeUnion", + ], + gen_java: false, +} + diff --git a/tests/safeunion/1.0/ISafeUnion.hal b/tests/safeunion/1.0/ISafeUnion.hal new file mode 100644 index 000000000..91d8b8cd6 --- /dev/null +++ b/tests/safeunion/1.0/ISafeUnion.hal @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2018 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.hardware.tests.safeunion@1.0; + +interface ISafeUnion { + newLargeSafeUnion() generates (LargeSafeUnion myUnion); + setA(LargeSafeUnion myUnion, int8_t a) generates (LargeSafeUnion myUnion); + setB(LargeSafeUnion myUnion, uint16_t b) generates (LargeSafeUnion myUnion); + setC(LargeSafeUnion myUnion, int32_t c) generates (LargeSafeUnion myUnion); + setD(LargeSafeUnion myUnion, uint64_t d) generates (LargeSafeUnion myUnion); + setE(LargeSafeUnion myUnion, int8_t[13] e) generates (LargeSafeUnion myUnion); + setF(LargeSafeUnion myUnion, int64_t[5] f) generates (LargeSafeUnion myUnion); + setG(LargeSafeUnion myUnion, string g) generates (LargeSafeUnion myUnion); + setH(LargeSafeUnion myUnion, vec<bool> h) generates (LargeSafeUnion myUnion); + setI(LargeSafeUnion myUnion, vec<uint64_t> i) generates (LargeSafeUnion myUnion); + setJ(LargeSafeUnion myUnion, J j) generates (LargeSafeUnion myUnion); + setK(LargeSafeUnion myUnion, K k) generates (LargeSafeUnion myUnion); + setL(LargeSafeUnion myUnion, SmallSafeUnion l) generates (LargeSafeUnion myUnion); + + newMiscTypesSafeUnion() generates (MiscTypesSafeUnion myUnion); + setMiscA(MiscTypesSafeUnion myUnion, memory a) generates (MiscTypesSafeUnion myUnion); + setMiscB(MiscTypesSafeUnion myUnion, handle b) generates (MiscTypesSafeUnion myUnion); + setMiscC(MiscTypesSafeUnion myUnion, bitfield<BitField> c) generates (MiscTypesSafeUnion myUnion); +}; diff --git a/tests/safeunion/1.0/default/Android.bp b/tests/safeunion/1.0/default/Android.bp new file mode 100644 index 000000000..fc2443e7d --- /dev/null +++ b/tests/safeunion/1.0/default/Android.bp @@ -0,0 +1,21 @@ +cc_library { + name: "android.hardware.tests.safeunion@1.0-impl", + defaults: ["hidl_defaults"], + relative_install_path: "hw", + srcs: [ + "SafeUnion.cpp", + ], + shared_libs: [ + "libbase", + "libcutils", + "libhidlbase", + "libhidltransport", + "libhwbinder", + "liblog", + "libutils", + ], + + // These are static libs only for testing purposes and portability. Shared + // libs should be used on device. + static_libs: ["android.hardware.tests.safeunion@1.0"], +} diff --git a/tests/safeunion/1.0/default/SafeUnion.cpp b/tests/safeunion/1.0/default/SafeUnion.cpp new file mode 100644 index 000000000..d968987f1 --- /dev/null +++ b/tests/safeunion/1.0/default/SafeUnion.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2018 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. + */ + +#include "SafeUnion.h" +#include <android-base/logging.h> + +namespace android { +namespace hardware { +namespace tests { +namespace safeunion { +namespace V1_0 { +namespace implementation { + +// Methods from ::android::hardware::tests::safeunion::V1_0::ISafeUnion follow. +Return<void> SafeUnion::newLargeSafeUnion(newLargeSafeUnion_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) newLargeSafeUnion()"; + + LargeSafeUnion ret; + _hidl_cb(ret); + return Void(); +} + +Return<void> SafeUnion::setA(const LargeSafeUnion& myUnion, int8_t a, setA_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setA(myUnion, " << a << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.a(a); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setB(const LargeSafeUnion& myUnion, uint16_t b, setB_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setB(myUnion, " << b << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.b(b); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setC(const LargeSafeUnion& myUnion, int32_t c, setC_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setC(myUnion, " << c << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.c(c); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setD(const LargeSafeUnion& myUnion, uint64_t d, setD_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setD(myUnion, " << d << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.d(d); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setE(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const hidl_array<int8_t, 13>& e, setE_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setE(myUnion, " << toString(e) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.e(e); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setF(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const hidl_array<int64_t, 5>& f, setF_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setF(myUnion, " << toString(f) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.f(f); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setG(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const hidl_string& g, setG_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setG(myUnion, " << toString(g) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.g(g); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setH(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const hidl_vec<bool>& h, setH_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setH(myUnion, " << toString(h) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.h(h); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setI(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const hidl_vec<uint64_t>& i, setI_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setI(myUnion, " << toString(i) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.i(i); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setJ(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const J& j, setJ_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setJ(myUnion, " << toString(j) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.j(j); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setK(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const LargeSafeUnion::K& k, setK_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setK(myUnion, " << toString(k) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.k(k); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setL(const ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion& myUnion, const ::android::hardware::tests::safeunion::V1_0::SmallSafeUnion& l, setL_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setL(myUnion, " << toString(l) << ")"; + + LargeSafeUnion myNewUnion = myUnion; + myNewUnion.l(l); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::newMiscTypesSafeUnion(newMiscTypesSafeUnion_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) newMiscTypesSafeUnion()"; + + MiscTypesSafeUnion ret; + _hidl_cb(ret); + return Void(); +} + +Return<void> SafeUnion::setMiscA(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, const hidl_memory& a, setMiscA_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setMiscA(myUnion, " << toString(a) << ")"; + + MiscTypesSafeUnion myNewUnion = myUnion; + myNewUnion.a(a); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setMiscB(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, const hidl_handle& b, setMiscB_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setMiscB(myUnion, " << toString(b) << ")"; + + MiscTypesSafeUnion myNewUnion = myUnion; + myNewUnion.b(b); + + _hidl_cb(myNewUnion); + return Void(); +} + +Return<void> SafeUnion::setMiscC(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, hidl_bitfield<BitField> c, setMiscC_cb _hidl_cb) { + LOG(INFO) << "SERVER(SafeUnion) setMiscC(myUnion, " << c << ")"; + + MiscTypesSafeUnion myNewUnion = myUnion; + myNewUnion.c(c); + + _hidl_cb(myNewUnion); + return Void(); +} + + +ISafeUnion* HIDL_FETCH_ISafeUnion(const char* /* name */) { + return new SafeUnion(); +} + +} // namespace implementation +} // namespace V1_0 +} // namespace safeunion +} // namespace tests +} // namespace hardware +} // namespace android diff --git a/tests/safeunion/1.0/default/SafeUnion.h b/tests/safeunion/1.0/default/SafeUnion.h new file mode 100644 index 000000000..6b9997a46 --- /dev/null +++ b/tests/safeunion/1.0/default/SafeUnion.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018 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. + */ + +#ifndef ANDROID_HARDWARE_TESTS_SAFEUNION_V1_0_SAFEUNION_H +#define ANDROID_HARDWARE_TESTS_SAFEUNION_V1_0_SAFEUNION_H + +#include <android/hardware/tests/safeunion/1.0/ISafeUnion.h> +#include <hidl/MQDescriptor.h> +#include <hidl/Status.h> + +namespace android { +namespace hardware { +namespace tests { +namespace safeunion { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::hardware::tests::safeunion::V1_0::SmallSafeUnion; +using ::android::hardware::tests::safeunion::V1_0::LargeSafeUnion; +using ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion; + +struct SafeUnion : public ISafeUnion { + // Methods from ::android::hardware::tests::safeunion::V1_0::ISafeUnion follow. + Return<void> newLargeSafeUnion(newLargeSafeUnion_cb _hidl_cb) override; + Return<void> setA(const LargeSafeUnion& myUnion, int8_t a, setA_cb _hidl_cb) override; + Return<void> setB(const LargeSafeUnion& myUnion, uint16_t b, setB_cb _hidl_cb) override; + Return<void> setC(const LargeSafeUnion& myUnion, int32_t c, setC_cb _hidl_cb) override; + Return<void> setD(const LargeSafeUnion& myUnion, uint64_t d, setD_cb _hidl_cb) override; + Return<void> setE(const LargeSafeUnion& myUnion, const hidl_array<int8_t, 13>& e, setE_cb _hidl_cb) override; + Return<void> setF(const LargeSafeUnion& myUnion, const hidl_array<int64_t, 5>& f, setF_cb _hidl_cb) override; + Return<void> setG(const LargeSafeUnion& myUnion, const hidl_string& g, setG_cb _hidl_cb) override; + Return<void> setH(const LargeSafeUnion& myUnion, const hidl_vec<bool>& h, setH_cb _hidl_cb) override; + Return<void> setI(const LargeSafeUnion& myUnion, const hidl_vec<uint64_t>& i, setI_cb _hidl_cb) override; + Return<void> setJ(const LargeSafeUnion& myUnion, const J& j, setJ_cb _hidl_cb) override; + Return<void> setK(const LargeSafeUnion& myUnion, const LargeSafeUnion::K& k, setK_cb _hidl_cb) override; + Return<void> setL(const LargeSafeUnion& myUnion, const SmallSafeUnion& l, setL_cb _hidl_cb) override; + + Return<void> newMiscTypesSafeUnion(newMiscTypesSafeUnion_cb _hidl_cb) override; + Return<void> setMiscA(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, const hidl_memory& a, setMiscA_cb _hidl_cb) override; + Return<void> setMiscB(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, const hidl_handle& b, setMiscB_cb _hidl_cb) override; + Return<void> setMiscC(const ::android::hardware::tests::safeunion::V1_0::MiscTypesSafeUnion& myUnion, hidl_bitfield<BitField> c, setMiscC_cb _hidl_cb) override; +}; + +extern "C" ISafeUnion* HIDL_FETCH_ISafeUnion(const char* name); + +} // namespace implementation +} // namespace V1_0 +} // namespace safeunion +} // namespace tests +} // namespace hardware +} // namespace android + +#endif // ANDROID_HARDWARE_TESTS_SAFEUNION_V1_0_SAFEUNION_H diff --git a/tests/safeunion/1.0/types.hal b/tests/safeunion/1.0/types.hal new file mode 100644 index 000000000..a70079d74 --- /dev/null +++ b/tests/safeunion/1.0/types.hal @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2018 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.hardware.tests.safeunion@1.0; + +enum BitField : uint8_t { + V0 = 1 << 0, + V1 = 1 << 1, + V2 = 1 << 2, + V3 = 1 << 3, +}; + +struct J { + vec<uint32_t> j1; + uint8_t[65] j2; + string j3; +}; + +safe_union EmptySafeUnion { +}; + +safe_union SmallSafeUnion { + uint8_t a; +}; + +safe_union LargeSafeUnion { + int8_t a; + uint16_t b; + int32_t c; + uint64_t d; + + int8_t[13] e; + int64_t[5] f; + + string g; + vec<bool> h; + vec<uint64_t> i; + + J j; + struct K { + uint8_t k1; + uint64_t k2; + } k; + + SmallSafeUnion l; +}; + +// TODO(b/110269925): Test more HIDL types. Missing: +// death_recipient, fmq_{sync,unsync}, pointer, ref. +safe_union MiscTypesSafeUnion { + memory a; + handle b; + bitfield<BitField> c; +}; |