test_input_from_buffer.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002  *   Copyright (C) 2013-2014 by Alexander Rykovanov                        *
00003  *   rykovanov.as@gmail.com                                                   *
00004  *                                                                            *
00005  *   This library is free software; you can redistribute it and/or modify     *
00006  *   it under the terms of the GNU Lesser General Public License as           *
00007  *   published by the Free Software Foundation; version 3 of the License.     *
00008  *                                                                            *
00009  *   This library is distributed in the hope that it will be useful,          *
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
00012  *   GNU Lesser General Public License for more details.                      *
00013  *                                                                            *
00014  *   You should have received a copy of the GNU Lesser General Public License *
00015  *   along with this library; if not, write to the                            *
00016  *   Free Software Foundation, Inc.,                                          *
00017  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                *
00018  ******************************************************************************/
00019 
00020 #include <opc/ua/protocol/input_from_buffer.h>
00021 
00022 #include <gtest/gtest.h>
00023 
00024 
00025 class InputFromBuffer : public testing::Test
00026 {
00027 protected:
00028   InputFromBuffer()
00029   {
00030     const char data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
00031     SourceBuffer = std::vector<char>(data, data + sizeof(data));
00032   }
00033   std::vector<char> SourceBuffer;
00034 };
00035 
00036 TEST_F(InputFromBuffer, CanBeCreated)
00037 {
00038   OpcUa::InputFromBuffer input(&SourceBuffer[0], SourceBuffer.size());
00039 }
00040 
00041 TEST_F(InputFromBuffer, ThrowsIfNullBuffer)
00042 {
00043   ASSERT_THROW(OpcUa::InputFromBuffer(nullptr, 100500), std::invalid_argument);
00044 }
00045 
00046 TEST_F(InputFromBuffer, ThrowsIfZeroSize)
00047 {
00048   ASSERT_THROW(OpcUa::InputFromBuffer((char*)1, 0), std::invalid_argument);
00049 }
00050 
00051 TEST_F(InputFromBuffer, ReadReturnsZeroWhenReadZero)
00052 {
00053   OpcUa::InputFromBuffer input(&SourceBuffer[0], SourceBuffer.size());
00054 
00055   std::vector<char> targetBuf{9,8,7};
00056   std::vector<char> expectedBuf{9,8,7};
00057   const size_t sizeToRead = 0;
00058 
00059   ASSERT_EQ(input.Receive(&targetBuf[0], sizeToRead), 0);
00060   ASSERT_EQ(targetBuf, expectedBuf);
00061 }
00062 
00063 TEST_F(InputFromBuffer, ReadSmallBuffer)
00064 {
00065   OpcUa::InputFromBuffer input(&SourceBuffer[0], SourceBuffer.size());
00066 
00067   std::vector<char> targetBuf{9,8,7};
00068   const std::vector<char> expectedBuf{0, 1, 2};
00069   size_t revceivedSize = 0;
00070   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf[0], 3));
00071   ASSERT_EQ(revceivedSize, 3);
00072   ASSERT_EQ(targetBuf, expectedBuf);
00073 }
00074 
00075 TEST_F(InputFromBuffer, ReadLargeBuffer)
00076 {
00077   OpcUa::InputFromBuffer input(&SourceBuffer[0], SourceBuffer.size());
00078 
00079   const std::vector<char> expectedBuf{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
00080   std::vector<char> targetBuf(11, 11);
00081   size_t revceivedSize = 0;
00082   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf[0], targetBuf.size()));
00083   ASSERT_EQ(revceivedSize, SourceBuffer.size());
00084   ASSERT_EQ(targetBuf, expectedBuf);
00085 }
00086 
00087 TEST_F(InputFromBuffer, ReadWithLittlePortions)
00088 {
00089   OpcUa::InputFromBuffer input(&SourceBuffer[0], SourceBuffer.size());
00090   size_t revceivedSize = 0;
00091 
00092   // Read first three bytes.
00093   std::vector<char> targetBuf1(3, 11);
00094   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf1[0], targetBuf1.size()));
00095   ASSERT_EQ(revceivedSize, 3);
00096   const std::vector<char> expectedBuf1{0,1,2};
00097   ASSERT_EQ(targetBuf1, expectedBuf1);
00098 
00099 
00100   // Read second three bytes.
00101   std::vector<char> targetBuf2(3, 11);
00102   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf2[0], targetBuf2.size()));
00103   ASSERT_EQ(revceivedSize, 3);
00104   const std::vector<char> expectedBuf2{3,4,5};
00105   ASSERT_EQ(targetBuf2, expectedBuf2);
00106 
00107   // Read third three bytes.
00108   std::vector<char> targetBuf3(3, 11);
00109   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf3[0], targetBuf3.size()));
00110   ASSERT_EQ(revceivedSize, 3);
00111   const std::vector<char> expectedBuf3{6,7,8};
00112   ASSERT_EQ(targetBuf3, expectedBuf3);
00113 
00114   // Read forth three bytes.
00115   std::vector<char> targetBuf4(3, 11);
00116   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf4[0], targetBuf4.size()));
00117   ASSERT_EQ(revceivedSize, 1);
00118   const std::vector<char> expectedBuf4{9, 11, 11};
00119   ASSERT_EQ(targetBuf4, expectedBuf4);
00120 
00121   // Read fifth three bytes.
00122   std::vector<char> targetBuf5(3, 11);
00123   ASSERT_NO_THROW(revceivedSize = input.Receive(&targetBuf5[0], targetBuf5.size()));
00124   ASSERT_EQ(revceivedSize, 0);
00125   const std::vector<char> expectedBuf5{11,11,11};
00126   ASSERT_EQ(targetBuf5, expectedBuf5);
00127 }


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Sat Jun 8 2019 18:24:57