hidl_test: move duplicated code to shared lib

Test: hidl_test

Change-Id: Ia68b78d44d68a6b254c686afe64faf7cc89510d7
This commit is contained in:
Yifan Hong
2016-10-17 11:38:15 -07:00
parent 382a80fd8b
commit 30dc3dee3c
13 changed files with 229 additions and 149 deletions

View File

@@ -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",
]

View File

@@ -11,6 +11,7 @@ cc_library_shared {
shared_libs: [
"libbase",
"libhidl",
"libfootest",
"libhwbinder",
"liblog",
"libutils",

View File

@@ -4,6 +4,7 @@
#include "Foo.h"
#include "FooCallback.h"
#include <android-base/logging.h>
#include <hidl-test/FooHelper.h>
#include <inttypes.h>
#include <utils/Timers.h>
@@ -108,7 +109,7 @@ Return<void> 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<void> 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<typename T>
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<typename T, size_t SIZE>
static std::string to_string(const hidl_array<T, SIZE> &array) {
return to_string(&array[0], SIZE);
}
template<typename T, size_t SIZE1, size_t SIZE2>
static std::string to_string(const hidl_array<T, SIZE1, SIZE2> &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<typename T>
static std::string to_string(const hidl_vec<T> &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<void> Foo::transposeMe(
const hidl_array<float, 3, 5> &in, transposeMe_cb _cb) {
ALOGI("SERVER(Foo) transposeMe(%s)", to_string(in).c_str());
@@ -286,48 +219,6 @@ Return<void> 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<void> Foo::callingDrWho(
const MultiDimensional &in, callingDrWho_cb _hidl_cb) {

View File

@@ -3,7 +3,9 @@
#include "FooCallback.h"
#include <android-base/logging.h>
#include <hidl-test/FooHelper.h>
#include <inttypes.h>
#include <utils/Timers.h>
namespace android {
namespace hardware {

View File

@@ -6,7 +6,6 @@
#include <hidl/MQDescriptor.h>
#include <utils/Condition.h>
#include <utils/Timers.h>
namespace android {
namespace hardware {
namespace tests {
@@ -30,11 +29,6 @@ struct FooCallback : public IFooCallback {
Return<void> reportResults(int64_t ns, reportResults_cb _hidl_cb) override;
Return<void> youBlockedMeFor(const hidl_array<int64_t, 3 /* 3 */>& 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, 3> invokeInfo;
Mutex mLock;
Condition mCond;

View File

@@ -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"],
}

View File

@@ -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

View File

@@ -0,0 +1,79 @@
#ifndef ANDROID_HIDL_TEST_FOO_HELPER_H
#define ANDROID_HIDL_TEST_FOO_HELPER_H
#include <string>
#include <android/hardware/tests/foo/1.0/IFoo.h>
#include <utils/Timers.h>
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<typename T>
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<typename T, size_t SIZE>
std::string to_string(const hidl_array<T, SIZE> &array) {
return to_string(&array[0], SIZE);
}
template<typename T, size_t SIZE1, size_t SIZE2>
std::string to_string(const hidl_array<T, SIZE1, SIZE2> &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<typename T>
std::string to_string(const hidl_vec<T> &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

View File

@@ -11,6 +11,7 @@ cc_library_shared {
shared_libs: [
"libbase",
"libhidl",
"libpointertest",
"libhwbinder",
"liblog",
"libutils",

View File

@@ -1,5 +1,6 @@
#include "Graph.h"
#include <android-base/logging.h>
#include <hidl-test/PointerHelper.h>
#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<void> Graph::passAGraph(const IGraph::Graph& g) {
ALOGI("SERVER(Graph) passAGraph start.");

View File

@@ -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"],
}

View File

@@ -0,0 +1,37 @@
#define LOG_TAG "hidl_test"
#include <android-base/logging.h>
#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

View File

@@ -0,0 +1,15 @@
#ifndef ANDROID_HIDL_TEST_POINTER_HELPER_H
#define ANDROID_HIDL_TEST_POINTER_HELPER_H
#include <android/hardware/tests/pointer/1.0/IGraph.h>
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