Commit 1ce0a48a66fe7966177f86883fd4c53c95461cf1
1 parent
9c29783b
Added virtual serial port setup to gtest global environment setup.
Showing
6 changed files
with
148 additions
and
70 deletions
CHANGELOG.md
0 → 100644
| 1 | +# Changelog | ||
| 2 | +All notable changes to this project will be documented in this file. | ||
| 3 | + | ||
| 4 | +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) | ||
| 5 | +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). | ||
| 6 | + | ||
| 7 | +## [Unreleased] | ||
| 8 | + | ||
| 9 | +### Added | ||
| 10 | +- CMake build support. | ||
| 11 | +- Unit tests using gtest. | ||
| 12 | + | ||
| 13 | +### Changed | ||
| 14 | +- Updated serial port to use C++14. | ||
| 15 | + | ||
| 16 | +## [v1.0.1] - 2014-05-21 | ||
| 17 | + | ||
| 18 | +### Changed | ||
| 19 | +- Added ability to enable/disable echo with 'SerialPort::EnableEcho()'. | ||
| 20 | + | ||
| 21 | +## [v1.0.0] - 2014-05-15 | ||
| 22 | + | ||
| 23 | +### Added | ||
| 24 | +- Initial commit. serial-port-cpp library has basic functions up and running. | ||
| 25 | + | ||
| 26 | +[Unreleased]: https://github.com/mbedded-ninja/CppLinuxSerial/compare/v1.0.1...HEAD | ||
| 27 | +[1.0.1]: https://github.com/mbedded-ninja/CppLinuxSerial/compare/v1.0.1...v1.0.0 | ||
| 0 | \ No newline at end of file | 28 | \ No newline at end of file |
README.rst
| @@ -6,8 +6,8 @@ CppLinuxSerial | @@ -6,8 +6,8 @@ CppLinuxSerial | ||
| 6 | Serial port library written in C++ | 6 | Serial port library written in C++ |
| 7 | ---------------------------------- | 7 | ---------------------------------- |
| 8 | 8 | ||
| 9 | -.. image:: https://api.travis-ci.org/gbmhunter/serial-port-cpp.png?branch=master | ||
| 10 | - :target: https://travis-ci.org/gbmhunter/serial-port-cpp | 9 | +.. image:: https://api.travis-ci.org/gbmhunter/CppLinuxSerial.png?branch=master |
| 10 | + :target: https://travis-ci.org/gbmhunter/CppLinuxSerial | ||
| 11 | 11 | ||
| 12 | .. role:: bash(code) | 12 | .. role:: bash(code) |
| 13 | :language: bash | 13 | :language: bash |
| @@ -34,11 +34,13 @@ Dependencies | @@ -34,11 +34,13 @@ Dependencies | ||
| 34 | 34 | ||
| 35 | The following table lists all of the libraries dependencies. | 35 | The following table lists all of the libraries dependencies. |
| 36 | 36 | ||
| 37 | -====================== ==================== ====================================================================== | ||
| 38 | -Dependency Delivery Usage | ||
| 39 | -====================== ==================== ====================================================================== | ||
| 40 | -<stdio.h> Standard C library snprintf() | ||
| 41 | -====================== ==================== ====================================================================== | 37 | +====================== ====================================================================== |
| 38 | +Dependency Comments | ||
| 39 | +====================== ====================================================================== | ||
| 40 | +C++14 C++14 used for strongly typed enums, std::chrono and literals. | ||
| 41 | +<stdio.h> snprintf() | ||
| 42 | +stty Used in unit tests to verify the serial port is configured correctly. | ||
| 43 | +====================== ====================================================================== | ||
| 42 | 44 | ||
| 43 | Issues | 45 | Issues |
| 44 | ====== | 46 | ====== |
| @@ -48,20 +50,7 @@ See GitHub Issues. | @@ -48,20 +50,7 @@ See GitHub Issues. | ||
| 48 | Usage | 50 | Usage |
| 49 | ===== | 51 | ===== |
| 50 | 52 | ||
| 51 | -In main.c add... | ||
| 52 | - | ||
| 53 | -:: | ||
| 54 | - | ||
| 55 | - | ||
| 56 | - | ||
| 57 | - | ||
| 58 | - int main() | ||
| 59 | - { | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - | 53 | +Nothing here yet... |
| 65 | 54 | ||
| 66 | FAQ | 55 | FAQ |
| 67 | === | 56 | === |
| @@ -72,9 +61,4 @@ FAQ | @@ -72,9 +61,4 @@ FAQ | ||
| 72 | Changelog | 61 | Changelog |
| 73 | ========= | 62 | ========= |
| 74 | 63 | ||
| 75 | -========= ========== =================================================================================================== | ||
| 76 | -Version Date Comment | ||
| 77 | -========= ========== =================================================================================================== | ||
| 78 | -v1.0.1.0 2014/05/21 Added ability to enable/disable echo with 'SerialPort::EnableEcho()'. | ||
| 79 | -v1.0.0.0 2014/05/15 Initial commit. serial-port-cpp library has basic functions up and running. | ||
| 80 | -========= ========== =================================================================================================== | ||
| 81 | \ No newline at end of file | 64 | \ No newline at end of file |
| 65 | +See CHANGELOG.md. | ||
| 82 | \ No newline at end of file | 66 | \ No newline at end of file |
test/unit/BasicTests.cpp
| @@ -23,21 +23,6 @@ namespace { | @@ -23,21 +23,6 @@ namespace { | ||
| 23 | class BasicTests : public ::testing::Test { | 23 | class BasicTests : public ::testing::Test { |
| 24 | protected: | 24 | protected: |
| 25 | 25 | ||
| 26 | - static void SetUpTestCase() { | ||
| 27 | - GetTestUtil().CreateVirtualSerialPortPair(); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - static void TearDownTestCase() { | ||
| 31 | - std::cout << "Destroying virtual serial ports..." << std::endl; | ||
| 32 | - GetTestUtil().CloseSerialPorts(); | ||
| 33 | - } | ||
| 34 | - | ||
| 35 | - static TestUtil& GetTestUtil() { | ||
| 36 | - static TestUtil testUtil; | ||
| 37 | - return testUtil; | ||
| 38 | - } | ||
| 39 | - | ||
| 40 | - | ||
| 41 | BasicTests() { | 26 | BasicTests() { |
| 42 | } | 27 | } |
| 43 | 28 | ||
| @@ -53,17 +38,6 @@ namespace { | @@ -53,17 +38,6 @@ namespace { | ||
| 53 | EXPECT_EQ(true, true); | 38 | EXPECT_EQ(true, true); |
| 54 | } | 39 | } |
| 55 | 40 | ||
| 56 | - TEST_F(BasicTests, BaudRateSetCorrectly) { | ||
| 57 | - SerialPort serialPort0(device0_, BaudRate::B_57600); | ||
| 58 | - serialPort0.Open(); | ||
| 59 | - auto retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 60 | - EXPECT_NE(std::string::npos, retVal.find("speed 57600 baud")); | ||
| 61 | - | ||
| 62 | - serialPort0.SetBaudRate(BaudRate::B_115200); | ||
| 63 | - retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 64 | - EXPECT_NE(std::string::npos, retVal.find("speed 115200 baud")); | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | TEST_F(BasicTests, CanOpen) { | 41 | TEST_F(BasicTests, CanOpen) { |
| 68 | SerialPort serialPort0(device0_, BaudRate::B_57600); | 42 | SerialPort serialPort0(device0_, BaudRate::B_57600); |
| 69 | serialPort0.Open(); | 43 | serialPort0.Open(); |
test/unit/ConfigTests.cpp
0 → 100644
| 1 | +/// | ||
| 2 | +/// \file ConfigTests.cpp | ||
| 3 | +/// \author Geoffrey Hunter <gbmhunter@gmail.com> (www.mbedded.ninja) | ||
| 4 | +/// \created 2017-11-24 | ||
| 5 | +/// \last-modified 2017-11-24 | ||
| 6 | +/// \brief Configuration tests for the SerialPort class. | ||
| 7 | +/// \details | ||
| 8 | +/// See README.rst in repo root dir for more info. | ||
| 9 | + | ||
| 10 | +// System includes | ||
| 11 | +#include "gtest/gtest.h" | ||
| 12 | + | ||
| 13 | +// 3rd party includes | ||
| 14 | +#include "CppLinuxSerial/SerialPort.hpp" | ||
| 15 | + | ||
| 16 | +// User includes | ||
| 17 | +#include "TestUtil.hpp" | ||
| 18 | + | ||
| 19 | +using namespace mn::CppLinuxSerial; | ||
| 20 | + | ||
| 21 | +namespace { | ||
| 22 | + | ||
| 23 | + class ConfigTests : public ::testing::Test { | ||
| 24 | + protected: | ||
| 25 | + | ||
| 26 | + ConfigTests() { | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + virtual ~ConfigTests() { | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + std::string device0_ = "/dev/ttyS10"; | ||
| 33 | + std::string device1_ = "/dev/ttyS11"; | ||
| 34 | + }; | ||
| 35 | + | ||
| 36 | + TEST_F(ConfigTests, BaudRateSetCorrectly) { | ||
| 37 | + SerialPort serialPort0(device0_, BaudRate::B_57600); | ||
| 38 | + serialPort0.Open(); | ||
| 39 | + auto retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 40 | + EXPECT_NE(std::string::npos, retVal.find("speed 57600 baud")); | ||
| 41 | + | ||
| 42 | + serialPort0.SetBaudRate(BaudRate::B_115200); | ||
| 43 | + retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 44 | + EXPECT_NE(std::string::npos, retVal.find("speed 115200 baud")); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + TEST_F(ConfigTests, CanonicalModeOff) { | ||
| 48 | + SerialPort serialPort0(device0_, BaudRate::B_57600); | ||
| 49 | + serialPort0.Open(); | ||
| 50 | + auto retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 51 | + EXPECT_NE(std::string::npos, retVal.find("-icanon")); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + TEST_F(ConfigTests, EchoModeOff) { | ||
| 55 | + SerialPort serialPort0(device0_, BaudRate::B_57600); | ||
| 56 | + serialPort0.Open(); | ||
| 57 | + auto retVal = TestUtil::Exec("stty -a -F " + device0_); | ||
| 58 | + EXPECT_NE(std::string::npos, retVal.find("-echo")); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | +} // namespace | ||
| 0 | \ No newline at end of file | 62 | \ No newline at end of file |
test/unit/TestUtil.hpp
| @@ -47,30 +47,20 @@ namespace mn { | @@ -47,30 +47,20 @@ namespace mn { | ||
| 47 | return result; | 47 | return result; |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | - void CreateVirtualSerialPortPair() { | 50 | + static void CreateVirtualSerialPortPair() { |
| 51 | std::cout << "Creating virtual serial port pair..." << std::endl; | 51 | std::cout << "Creating virtual serial port pair..." << std::endl; |
| 52 | -// StartProcess("sudo socat -d -d pty,raw,echo=0,link=/dev/ttyS10 pty,raw,echo=0,link=/dev/ttyS11"); | ||
| 53 | -// std::this_thread::sleep_for(1s); | ||
| 54 | -// StartProcess("sudo chmod a+rw /dev/ttyS10"); | ||
| 55 | -// StartProcess("sudo chmod a+rw /dev/ttyS11"); | ||
| 56 | -// std::this_thread::sleep_for(1s); | ||
| 57 | -// std::cout << "Finished creating virtual serial port pair." << std::endl; | ||
| 58 | -// std::system("./run.sh"); | ||
| 59 | std::system("nohup sudo socat -d -d pty,raw,echo=0,link=/dev/ttyS10 pty,raw,echo=0,link=/dev/ttyS11 &"); | 52 | std::system("nohup sudo socat -d -d pty,raw,echo=0,link=/dev/ttyS10 pty,raw,echo=0,link=/dev/ttyS11 &"); |
| 60 | - auto pid = std::system("echo $!"); | ||
| 61 | - std::cout << "pid = " << pid << std::endl; | 53 | + |
| 54 | + // Hacky! Since socat is detached, we have no idea at what point it has created | ||
| 55 | + // ttyS10 and ttyS11. Assume 1 second is long enough... | ||
| 62 | std::this_thread::sleep_for(1s); | 56 | std::this_thread::sleep_for(1s); |
| 63 | std::system("sudo chmod a+rw /dev/ttyS10"); | 57 | std::system("sudo chmod a+rw /dev/ttyS10"); |
| 64 | std::system("sudo chmod a+rw /dev/ttyS11"); | 58 | std::system("sudo chmod a+rw /dev/ttyS11"); |
| 65 | } | 59 | } |
| 66 | 60 | ||
| 67 | - void CloseSerialPorts() { | ||
| 68 | -// for(const auto& filePointer : processes_) { | ||
| 69 | -// std::cout << "Sending SIGINT..." << std::endl; | ||
| 70 | -// kill(filePointer.pid, SIGINT); | ||
| 71 | -// std::cout << "Calling pclose2()..." << std::endl; | ||
| 72 | -// pclose2(filePointer.fp, filePointer.pid); | ||
| 73 | -// } | 61 | + static void CloseSerialPorts() { |
| 62 | + // Dangerous! Kills all socat processes running | ||
| 63 | + // on computer | ||
| 74 | std::system("sudo pkill socat"); | 64 | std::system("sudo pkill socat"); |
| 75 | } | 65 | } |
| 76 | 66 |
test/unit/main.cpp
0 → 100644
| 1 | +/// | ||
| 2 | +/// \file main.cpp | ||
| 3 | +/// \author Geoffrey Hunter <gbmhunter@gmail.com> (www.mbedded.ninja) | ||
| 4 | +/// \edited n/a | ||
| 5 | +/// \created 2017-11-24 | ||
| 6 | +/// \last-modified 2017-11-24 | ||
| 7 | +/// \brief Contains the main entry point for the unit tests. | ||
| 8 | +/// \details | ||
| 9 | +/// See README.md in root dir for more info. | ||
| 10 | + | ||
| 11 | +// System includes | ||
| 12 | +#include "gtest/gtest.h" | ||
| 13 | + | ||
| 14 | +// User includes | ||
| 15 | +#include "TestUtil.hpp" | ||
| 16 | + | ||
| 17 | +using namespace mn::CppLinuxSerial; | ||
| 18 | + | ||
| 19 | +class Environment : public testing::Environment { | ||
| 20 | +public: | ||
| 21 | + virtual ~Environment() {} | ||
| 22 | + // Override this to define how to set up the environment. | ||
| 23 | + virtual void SetUp() { | ||
| 24 | + std::cout << __PRETTY_FUNCTION__ << " called." << std::endl; | ||
| 25 | + TestUtil::CreateVirtualSerialPortPair(); | ||
| 26 | + } | ||
| 27 | + // Override this to define how to tear down the environment. | ||
| 28 | + virtual void TearDown() { | ||
| 29 | + TestUtil::CloseSerialPorts(); | ||
| 30 | + } | ||
| 31 | +}; | ||
| 32 | + | ||
| 33 | +int main(int argc, char **argv) | ||
| 34 | +{ | ||
| 35 | + ::testing::InitGoogleTest(&argc, argv); | ||
| 36 | + | ||
| 37 | + // Create and register global test setup | ||
| 38 | + // (gtest takes ownership of pointer, do not delete manaully!) | ||
| 39 | + ::testing::AddGlobalTestEnvironment(new Environment); | ||
| 40 | + | ||
| 41 | + return RUN_ALL_TESTS(); | ||
| 42 | +} | ||
| 0 | \ No newline at end of file | 43 | \ No newline at end of file |