test
src
publish_unadvertise.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2008, Willow Garage, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of Willow Garage, Inc. nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
* POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
/* Author: Brian Gerkey */
31
32
#include <string>
33
34
#include <gtest/gtest.h>
35
36
#include <
time.h
>
37
#include <stdlib.h>
38
39
#include "
ros/ros.h
"
40
#include <test_roscpp/TestArray.h>
41
42
static
int
g_argc
;
43
static
char
**
g_argv
;
44
45
bool
failure
;
46
bool
advertised
;
47
48
class
Publications
:
public
testing::Test
49
{
50
public
:
51
ros::NodeHandle
nh_
;
52
ros::Publisher
pub_
;
53
54
void
subscriberCallback
(
const
ros::SingleSubscriberPublisher
&)
55
{
56
ROS_INFO
(
"subscriberCallback invoked"
);
57
if
(!
advertised
)
58
{
59
ROS_INFO
(
"but not advertised"
);
60
failure
=
true
;
61
}
62
}
63
64
bool
adv
()
65
{
66
pub_
=
nh_
.
advertise
<test_roscpp::TestArray>(
"roscpp/pubsub_test"
, 1, boost::bind(&
Publications::subscriberCallback
,
this
, boost::placeholders::_1));
67
return
pub_
;
68
}
69
70
void
unadv
()
71
{
72
pub_
.
shutdown
();
73
}
74
75
protected
:
76
Publications
() {}
77
void
SetUp
()
78
{
79
advertised
=
false
;
80
failure
=
false
;
81
82
ASSERT_TRUE(
g_argc
== 1);
83
}
84
void
TearDown
()
85
{
86
}
87
};
88
89
TEST_F
(
Publications
, pubUnadvertise)
90
{
91
advertised
=
true
;
92
ROS_INFO
(
"advertising"
);
93
ASSERT_TRUE(adv());
94
ros::Time
t1(
ros::Time::now
()+
ros::Duration
(2.0));
95
96
while
(
ros::Time::now
() < t1 && !
failure
)
97
{
98
ros::WallDuration
(0.01).
sleep
();
99
ros::spinOnce
();
100
}
101
102
unadv();
103
104
ROS_INFO
(
"unadvertised"
);
105
advertised
=
false
;
106
107
ros::Time
t2(
ros::Time::now
()+
ros::Duration
(2.0));
108
while
(
ros::Time::now
() < t2 && !
failure
)
109
{
110
ros::WallDuration
(0.01).
sleep
();
111
ros::spinOnce
();
112
}
113
114
advertised
=
true
;
115
ASSERT_TRUE(adv());
116
unadv();
117
ASSERT_TRUE(adv());
118
119
if
(
failure
)
120
FAIL();
121
else
122
SUCCEED();
123
}
124
125
int
126
main
(
int
argc,
char
** argv)
127
{
128
ros::init
(argc, argv,
"publish_unadvertise"
);
129
testing::InitGoogleTest(&argc, argv);
130
g_argc
= argc;
131
g_argv
= argv;
132
return
RUN_ALL_TESTS();
133
}
ros::WallDuration::sleep
bool sleep() const
ros::Publisher
main
int main(int argc, char **argv)
Definition:
publish_unadvertise.cpp:126
ros::init
ROSCPP_DECL void init(const M_string &remappings, const std::string &name, uint32_t options=0)
ros.h
Publications::unadv
void unadv()
Definition:
publish_unadvertise.cpp:70
time.h
ros::spinOnce
ROSCPP_DECL void spinOnce()
g_argv
static char ** g_argv
Definition:
publish_unadvertise.cpp:43
failure
bool failure
Definition:
publish_unadvertise.cpp:45
ros::NodeHandle::advertise
Publisher advertise(AdvertiseOptions &ops)
ros::SingleSubscriberPublisher
ros::Publisher::shutdown
void shutdown()
TEST_F
TEST_F(Publications, pubUnadvertise)
Definition:
publish_unadvertise.cpp:89
Publications::adv
bool adv()
Definition:
publish_unadvertise.cpp:64
Publications::nh_
ros::NodeHandle nh_
Definition:
publish_unadvertise.cpp:51
Publications::Publications
Publications()
Definition:
publish_unadvertise.cpp:76
Publications
Definition:
publish_unadvertise.cpp:48
ros::Time
Publications::pub_
ros::Publisher pub_
Definition:
publish_unadvertise.cpp:52
Publications::TearDown
void TearDown()
Definition:
publish_unadvertise.cpp:84
Publications::subscriberCallback
void subscriberCallback(const ros::SingleSubscriberPublisher &)
Definition:
publish_unadvertise.cpp:54
ros::WallDuration
ROS_INFO
#define ROS_INFO(...)
ros::Duration
advertised
bool advertised
Definition:
publish_unadvertise.cpp:46
g_argc
static int g_argc
Definition:
publish_unadvertise.cpp:42
ros::NodeHandle
Publications::SetUp
void SetUp()
Definition:
publish_unadvertise.cpp:77
ros::Time::now
static Time now()
test_roscpp
Author(s): Morgan Quigley, Josh Faust, Brian Gerkey, Troy Straszheim, Dirk Thomas
, Jacob Perron
autogenerated on Sat Sep 14 2024 02:59:57