From 701b6eea76031a514e0a37d78c7c6411530b75ea Mon Sep 17 00:00:00 2001 From: Jose Luis Rivero Date: Tue, 2 Feb 2021 19:45:59 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=A9=E2=80=8D=F0=9F=8C=BE=20Refactor=20?= =?UTF-8?q?UNIT=5FServer=5FTEST:=20move=20tests=20to=20integration=20(#594?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move several server interactions and fuel cached to their own tests in integration. Signed-off-by: Jose Luis Rivero --- src/Server_TEST.cc | 113 +------------------------ test/helpers/EnvTestFixture.hh | 36 ++++++++ test/integration/CMakeLists.txt | 2 + test/integration/fuel_cached_server.cc | 57 +++++++++++++ test/integration/multiple_servers.cc | 104 +++++++++++++++++++++++ 5 files changed, 200 insertions(+), 112 deletions(-) create mode 100644 test/helpers/EnvTestFixture.hh create mode 100644 test/integration/fuel_cached_server.cc create mode 100644 test/integration/multiple_servers.cc diff --git a/src/Server_TEST.cc b/src/Server_TEST.cc index d625f936f5..672c64ca11 100644 --- a/src/Server_TEST.cc +++ b/src/Server_TEST.cc @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,23 +38,12 @@ #include "plugins/MockSystem.hh" #include "../test/helpers/Relay.hh" +#include "../test/helpers/EnvTestFixture.hh" using namespace ignition; using namespace ignition::gazebo; using namespace std::chrono_literals; -class ServerFixture : public ::testing::TestWithParam -{ - protected: void SetUp() override - { - // Augment the system plugin path. In SetUp to avoid test order issues. - setenv("IGN_GAZEBO_SYSTEM_PLUGIN_PATH", - (std::string(PROJECT_BINARY_PATH) + "/lib").c_str(), 1); - - ignition::common::Console::SetVerbosity(4); - } -}; - ///////////////////////////////////////////////// TEST_P(ServerFixture, DefaultServerConfig) { @@ -624,79 +612,6 @@ TEST_P(ServerFixture, SigInt) EXPECT_FALSE(*server.Running(0)); } -///////////////////////////////////////////////// -TEST_P(ServerFixture, TwoServersNonBlocking) -{ - ignition::gazebo::ServerConfig serverConfig; - serverConfig.SetSdfString(TestWorldSansPhysics::World()); - - gazebo::Server server1(serverConfig); - gazebo::Server server2(serverConfig); - EXPECT_FALSE(server1.Running()); - EXPECT_FALSE(*server1.Running(0)); - EXPECT_FALSE(server2.Running()); - EXPECT_FALSE(*server2.Running(0)); - EXPECT_EQ(0u, *server1.IterationCount()); - EXPECT_EQ(0u, *server2.IterationCount()); - - // Make the servers run fast. - server1.SetUpdatePeriod(1ns); - server2.SetUpdatePeriod(1ns); - - // Start non-blocking - const size_t iters1 = 9999; - EXPECT_TRUE(server1.Run(false, iters1, false)); - - // Expect that we can't start another instance. - EXPECT_FALSE(server1.Run(true, 10, false)); - - // It's okay to start another server - EXPECT_TRUE(server2.Run(false, 500, false)); - - while (*server1.IterationCount() < iters1 || *server2.IterationCount() < 500) - IGN_SLEEP_MS(100); - - EXPECT_EQ(iters1, *server1.IterationCount()); - EXPECT_EQ(500u, *server2.IterationCount()); - EXPECT_FALSE(server1.Running()); - EXPECT_FALSE(*server1.Running(0)); - EXPECT_FALSE(server2.Running()); - EXPECT_FALSE(*server2.Running(0)); -} - -///////////////////////////////////////////////// -TEST_P(ServerFixture, TwoServersMixedBlocking) -{ - ignition::gazebo::ServerConfig serverConfig; - serverConfig.SetSdfString(TestWorldSansPhysics::World()); - - gazebo::Server server1(serverConfig); - gazebo::Server server2(serverConfig); - EXPECT_FALSE(server1.Running()); - EXPECT_FALSE(*server1.Running(0)); - EXPECT_FALSE(server2.Running()); - EXPECT_FALSE(*server2.Running(0)); - EXPECT_EQ(0u, *server1.IterationCount()); - EXPECT_EQ(0u, *server2.IterationCount()); - - // Make the servers run fast. - server1.SetUpdatePeriod(1ns); - server2.SetUpdatePeriod(1ns); - - server1.Run(false, 10, false); - server2.Run(true, 1000, false); - - while (*server1.IterationCount() < 10) - IGN_SLEEP_MS(100); - - EXPECT_EQ(10u, *server1.IterationCount()); - EXPECT_EQ(1000u, *server2.IterationCount()); - EXPECT_FALSE(server1.Running()); - EXPECT_FALSE(*server1.Running(0)); - EXPECT_FALSE(server2.Running()); - EXPECT_FALSE(*server2.Running(0)); -} - ///////////////////////////////////////////////// TEST_P(ServerFixture, AddSystemWhileRunning) { @@ -902,32 +817,6 @@ TEST_P(ServerFixture, GetResourcePaths) EXPECT_EQ("/home/user/another_path", res.data(1)); } -///////////////////////////////////////////////// -TEST_P(ServerFixture, CachedFuelWorld) -{ - auto cachedWorldPath = - common::joinPaths(std::string(PROJECT_SOURCE_PATH), "test", "worlds"); - setenv("IGN_FUEL_CACHE_PATH", cachedWorldPath.c_str(), 1); - - ServerConfig serverConfig; - auto fuelWorldURL = - "https://fuel.ignitionrobotics.org/1.0/OpenRobotics/worlds/Test%20world"; - EXPECT_TRUE(serverConfig.SetSdfFile(fuelWorldURL)); - - EXPECT_EQ(fuelWorldURL, serverConfig.SdfFile()); - EXPECT_TRUE(serverConfig.SdfString().empty()); - - // Check that world was loaded - auto server = Server(serverConfig); - EXPECT_NE(std::nullopt, server.Running(0)); - EXPECT_FALSE(*server.Running(0)); - - server.Run(true /*blocking*/, 1, false/*paused*/); - - EXPECT_NE(std::nullopt, server.Running(0)); - EXPECT_FALSE(*server.Running(0)); -} - ///////////////////////////////////////////////// TEST_P(ServerFixture, AddResourcePaths) { diff --git a/test/helpers/EnvTestFixture.hh b/test/helpers/EnvTestFixture.hh new file mode 100644 index 0000000000..e74f1a6ca1 --- /dev/null +++ b/test/helpers/EnvTestFixture.hh @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef IGNITION_GAZEBO_TEST_HELPERS_ENVTESTFIXTURE_HH_ +#define IGNITION_GAZEBO_TEST_HELPERS_ENVTESTFIXTURE_HH_ + +#include + +#include +#include "ignition/gazebo/test_config.hh" + +class ServerFixture : public ::testing::TestWithParam +{ + protected: void SetUp() override + { + // Augment the system plugin path. In SetUp to avoid test order issues. + setenv("IGN_GAZEBO_SYSTEM_PLUGIN_PATH", + (std::string(PROJECT_BINARY_PATH) + "/lib").c_str(), 1); + + ignition::common::Console::SetVerbosity(4); + } +}; +#endif diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index 1f228c1f88..a2e4eb484f 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -17,6 +17,7 @@ set(tests events.cc examples_build.cc follow_actor_system.cc + fuel_cached_server.cc imu_system.cc joint_controller_system.cc joint_position_controller_system.cc @@ -31,6 +32,7 @@ set(tests magnetometer_system.cc model.cc multicopter.cc + multiple_servers.cc network_handshake.cc performer_detector.cc physics_system.cc diff --git a/test/integration/fuel_cached_server.cc b/test/integration/fuel_cached_server.cc new file mode 100644 index 0000000000..7003459ff7 --- /dev/null +++ b/test/integration/fuel_cached_server.cc @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include + +#include "ignition/gazebo/Server.hh" +#include "ignition/gazebo/ServerConfig.hh" + +#include "../test/helpers/EnvTestFixture.hh" + +using namespace ignition; +using namespace ignition::gazebo; +using namespace std::chrono_literals; + +///////////////////////////////////////////////// +TEST_P(ServerFixture, CachedFuelWorld) +{ + auto cachedWorldPath = + common::joinPaths(std::string(PROJECT_SOURCE_PATH), "test", "worlds"); + setenv("IGN_FUEL_CACHE_PATH", cachedWorldPath.c_str(), 1); + + ServerConfig serverConfig; + auto fuelWorldURL = + "https://fuel.ignitionrobotics.org/1.0/OpenRobotics/worlds/Test%20world"; + EXPECT_TRUE(serverConfig.SetSdfFile(fuelWorldURL)); + + EXPECT_EQ(fuelWorldURL, serverConfig.SdfFile()); + EXPECT_TRUE(serverConfig.SdfString().empty()); + + // Check that world was loaded + auto server = Server(serverConfig); + EXPECT_NE(std::nullopt, server.Running(0)); + EXPECT_FALSE(*server.Running(0)); + + server.Run(true /*blocking*/, 1, false/*paused*/); + + EXPECT_NE(std::nullopt, server.Running(0)); + EXPECT_FALSE(*server.Running(0)); +} + +// Run multiple times. We want to make sure that static globals don't cause +// problems. +INSTANTIATE_TEST_SUITE_P(ServerRepeat, ServerFixture, ::testing::Range(1, 2)); diff --git a/test/integration/multiple_servers.cc b/test/integration/multiple_servers.cc new file mode 100644 index 0000000000..71f89ab663 --- /dev/null +++ b/test/integration/multiple_servers.cc @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include + +#include "ignition/gazebo/Server.hh" +#include "ignition/gazebo/ServerConfig.hh" + +#include "../test/helpers/EnvTestFixture.hh" + +using namespace ignition; +using namespace ignition::gazebo; +using namespace std::chrono_literals; + +///////////////////////////////////////////////// +TEST_P(ServerFixture, TwoServersNonBlocking) +{ + ignition::gazebo::ServerConfig serverConfig; + serverConfig.SetSdfString(TestWorldSansPhysics::World()); + + gazebo::Server server1(serverConfig); + gazebo::Server server2(serverConfig); + EXPECT_FALSE(server1.Running()); + EXPECT_FALSE(*server1.Running(0)); + EXPECT_FALSE(server2.Running()); + EXPECT_FALSE(*server2.Running(0)); + EXPECT_EQ(0u, *server1.IterationCount()); + EXPECT_EQ(0u, *server2.IterationCount()); + + // Make the servers run fast. + server1.SetUpdatePeriod(1ns); + server2.SetUpdatePeriod(1ns); + + // Start non-blocking + const size_t iters1 = 9999; + EXPECT_TRUE(server1.Run(false, iters1, false)); + + // Expect that we can't start another instance. + EXPECT_FALSE(server1.Run(true, 10, false)); + + // It's okay to start another server + EXPECT_TRUE(server2.Run(false, 500, false)); + + while (*server1.IterationCount() < iters1 || *server2.IterationCount() < 500) + IGN_SLEEP_MS(100); + + EXPECT_EQ(iters1, *server1.IterationCount()); + EXPECT_EQ(500u, *server2.IterationCount()); + EXPECT_FALSE(server1.Running()); + EXPECT_FALSE(*server1.Running(0)); + EXPECT_FALSE(server2.Running()); + EXPECT_FALSE(*server2.Running(0)); +} + +///////////////////////////////////////////////// +TEST_P(ServerFixture, TwoServersMixedBlocking) +{ + ignition::gazebo::ServerConfig serverConfig; + serverConfig.SetSdfString(TestWorldSansPhysics::World()); + + gazebo::Server server1(serverConfig); + gazebo::Server server2(serverConfig); + EXPECT_FALSE(server1.Running()); + EXPECT_FALSE(*server1.Running(0)); + EXPECT_FALSE(server2.Running()); + EXPECT_FALSE(*server2.Running(0)); + EXPECT_EQ(0u, *server1.IterationCount()); + EXPECT_EQ(0u, *server2.IterationCount()); + + // Make the servers run fast. + server1.SetUpdatePeriod(1ns); + server2.SetUpdatePeriod(1ns); + + server1.Run(false, 10, false); + server2.Run(true, 1000, false); + + while (*server1.IterationCount() < 10) + IGN_SLEEP_MS(100); + + EXPECT_EQ(10u, *server1.IterationCount()); + EXPECT_EQ(1000u, *server2.IterationCount()); + EXPECT_FALSE(server1.Running()); + EXPECT_FALSE(*server1.Running(0)); + EXPECT_FALSE(server2.Running()); + EXPECT_FALSE(*server2.Running(0)); +} + +// Run multiple times. We want to make sure that static globals don't cause +// problems. +INSTANTIATE_TEST_SUITE_P(ServerRepeat, ServerFixture, ::testing::Range(1, 2));