mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 08:43:33 +08:00
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
/*
|
|
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include "can.hpp"
|
|
|
|
TEST(CanIOManager, CanDriverMock)
|
|
{
|
|
using uavcan::CanFrame;
|
|
|
|
SystemClockMock clockmock;
|
|
CanDriverMock driver(3, clockmock);
|
|
|
|
ASSERT_EQ(3, driver.getNumIfaces());
|
|
|
|
// All WR, no RD
|
|
int mask_wr = 7;
|
|
int mask_rd = 7;
|
|
EXPECT_LT(0, driver.select(mask_wr, mask_rd, uavcan::MonotonicTime::fromUSec(100)));
|
|
EXPECT_EQ(7, mask_wr);
|
|
EXPECT_EQ(0, mask_rd);
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
driver.ifaces.at(i).writeable = false;
|
|
|
|
// No WR, no RD
|
|
mask_wr = 7;
|
|
mask_rd = 7;
|
|
EXPECT_EQ(0, driver.select(mask_wr, mask_rd, uavcan::MonotonicTime::fromUSec(100)));
|
|
EXPECT_EQ(0, mask_wr);
|
|
EXPECT_EQ(0, mask_rd);
|
|
EXPECT_EQ(100, clockmock.monotonic);
|
|
EXPECT_EQ(100, clockmock.utc);
|
|
|
|
// No WR, #1 RD
|
|
const CanFrame fr1 = makeCanFrame(123, "foo", EXT);
|
|
driver.ifaces.at(1).pushRx(fr1);
|
|
mask_wr = 7;
|
|
mask_rd = 6;
|
|
EXPECT_LT(0, driver.select(mask_wr, mask_rd, uavcan::MonotonicTime::fromUSec(100)));
|
|
EXPECT_EQ(0, mask_wr);
|
|
EXPECT_EQ(2, mask_rd);
|
|
CanFrame fr2;
|
|
uavcan::MonotonicTime ts_monotonic;
|
|
uavcan::UtcTime ts_utc;
|
|
EXPECT_EQ(1, driver.getIface(1)->receive(fr2, ts_monotonic, ts_utc));
|
|
EXPECT_EQ(fr1, fr2);
|
|
EXPECT_EQ(100, ts_monotonic.toUSec());
|
|
EXPECT_EQ(0, ts_utc.toUSec());
|
|
|
|
// #0 WR, #1 RD, Select failure
|
|
driver.ifaces.at(0).writeable = true;
|
|
driver.select_failure = true;
|
|
mask_wr = 1;
|
|
mask_rd = 7;
|
|
EXPECT_EQ(-1, driver.select(mask_wr, mask_rd, uavcan::MonotonicTime::fromUSec(100)));
|
|
EXPECT_EQ(1, mask_wr); // Leaving masks unchanged - the library must ignore them
|
|
EXPECT_EQ(7, mask_rd);
|
|
}
|