Skip to content

Commit

Permalink
backend: update mission proto file
Browse files Browse the repository at this point in the history
  • Loading branch information
JonasVautherin committed Apr 3, 2018
1 parent b3d0a67 commit e88f522
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 80 deletions.
2 changes: 1 addition & 1 deletion backend/proto
Submodule proto updated from 33ab61 to 0dd841
4 changes: 2 additions & 2 deletions backend/src/backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include "core/corerpc_impl.h"
#include "dronecore.h"
#include "log.h"
#include "mission/missionrpc_impl.h"
#include "mission/mission_service_impl.h"
#include "telemetry/telemetry_service_impl.h"

namespace dronecore {
Expand Down Expand Up @@ -42,7 +42,7 @@ class DroneCoreBackend::Impl
builder.RegisterService(&actionService);

Mission mission(_dc.device());
MissionServiceImpl missionService(mission);
MissionServiceImpl<dronecore::Mission> missionService(mission);
builder.RegisterService(&missionService);

Telemetry telemetry(_dc.device());
Expand Down
21 changes: 21 additions & 0 deletions backend/src/plugins/mission/mission_service_impl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <future>

#include "mission/mission.h"
#include "mission/mission.grpc.pb.h"

namespace dronecore {
namespace backend {

template <typename Mission>
class MissionServiceImpl final : public dronecore::rpc::mission::MissionService::Service
{
public:
MissionServiceImpl(Mission &mission)
: _mission(mission) {}

private:
Mission &_mission;
};

} // namespace backend
} // namespace dronecore
73 changes: 0 additions & 73 deletions backend/src/plugins/mission/missionrpc_impl.h

This file was deleted.

3 changes: 2 additions & 1 deletion backend/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
cmake_minimum_required(VERSION 3.1)

add_executable(unit_tests_backend
connection_initiator_test.cpp
action_service_impl_test.cpp
connection_initiator_test.cpp
mission_service_impl_test.cpp
telemetry_service_impl_test.cpp
)

Expand Down
2 changes: 2 additions & 0 deletions backend/test/action_service_impl_test.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include <gmock/gmock.h>
#include <string>
#include <utility>
#include <vector>

#include "action/action_service_impl.h"
#include "action/mocks/action_mock.h"
Expand Down
57 changes: 57 additions & 0 deletions backend/test/mission_service_impl_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#include <gmock/gmock.h>
#include <utility>
#include <vector>

#include "mission/mission_service_impl.h"
#include "mission/mocks/mission_mock.h"

namespace {

using testing::NiceMock;
using testing::Return;

using MockMission = NiceMock<dronecore::testing::MockMission>;
using MissionServiceImpl = dronecore::backend::MissionServiceImpl<MockMission>;

using MissionResult = dronecore::rpc::mission::MissionResult;
using InputPair = std::pair<std::string, dronecore::Mission::Result>;

std::vector<InputPair> generateInputPairs();

class MissionServiceImplTest : public ::testing::TestWithParam<InputPair> {};

TEST_P(MissionServiceImplTest, uploadResultIsTranslatedCorrectly)
{
// TODO
}

INSTANTIATE_TEST_CASE_P(MissionResultCorrespondences,
MissionServiceImplTest,
::testing::ValuesIn(generateInputPairs()));

std::vector<InputPair> generateInputPairs()
{
std::vector<InputPair> input_pairs;
input_pairs.push_back(std::make_pair("UNKNOWN", dronecore::Mission::Result::UNKNOWN));
input_pairs.push_back(std::make_pair("SUCCESS", dronecore::Mission::Result::SUCCESS));
input_pairs.push_back(std::make_pair("ERROR", dronecore::Mission::Result::ERROR));
input_pairs.push_back(std::make_pair("TOO_MANY_MISSION_ITEMS",
dronecore::Mission::Result::TOO_MANY_MISSION_ITEMS));
input_pairs.push_back(std::make_pair("BUSY", dronecore::Mission::Result::BUSY));
input_pairs.push_back(std::make_pair("TIMEOUT", dronecore::Mission::Result::TIMEOUT));
input_pairs.push_back(std::make_pair("INVALID_ARGUMENT",
dronecore::Mission::Result::INVALID_ARGUMENT));
input_pairs.push_back(std::make_pair("UNSUPPORTED", dronecore::Mission::Result::UNSUPPORTED));
input_pairs.push_back(std::make_pair("NO_MISSION_AVAILABLE",
dronecore::Mission::Result::NO_MISSION_AVAILABLE));
input_pairs.push_back(std::make_pair("FAILED_TO_OPEN_QGC_PLAN",
dronecore::Mission::Result::FAILED_TO_OPEN_QGC_PLAN));
input_pairs.push_back(std::make_pair("FAILED_TO_PARSE_QGC_PLAN",
dronecore::Mission::Result::FAILED_TO_PARSE_QGC_PLAN));
input_pairs.push_back(std::make_pair("UNSUPPORTED_MISSION_CMD",
dronecore::Mission::Result::UNSUPPORTED_MISSION_CMD));

return input_pairs;
}

} // namespace
6 changes: 3 additions & 3 deletions plugins/mission/mission.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ class Mission : public PluginBase
* @brief Possible results returned for mission requests.
*/
enum class Result {
SUCCESS = 0, /**< @brief %Request succeeded. */
UNKNOWN, /**< @brief Unknown error. */
SUCCESS, /**< @brief %Request succeeded. */
ERROR, /**< @brief Error. */
TOO_MANY_MISSION_ITEMS, /**< @brief Too many MissionItem objects in the mission. */
BUSY, /**< @brief %Vehicle busy. */
Expand All @@ -49,8 +50,7 @@ class Mission : public PluginBase
NO_MISSION_AVAILABLE, /**< @brief No mission available on device. */
FAILED_TO_OPEN_QGC_PLAN, /**< @brief Failed to open QGroundControl plan */
FAILED_TO_PARSE_QGC_PLAN, /**< @brief Failed to parse QGroundControl plan */
UNSUPPORTED_MISSION_CMD, /**< @brief Unsupported mission command */
UNKNOWN /**< @brief Unknown error. */
UNSUPPORTED_MISSION_CMD /**< @brief Unsupported mission command */
};

/**
Expand Down
21 changes: 21 additions & 0 deletions plugins/mission/mocks/mission_mock.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <gmock/gmock.h>
#include <memory>
#include <vector>

#include "mission/mission.h" // TODO: remove this dependency by moving the datastructs out of Mission
#include "mission/mission_item.h"

namespace dronecore {
namespace testing {

typedef std::function<void(Mission::Result)> result_callback_t;

class MockMission
{
public:
MOCK_CONST_METHOD2(upload_mission_async, void(const std::vector<std::shared_ptr<MissionItem>> &,
result_callback_t));
};

} // namespace testing
} // namespace dronecore

0 comments on commit e88f522

Please sign in to comment.