00001 #include <gtest/gtest.h>
00002 #include "nasa_controllers_core/RosMsgBFVerifier.h"
00003 #include <ros/package.h>
00004
00005 class RosMsgBFVerifierTest : public ::testing::Test
00006 {
00007 protected:
00008 virtual void SetUp()
00009 {
00010 std::string packagePath = ros::package::getPath("nasa_controllers_core");
00011 std::string urdfFile = packagePath + "/test/urdf/SimpleTestRobot.xml";
00012 rmv = new RosMsgBFVerifier(urdfFile);
00013
00014 ros::Time::init();
00015
00016 eefState.name.push_back("link2");
00017 eefState.name.push_back("link4");
00018 eefState.locked.push_back(1);
00019 eefState.loaded.push_back(1);
00020 eefState.locked.push_back(1);
00021 eefState.loaded.push_back(1);
00022 }
00023
00024 virtual void TearDown()
00025 {
00026 }
00027
00028 RosMsgBFVerifier* rmv;
00029 r2_msgs::EndEffectorState eefState;
00030 };
00031
00032 TEST_F(RosMsgBFVerifierTest, InitializeMapTest)
00033 {
00034
00035 rmv->InitializeMap();
00036
00037 ASSERT_FALSE( rmv->endEffectorMap.empty());
00038 EXPECT_EQ (0, rmv->endEffectorMap.count("joint1"));
00039 EXPECT_EQ (0, rmv->endEffectorMap.count("link1"));
00040 EXPECT_EQ (1, rmv->endEffectorMap.count("link2"));
00041 EXPECT_EQ (0, rmv->endEffectorMap["link2"].locked);
00042 EXPECT_EQ (0, rmv->endEffectorMap["link2"].loaded);
00043 EXPECT_EQ (0, rmv->endEffectorMap["link2"].verified);
00044 EXPECT_EQ (0, rmv->endEffectorMap.count("link3"));
00045 EXPECT_EQ (1, rmv->endEffectorMap.count("link4"));
00046 }
00047
00048 TEST_F(RosMsgBFVerifierTest, UpdateEEFStateTest)
00049 {
00050 rmv->InitializeMap();
00051
00052 rmv->UpdateEEFState(eefState);
00053
00054 EXPECT_EQ(1, rmv->endEffectorMap["link2"].locked);
00055 EXPECT_EQ(1, rmv->endEffectorMap["link4"].loaded);
00056
00057 rmv->SetBaseAsVerif("link4");
00058 eefState.locked[1] = 0;
00059 rmv->UpdateEEFState(eefState);
00060 EXPECT_EQ(0, rmv->endEffectorMap["link4"].locked);
00061 EXPECT_EQ(0, rmv->endEffectorMap["link4"].verified);
00062
00063 }
00064
00065 TEST_F(RosMsgBFVerifierTest, SetBaseAsVerifTest)
00066 {
00067 std::vector<std::string> bases;
00068
00069 rmv->InitializeMap();
00070 rmv->UpdateEEFState(eefState);
00071 rmv->SetBaseAsVerif("link2");
00072
00073 EXPECT_EQ(1, rmv->endEffectorMap["link2"].verified);
00074 EXPECT_EQ(0, rmv->endEffectorMap["link4"].verified);
00075
00076 eefState.locked[1] = 0;
00077 rmv->UpdateEEFState(eefState);
00078 rmv->SetBaseAsVerif("link4");
00079
00080 EXPECT_EQ(1, rmv->endEffectorMap["link2"].verified);
00081 EXPECT_EQ(0, rmv->endEffectorMap["link4"].verified);
00082
00083 eefState.loaded[0] = 0;
00084 rmv->UpdateEEFState(eefState);
00085
00086 EXPECT_EQ(0, rmv->endEffectorMap["link2"].verified);
00087 EXPECT_EQ(0, rmv->endEffectorMap["link4"].verified);
00088
00089 eefState.locked[1] = 1;
00090 eefState.loaded[0] = 1;
00091 rmv->UpdateEEFState(eefState);
00092 bases.push_back("link2");
00093 bases.push_back("link4");
00094 rmv->SetBaseAsVerif(bases);
00095
00096 EXPECT_EQ(1, rmv->endEffectorMap["link2"].verified);
00097 EXPECT_EQ(1, rmv->endEffectorMap["link4"].verified);
00098 }
00099
00100 TEST_F(RosMsgBFVerifierTest, isLegalToVerifTest)
00101 {
00102 std::string name = "link2";
00103 r2_msgs::StringArray baseFrameMsg;
00104
00105 rmv->InitializeMap();
00106 rmv->UpdateEEFState(eefState);
00107
00108 EXPECT_EQ(0, rmv->isLegalToVerif(name, baseFrameMsg));
00109
00110 name = "link3";
00111 rmv->SetBaseAsVerif("link2");
00112 baseFrameMsg.data.push_back("link2");
00113 EXPECT_EQ(0, rmv->isLegalToVerif(name, baseFrameMsg));
00114
00115 name = "link4";
00116 EXPECT_EQ(1, rmv->isLegalToVerif(name, baseFrameMsg));
00117
00118 name = "link2";
00119 EXPECT_EQ(0, rmv->isLegalToVerif(name, baseFrameMsg));
00120
00121 }
00122
00123 TEST_F(RosMsgBFVerifierTest, PopulateBaseVerifMessageTest)
00124 {
00125 r2_msgs::EndEffectorState bfVerif;
00126
00127 rmv->InitializeMap();
00128 rmv->UpdateEEFState(eefState);
00129
00130 rmv->PopulateBaseVerifMessage(bfVerif);
00131 ASSERT_EQ("link2", bfVerif.name[0]);
00132 EXPECT_EQ(0, bfVerif.verified[0]);
00133
00134 rmv->SetBaseAsVerif("link2");
00135 rmv->PopulateBaseVerifMessage(bfVerif);
00136 ASSERT_EQ("link2", bfVerif.name[0]);
00137 EXPECT_EQ(1, bfVerif.verified[0]);
00138 ASSERT_EQ("link4", bfVerif.name[1]);
00139 EXPECT_EQ(0, bfVerif.verified[1]);
00140 }
00141
00142 TEST_F(RosMsgBFVerifierTest, PopulateStatusMessageTest)
00143 {
00144 std::string modeName, qualifier;
00145 r2_msgs::StringArray statusMsg;
00146
00147 modeName = "idle";
00148 qualifier = "poop";
00149
00150 rmv->PopulateStatusMessage(modeName, qualifier, statusMsg);
00151 ASSERT_EQ(2, statusMsg.data.size());
00152 EXPECT_EQ("idle", statusMsg.data[0]);
00153 EXPECT_EQ("poop", statusMsg.data[1]);
00154 }
00155
00156 int main(int argc, char **argv)
00157 {
00158 ::testing::InitGoogleTest(&argc, argv);
00159 return RUN_ALL_TESTS();
00160 }