summaryrefslogtreecommitdiffstats
path: root/device/hid/hid_connection_unittest.cc
diff options
context:
space:
mode:
authorikarienator@chromium.org <ikarienator@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-30 10:41:05 +0000
committerikarienator@chromium.org <ikarienator@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-30 10:41:05 +0000
commita2c724ab72ccebb6d78e228caefd36b100e8308a (patch)
treef023f4383558055b3a41f6183983da7e9183e1ee /device/hid/hid_connection_unittest.cc
parent441e25cdf56a650df64a17416314aeee1598ccff (diff)
downloadchromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.zip
chromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.tar.gz
chromium_src-a2c724ab72ccebb6d78e228caefd36b100e8308a.tar.bz2
HID backend
BUG=290428 Review URL: https://codereview.chromium.org/143883005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@247926 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'device/hid/hid_connection_unittest.cc')
-rw-r--r--device/hid/hid_connection_unittest.cc139
1 files changed, 139 insertions, 0 deletions
diff --git a/device/hid/hid_connection_unittest.cc b/device/hid/hid_connection_unittest.cc
new file mode 100644
index 0000000..40cc478
--- /dev/null
+++ b/device/hid/hid_connection_unittest.cc
@@ -0,0 +1,139 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "device/hid/hid_connection.h"
+#include "device/hid/hid_service.h"
+#include "net/base/io_buffer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// TODO(rockot): Enable tests once ChromeOS HID testing hardware is in place.
+#if defined(OS_CHROMEOS)
+#define MAYBE_Create DISABLED_Create
+#define MAYBE_Read DISABLED_Read
+#define MAYBE_Write DISABLED_Write
+#else
+#define MAYBE_Create Create
+#define MAYBE_Read Read
+#define MAYBE_Write Write
+#endif
+
+namespace device {
+
+namespace {
+
+using net::IOBuffer;
+
+const int kUSBLUFADemoVID = 0x03eb;
+const int kUSBLUFADemoPID = 0x204f;
+const uint64_t kReport = 0x0903a65d030f8ec9ULL;
+
+int g_read_times = 0;
+void Read(scoped_refptr<HidConnection> conn);
+
+void OnRead(scoped_refptr<HidConnection> conn,
+ scoped_refptr<net::IOBuffer> buffer,
+ bool success,
+ size_t bytes) {
+ EXPECT_TRUE(success);
+ if (success) {
+ g_read_times++;
+ EXPECT_EQ(8U, bytes);
+ if (bytes == 8) {
+ uint64_t* data = reinterpret_cast<uint64_t*>(buffer->data());
+ EXPECT_EQ(kReport, *data);
+ } else {
+ base::MessageLoop::current()->Quit();
+ }
+ } else {
+ LOG(ERROR) << "~";
+ g_read_times++;
+ }
+
+ if (g_read_times < 3){
+ base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(Read, conn));
+ } else {
+ base::MessageLoop::current()->Quit();
+ }
+}
+
+void Read(scoped_refptr<HidConnection> conn) {
+ scoped_refptr<IOBuffer> buffer(new IOBuffer(8));
+ conn->Read(buffer, 8, base::Bind(OnRead, conn, buffer));
+}
+
+void OnWriteNormal(bool success,
+ size_t bytes) {
+ ASSERT_TRUE(success);
+ base::MessageLoop::current()->Quit();
+}
+
+void WriteNormal(scoped_refptr<HidConnection> conn) {
+ scoped_refptr<IOBuffer> buffer(new IOBuffer(8));
+ *(int64_t*)buffer->data() = kReport;
+
+ conn->Write(buffer, 8, base::Bind(OnWriteNormal));
+}
+
+} // namespace
+
+class HidConnectionTest : public testing::Test {
+ protected:
+ virtual void SetUp() OVERRIDE {
+ message_loop_.reset(new base::MessageLoopForIO());
+ service_.reset(HidService::CreateInstance());
+ ASSERT_TRUE(service_);
+
+ std::vector<HidDeviceInfo> devices;
+ service_->GetDevices(&devices);
+ ASSERT_GT(devices.size(), 0U) << "No device found";
+ for (std::vector<HidDeviceInfo>::iterator it = devices.begin();
+ it != devices.end();
+ ++it) {
+ if (it->vendor_id == kUSBLUFADemoVID &&
+ it->product_id == kUSBLUFADemoPID) {
+ device_id_ = it->device_id;
+ return;
+ }
+ }
+ ASSERT_TRUE(false) << "Failed to find target device";
+ }
+
+ virtual void TearDown() OVERRIDE {
+ service_.reset(NULL);
+ message_loop_.reset(NULL);
+ }
+
+ std::string device_id_;
+ scoped_ptr<base::MessageLoopForIO> message_loop_;
+ scoped_ptr<HidService> service_;
+};
+
+TEST_F(HidConnectionTest, MAYBE_Create) {
+ scoped_refptr<HidConnection> connection = service_->Connect(device_id_);
+ ASSERT_TRUE(connection);
+}
+
+TEST_F(HidConnectionTest, MAYBE_Read) {
+ scoped_refptr<HidConnection> connection = service_->Connect(device_id_);
+
+ ASSERT_TRUE(connection);
+ message_loop_->PostTask(FROM_HERE, base::Bind(Read, connection));
+ message_loop_->Run();
+}
+
+TEST_F(HidConnectionTest, MAYBE_Write) {
+ scoped_refptr<HidConnection> connection = service_->Connect(device_id_);
+
+ ASSERT_TRUE(connection);
+ message_loop_->PostTask(FROM_HERE, base::Bind(WriteNormal, connection));
+ message_loop_->Run();
+}
+
+} // namespace device