diff --git a/Android.bp b/Android.bp index 84e11e579d..f582790e82 100644 --- a/Android.bp +++ b/Android.bp @@ -13,11 +13,13 @@ subdirs = [ "tests/expression/1.0", "tests/foo/1.0", "tests/foo/1.0/default", + "tests/foo/1.0/default/lib", "tests/libhwbinder/1.0", "tests/libhwbinder/1.0/default", "tests/msgq/1.0", "tests/pointer/1.0", "tests/pointer/1.0/default", + "tests/pointer/1.0/default/lib", "wifi/1.0", "wifi/supplicant/1.0", ] diff --git a/tests/foo/1.0/default/Android.bp b/tests/foo/1.0/default/Android.bp index 90295a9407..185e5ea465 100644 --- a/tests/foo/1.0/default/Android.bp +++ b/tests/foo/1.0/default/Android.bp @@ -11,6 +11,7 @@ cc_library_shared { shared_libs: [ "libbase", "libhidl", + "libfootest", "libhwbinder", "liblog", "libutils", diff --git a/tests/foo/1.0/default/Foo.cpp b/tests/foo/1.0/default/Foo.cpp index cadb151097..235a12dc2c 100644 --- a/tests/foo/1.0/default/Foo.cpp +++ b/tests/foo/1.0/default/Foo.cpp @@ -4,6 +4,7 @@ #include "Foo.h" #include "FooCallback.h" #include +#include #include #include @@ -108,7 +109,7 @@ Return Foo::callMe( ALOGI("SERVER(Foo) callMe %p calling IFooCallback::heyItsYouIsntIt, " \ "should block for %" PRId64 " seconds", cb.get(), - FooCallback::DELAY_S); + DELAY_S); c[1] = systemTime(); bool answer = cb->heyItsYouIsntIt(cb); c[1] = systemTime() - c[1]; @@ -201,74 +202,6 @@ Return Foo::haveAStringVec( return Void(); } -// NOTE: duplicated code in hidl_test -using std::to_string; - -static std::string to_string(const IFoo::StringMatrix5x3 &M); -static std::string to_string(const IFoo::StringMatrix3x5 &M); -static std::string to_string(const hidl_string &s); - -template -static std::string to_string(const T *elems, size_t n) { - std::string out; - out = "["; - for (size_t i = 0; i < n; ++i) { - if (i > 0) { - out += ", "; - } - out += to_string(elems[i]); - } - out += "]"; - - return out; -} - -template -static std::string to_string(const hidl_array &array) { - return to_string(&array[0], SIZE); -} - -template -static std::string to_string(const hidl_array &array) { - std::string out; - out = "["; - for (size_t i = 0; i < SIZE1; ++i) { - if (i > 0) { - out += ", "; - } - - out += "["; - for (size_t j = 0; j < SIZE2; ++j) { - if (j > 0) { - out += ", "; - } - - out += to_string(array[i][j]); - } - out += "]"; - } - out += "]"; - - return out; -} - -template -static std::string to_string(const hidl_vec &vec) { - return to_string(&vec[0], vec.size()); -} - -static std::string to_string(const IFoo::StringMatrix5x3 &M) { - return to_string(M.s); -} - -static std::string to_string(const IFoo::StringMatrix3x5 &M) { - return to_string(M.s); -} - -static std::string to_string(const hidl_string &s) { - return std::string("'") + s.c_str() + "'"; -} - Return Foo::transposeMe( const hidl_array &in, transposeMe_cb _cb) { ALOGI("SERVER(Foo) transposeMe(%s)", to_string(in).c_str()); @@ -286,48 +219,6 @@ Return Foo::transposeMe( return Void(); } -// end duplicated code - -static std::string QuuxToString(const IFoo::Quux &val) { - std::string s; - - s = "Quux(first='"; - s += val.first.c_str(); - s += "', last='"; - s += val.last.c_str(); - s += "')"; - - return s; -} - -static std::string MultiDimensionalToString(const IFoo::MultiDimensional &val) { - std::string s; - - s += "MultiDimensional("; - - s += "quuxMatrix=["; - - size_t k = 0; - for (size_t i = 0; i < 5; ++i) { - if (i > 0) { - s += ", "; - } - - s += "["; - for (size_t j = 0; j < 3; ++j, ++k) { - if (j > 0) { - s += ", "; - } - - s += QuuxToString(val.quuxMatrix[i][j]); - } - } - s += "]"; - - s += ")"; - - return s; -} Return Foo::callingDrWho( const MultiDimensional &in, callingDrWho_cb _hidl_cb) { diff --git a/tests/foo/1.0/default/FooCallback.cpp b/tests/foo/1.0/default/FooCallback.cpp index d3eef77b13..e4704f2b5c 100644 --- a/tests/foo/1.0/default/FooCallback.cpp +++ b/tests/foo/1.0/default/FooCallback.cpp @@ -3,7 +3,9 @@ #include "FooCallback.h" #include +#include #include +#include namespace android { namespace hardware { diff --git a/tests/foo/1.0/default/FooCallback.h b/tests/foo/1.0/default/FooCallback.h index 5921972484..00233b534d 100644 --- a/tests/foo/1.0/default/FooCallback.h +++ b/tests/foo/1.0/default/FooCallback.h @@ -6,7 +6,6 @@ #include #include -#include namespace android { namespace hardware { namespace tests { @@ -30,11 +29,6 @@ struct FooCallback : public IFooCallback { Return reportResults(int64_t ns, reportResults_cb _hidl_cb) override; Return youBlockedMeFor(const hidl_array& callerBlockedInfo) override; - static constexpr nsecs_t DELAY_S = 1; - static constexpr nsecs_t DELAY_NS = seconds_to_nanoseconds(DELAY_S); - static constexpr nsecs_t TOLERANCE_NS = milliseconds_to_nanoseconds(10); - static constexpr nsecs_t ONEWAY_TOLERANCE_NS = milliseconds_to_nanoseconds(1); - hidl_array invokeInfo; Mutex mLock; Condition mCond; diff --git a/tests/foo/1.0/default/lib/Android.bp b/tests/foo/1.0/default/lib/Android.bp new file mode 100644 index 0000000000..c7ad57ebef --- /dev/null +++ b/tests/foo/1.0/default/lib/Android.bp @@ -0,0 +1,15 @@ +cc_library_shared { + name: "libfootest", + srcs: [ + "FooHelper.cpp" + ], + + shared_libs: [ + "libhidl", + "libhwbinder", + "android.hardware.tests.foo@1.0", + ], + local_include_dirs: ["include/hidl-test"], + export_include_dirs: ["include"], + +} diff --git a/tests/foo/1.0/default/lib/FooHelper.cpp b/tests/foo/1.0/default/lib/FooHelper.cpp new file mode 100644 index 0000000000..8c5ff942c9 --- /dev/null +++ b/tests/foo/1.0/default/lib/FooHelper.cpp @@ -0,0 +1,57 @@ +#include "FooHelper.h" + +namespace android { + +std::string to_string(const IFoo::StringMatrix5x3 &M) { + return to_string(M.s); +} + +std::string to_string(const IFoo::StringMatrix3x5 &M) { + return to_string(M.s); +} + +std::string to_string(const hidl_string &s) { + return std::string("'") + s.c_str() + "'"; +} + +std::string QuuxToString(const IFoo::Quux &val) { + std::string s; + + s = "Quux(first='"; + s += val.first.c_str(); + s += "', last='"; + s += val.last.c_str(); + s += "')"; + + return s; +} + +std::string MultiDimensionalToString(const IFoo::MultiDimensional &val) { + std::string s; + + s += "MultiDimensional("; + + s += "quuxMatrix=["; + + size_t k = 0; + for (size_t i = 0; i < 5; ++i) { + if (i > 0) { + s += ", "; + } + + s += "["; + for (size_t j = 0; j < 3; ++j, ++k) { + if (j > 0) { + s += ", "; + } + + s += QuuxToString(val.quuxMatrix[i][j]); + } + } + s += "]"; + + s += ")"; + + return s; +} +} // namespace android diff --git a/tests/foo/1.0/default/lib/include/hidl-test/FooHelper.h b/tests/foo/1.0/default/lib/include/hidl-test/FooHelper.h new file mode 100644 index 0000000000..09b0557097 --- /dev/null +++ b/tests/foo/1.0/default/lib/include/hidl-test/FooHelper.h @@ -0,0 +1,79 @@ +#ifndef ANDROID_HIDL_TEST_FOO_HELPER_H +#define ANDROID_HIDL_TEST_FOO_HELPER_H +#include +#include +#include + +namespace android { + +using std::to_string; +using hardware::hidl_string; +using hardware::hidl_vec; +using hardware::hidl_array; +using hardware::tests::foo::V1_0::IFoo; + +static constexpr nsecs_t DELAY_S = 1; +static constexpr nsecs_t DELAY_NS = seconds_to_nanoseconds(DELAY_S); +static constexpr nsecs_t TOLERANCE_NS = milliseconds_to_nanoseconds(10); +static constexpr nsecs_t ONEWAY_TOLERANCE_NS = milliseconds_to_nanoseconds(1); + +std::string to_string(const IFoo::StringMatrix5x3 &M); +std::string to_string(const IFoo::StringMatrix3x5 &M); +// Add quotes around s. For testing purposes only. +std::string to_string(const hidl_string &s); + +template +std::string to_string(const T *elems, size_t n) { + std::string out; + out = "["; + for (size_t i = 0; i < n; ++i) { + if (i > 0) { + out += ", "; + } + out += to_string(elems[i]); + } + out += "]"; + + return out; +} + +template +std::string to_string(const hidl_array &array) { + return to_string(&array[0], SIZE); +} + +template +std::string to_string(const hidl_array &array) { + std::string out; + out = "["; + for (size_t i = 0; i < SIZE1; ++i) { + if (i > 0) { + out += ", "; + } + + out += "["; + for (size_t j = 0; j < SIZE2; ++j) { + if (j > 0) { + out += ", "; + } + + out += to_string(array[i][j]); + } + out += "]"; + } + out += "]"; + + return out; +} + +template +std::string to_string(const hidl_vec &vec) { + return to_string(&vec[0], vec.size()); +} + +std::string QuuxToString(const IFoo::Quux &val); + +std::string MultiDimensionalToString(const IFoo::MultiDimensional &val); + +} // namespace android +#endif // ANDROID_HIDL_TEST_TEST_HELPER_H diff --git a/tests/pointer/1.0/default/Android.bp b/tests/pointer/1.0/default/Android.bp index cee6c91285..081b7aa3ed 100644 --- a/tests/pointer/1.0/default/Android.bp +++ b/tests/pointer/1.0/default/Android.bp @@ -11,6 +11,7 @@ cc_library_shared { shared_libs: [ "libbase", "libhidl", + "libpointertest", "libhwbinder", "liblog", "libutils", diff --git a/tests/pointer/1.0/default/Graph.cpp b/tests/pointer/1.0/default/Graph.cpp index a43df810e0..5aa2243fff 100644 --- a/tests/pointer/1.0/default/Graph.cpp +++ b/tests/pointer/1.0/default/Graph.cpp @@ -1,5 +1,6 @@ #include "Graph.h" #include +#include #define PUSH_ERROR_IF(__cond__) if(__cond__) { errors.push_back(std::to_string(__LINE__) + ": " + #__cond__); } @@ -10,38 +11,6 @@ namespace pointer { namespace V1_0 { namespace implementation { -static void simpleGraph(IGraph::Graph& g) { - g.nodes.resize(2); - g.edges.resize(1); - g.nodes[0].data = 10; - g.nodes[1].data = 20; - g.edges[0].left = &g.nodes[0]; - g.edges[0].right = &g.nodes[1]; -} - -static bool isSimpleGraph(const IGraph::Graph &g) { - if(g.nodes.size() != 2) return false; - if(g.edges.size() != 1) return false; - if(g.nodes[0].data != 10) return false; - if(g.nodes[1].data != 20) return false; - if(g.edges[0].left != &g.nodes[0]) return false; - if(g.edges[0].right != &g.nodes[1]) return false; - return true; -} - -static void logSimpleGraph(const char *prefix, const IGraph::Graph& g) { - ALOGI("%s Graph %p, %d nodes, %d edges", prefix, &g, (int)g.nodes.size(), (int)g.edges.size()); - std::ostringstream os; - for(size_t i = 0; i < g.nodes.size(); i++) - os << &g.nodes[i] << " = " << g.nodes[i].data << ", "; - ALOGI("%s Nodes: [%s]", prefix, os.str().c_str()); - os.str(""); - os.clear(); - for(size_t i = 0; i < g.edges.size(); i++) - os << g.edges[i].left << " -> " << g.edges[i].right << ", "; - ALOGI("%s Edges: [%s]", prefix, os.str().c_str()); -} - // Methods from ::android::hardware::tests::pointer::V1_0::IGraph follow. Return Graph::passAGraph(const IGraph::Graph& g) { ALOGI("SERVER(Graph) passAGraph start."); diff --git a/tests/pointer/1.0/default/lib/Android.bp b/tests/pointer/1.0/default/lib/Android.bp new file mode 100644 index 0000000000..efc61df275 --- /dev/null +++ b/tests/pointer/1.0/default/lib/Android.bp @@ -0,0 +1,17 @@ +cc_library_shared { + name: "libpointertest", + srcs: [ + "PointerHelper.cpp" + ], + + shared_libs: [ + "libbase", + "libhidl", + "libhwbinder", + "liblog", + "android.hardware.tests.pointer@1.0", + ], + local_include_dirs: ["include/hidl-test"], + export_include_dirs: ["include"], + +} diff --git a/tests/pointer/1.0/default/lib/PointerHelper.cpp b/tests/pointer/1.0/default/lib/PointerHelper.cpp new file mode 100644 index 0000000000..ed7d49ac36 --- /dev/null +++ b/tests/pointer/1.0/default/lib/PointerHelper.cpp @@ -0,0 +1,37 @@ +#define LOG_TAG "hidl_test" +#include +#include "PointerHelper.h" +namespace android { + +void simpleGraph(IGraph::Graph& g) { + g.nodes.resize(2); + g.edges.resize(1); + g.nodes[0].data = 10; + g.nodes[1].data = 20; + g.edges[0].left = &g.nodes[0]; + g.edges[0].right = &g.nodes[1]; +} + +bool isSimpleGraph(const IGraph::Graph &g) { + if(g.nodes.size() != 2) return false; + if(g.edges.size() != 1) return false; + if(g.nodes[0].data != 10) return false; + if(g.nodes[1].data != 20) return false; + if(g.edges[0].left != &g.nodes[0]) return false; + if(g.edges[0].right != &g.nodes[1]) return false; + return true; +} + +void logSimpleGraph(const char *prefix, const IGraph::Graph& g) { + ALOGI("%s Graph %p, %d nodes, %d edges", prefix, &g, (int)g.nodes.size(), (int)g.edges.size()); + std::ostringstream os; + for(size_t i = 0; i < g.nodes.size(); i++) + os << &g.nodes[i] << " = " << g.nodes[i].data << ", "; + ALOGI("%s Nodes: [%s]", prefix, os.str().c_str()); + os.str(""); + os.clear(); + for(size_t i = 0; i < g.edges.size(); i++) + os << g.edges[i].left << " -> " << g.edges[i].right << ", "; + ALOGI("%s Edges: [%s]", prefix, os.str().c_str()); +} +} // namespace android diff --git a/tests/pointer/1.0/default/lib/include/hidl-test/PointerHelper.h b/tests/pointer/1.0/default/lib/include/hidl-test/PointerHelper.h new file mode 100644 index 0000000000..cd2edcb6fa --- /dev/null +++ b/tests/pointer/1.0/default/lib/include/hidl-test/PointerHelper.h @@ -0,0 +1,15 @@ +#ifndef ANDROID_HIDL_TEST_POINTER_HELPER_H +#define ANDROID_HIDL_TEST_POINTER_HELPER_H + +#include + +using ::android::hardware::tests::pointer::V1_0::IGraph; + +namespace android { + +void simpleGraph(IGraph::Graph& g); +bool isSimpleGraph(const IGraph::Graph &g); +void logSimpleGraph(const char *prefix, const IGraph::Graph& g); + +} // namespace android +#endif // ANDROID_HIDL_TEST_POINTER_HELPER_H