Skip to content

Commit

Permalink
Added integration tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jasmeet0915 committed Mar 16, 2023
1 parent 8834439 commit 3693e6f
Show file tree
Hide file tree
Showing 3 changed files with 229 additions and 2 deletions.
4 changes: 2 additions & 2 deletions examples/worlds/camera_lens_flare.sdf
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@
<plugin
filename="gz-sim-lens-flare-system"
name="gz::sim::systems::LensFlare">
</plugin>
</plugin>
</sensor>
</link>
</model>
Expand Down Expand Up @@ -384,7 +384,7 @@
name="gz::sim::systems::LensFlare">
<scale>0.5</scale>
<color>3 3 3</color>
</plugin>
</plugin>
</sensor>
</link>
</model>
Expand Down
103 changes: 103 additions & 0 deletions test/integration/camera_lens_flare.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
/*
* Copyright (C) 2022 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 <gtest/gtest.h>

#ifdef _MSC_VER
#pragma warning(push, 0)
#endif
#include <gz/msgs/image.pb.h>
#ifdef _MSC_VER
#pragma warning(pop)
#endif

#include "gz/sim/Server.hh"
#include "test_config.hh"
#include <gz/common/Console.hh>
#include <gz/common/Util.hh>
#include <gz/math/Pose3.hh>
#include <gz/transport/Node.hh>
#include <gz/utils/ExtraTestMacros.hh>

#include "plugins/MockSystem.hh"
#include "../helpers/EnvTestFixture.hh"

using namespace gz;
using namespace sim;
using namespace std::chrono_literals;

/// \brief Test LensFlare system
class LensFlareTest : public InternalFixture<::testing::Test>
{
};

std::mutex mutex;
msgs::Image imageMsg;
unsigned char *imageBuffer = nullptr;

/////////////////////////////////////////////////
void imageCb(const msgs::Image &_msg)
{
ASSERT_EQ(msgs::PixelFormatType::RGB_INT8,
_msg.pixel_format_type());

// Add the frame to image buffer
mutex.lock();
unsigned int imageSamples = _msg.width() * _msg.height() * 3;

if (!imageBuffer)
imageBuffer = new unsigned char[imageSamples];
memcpy(imageBuffer, _msg.data().c_str(), imageSamples);
mutex.unlock();
}

/////////////////////////////////////////////////
// The test checks the Camera with Lens Flare
TEST_F(LensFlareTest,
GZ_UTILS_TEST_DISABLED_ON_MAC(LensFlareTest))
{
// Start server
ServerConfig serverConfig;
const auto sdfFile = common::joinPaths(std::string(PROJECT_SOURCE_PATH),
"test", "worlds", "camera_lens_flare.sdf");
serverConfig.SetSdfFile(sdfFile);

Server server(serverConfig);
EXPECT_FALSE(server.Running());
EXPECT_FALSE(*server.Running(0));

// Subscribe to the image topic
transport::Node node;
node.Subscribe("/camera_lens_flare", &imageCb);

// Run server and verify that we are receiving a message
// from the camera with lens flare
size_t iters100 = 100u;
server.Run(true, iters100, false);

int sleep{0};
int maxSleep{30};
while (imageBuffer == nullptr && sleep < maxSleep)
{
std::this_thread::sleep_for(100ms);
sleep++;
}
EXPECT_LT(sleep, maxSleep);
ASSERT_NE(imageBuffer, nullptr);

delete[] imageBuffer;
}
124 changes: 124 additions & 0 deletions test/worlds/camera_lens_flare.sdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?xml version="1.0" ?>
<sdf version="1.6">
<world name="lights">
<physics name="1ms" type="ode">
<max_step_size>0.001</max_step_size>
<real_time_factor>1.0</real_time_factor>
</physics>
<plugin
filename="gz-sim-physics-system"
name="gz::sim::systems::Physics">
</plugin>
<plugin
filename="gz-sim-scene-broadcaster-system"
name="gz::sim::systems::SceneBroadcaster">
</plugin>
<plugin
filename="gz-sim-sensors-system"
name="gz::sim::systems::Sensors">
<render_engine>ogre</render_engine>
<background_color>0 0 0 1</background_color>
</plugin>

<light type="directional" name="directional">
<cast_shadows>true</cast_shadows>
<diffuse>0.5 0.5 0.5 1</diffuse>
<specular>0.5 0.5 0.5 1</specular>
<direction>0.0 0.0 -1.0</direction>
</light>

<model name="ground_plane">
<static>true</static>
<pose>3 0 -0.5 0 0 0</pose>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<size>5 8</size>
</plane>
</geometry>
</collision>
<visual name="visual">
<geometry>
<plane>
<size>5 8</size>
</plane>
</geometry>
<material>
<ambient>0.5 0.5 0.5 1</ambient>
<diffuse>0.8 0.8 0.8 1</diffuse>
</material>
</visual>
</link>
</model>

<model name='camera_model_normal'>
<static>1</static>
<pose>0 0 0 0 0.0 0</pose>
<link name='body'>
<visual name='visual'>
<geometry>
<box>
<size>0.1 0.1 0.1</size>
</box>
</geometry>
</visual>
<sensor name='camera_normal' type='camera'>
<visualize>1</visualize>
<camera>
<horizontal_fov>0.927295218</horizontal_fov>
<image>
<width>320</width>
<height>240</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.1</near>
<far>100</far>
</clip>
</camera>
<always_on>1</always_on>
<update_rate>30</update_rate>
<topic>camera_normal</topic>
</sensor>
</link>
</model>

<model name='camera_model_lens_flare'>
<static>1</static>
<pose>0 0 0 0 0.0 0</pose>
<link name='body'>
<visual name='visual'>
<geometry>
<box>
<size>0.1 0.1 0.1</size>
</box>
</geometry>
</visual>
<sensor name='camera_lens_flare' type='camera'>
<visualize>1</visualize>
<camera>
<horizontal_fov>0.927295218</horizontal_fov>
<image>
<width>320</width>
<height>240</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.1</near>
<far>100</far>
</clip>
</camera>
<always_on>1</always_on>
<update_rate>30</update_rate>
<topic>camera_lens_flare</topic>
<plugin
filename="gz-sim-lens-flare-system"
name="gz::sim::systems::LensFlare">
</plugin>
</sensor>
</link>
</model>

</world>
</sdf>

0 comments on commit 3693e6f

Please sign in to comment.