2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file test_message_queue.cpp
18 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
20 * @brief This file is the implementation file of message queue tests
22 #include <dpl/test_runner.h>
23 #include <dpl/abstract_waitable_input_adapter.h>
24 #include <dpl/abstract_waitable_output_adapter.h>
25 #include <dpl/message_queue.h>
26 #include <dpl/binary_queue.h>
29 #include <dpl/application.h>
30 #include <dpl/controller.h>
31 #include <dpl/generic_event.h>
33 DECLARE_GENERIC_EVENT_0(QuitEvent)
36 : public DPL::Controller<DPL::TypeListDecl<QuitEvent>::Type>,
37 public DPL::ApplicationExt
40 QuitController() : DPL::ApplicationExt(1, NULL, "test-app") { Touch(); }
43 virtual void OnEventReceived(const QuitEvent &) { Quit(); }
46 RUNNER_TEST_GROUP_INIT(DPL)
53 DPL::AbstractWaitableInput *m_input;
54 DPL::AbstractWaitableOutput *m_output;
55 std::size_t m_dataSize;
58 CopyThread(DPL::AbstractWaitableInput *input,
59 DPL::AbstractWaitableOutput *output,
66 LogInfo("Thread created");
70 virtual int ThreadEntry()
72 LogInfo("Entering copy thread");
76 DPL::Copy(m_input, m_output, m_dataSize);
78 Catch (DPL::CopyFailed)
82 LogWarning("Copy failed!");
86 LogInfo("Copy finished");
91 inline std::string BinaryQueueToString(const DPL::BinaryQueue &queue)
93 char *buffer = new char[queue.Size()];
94 queue.Flatten(buffer, queue.Size());
95 std::string result = std::string(buffer, buffer + queue.Size());
100 RUNNER_TEST(MessageQueue_DoubleCopy)
102 DPL::BinaryQueue dataA;
103 DPL::MessageQueue dataB("/test_mqueue_dataB", true, false, 0660, true);
104 DPL::MessageQueue dataC("/test_mqueue_dataC", true, false, 0660, true);
105 DPL::BinaryQueue dataD;
107 DPL::AbstractWaitableInputAdapter dataAdapterA(&dataA);
108 DPL::AbstractWaitableOutputAdapter dataAdapterD(&dataD);
110 const std::string testData =
111 "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
112 "Cras elementum venenatis velit, sit amet vehicula odio gravida a."
113 "Curabitur id nibh id ante adipiscing sollicitudin."
114 "Maecenas in tellus vel augue vehicula pharetra hendrerit cursus est."
116 "Ut malesuada quam porttitor dui euismod lacinia."
117 "Phasellus quis lectus sed lectus dictum tincidunt et vitae leo."
118 "Fusce id est massa, condimentum bibendum urna."
119 "Donec venenatis quam eget sapien vulputate egestas."
120 "Maecenas scelerisque lorem a neque molestie a varius erat condimentum."
121 "Maecenas varius hendrerit ligula, sed iaculis justo pretium id."
122 "Nunc sit amet nisl vitae justo tristique suscipit id eget tortor."
124 "Pellentesque sollicitudin nulla at metus dapibus tincidunt."
125 "Integer consequat justo eget dui imperdiet iaculis."
126 "Sed vestibulum ipsum vitae libero accumsan non molestie metus adipiscing."
128 "Vivamus quis dui enim, in blandit urna."
129 "In imperdiet lacus at orci elementum a scelerisque dui blandit."
130 "Donec vulputate enim metus, eget convallis ante."
131 "Etiam mollis enim eget eros pulvinar nec sagittis justo fermentum."
133 "Vestibulum sed nunc eu leo lobortis ultrices."
134 "Nullam placerat nulla et est blandit nec interdum nunc pulvinar."
135 "Vivamus a lectus eget dui fermentum hendrerit.";
137 QuitController quitter;
138 quitter.PostTimedEvent(QuitEvent(), 1.0);
140 CopyThread threadA(&dataAdapterA, &dataB, testData.size());
141 CopyThread threadB(&dataB, &dataC, testData.size());
142 CopyThread threadC(&dataC, &dataAdapterD, testData.size());
144 dataA.AppendCopy(testData.c_str(), testData.size());
156 // Now, test data should be in dataD
157 RUNNER_ASSERT(BinaryQueueToString(dataD) == testData);