18 #include <gmock/gmock.h> 19 #include <gtest/gtest.h> 21 #include <aws/core/Aws.h> 22 #include <aws/s3/S3Client.h> 23 #include <boost/shared_ptr.hpp> 25 #include <file_uploader_msgs/UploadFilesAction.h> 26 #include <file_uploader_msgs/UploadFilesActionGoal.h> 27 #include <file_uploader_msgs/UploadFilesGoal.h> 35 using ::testing::Return;
37 using ::testing::ContainerEq;
38 using ::testing::Invoke;
47 MOCK_METHOD0(setRejected,
void());
48 MOCK_METHOD0(setAccepted,
void());
49 MOCK_METHOD0(setAborted,
void());
50 MOCK_METHOD0(setSucceeded,
void());
51 MOCK_METHOD2(setCanceled,
void(
const file_uploader_msgs::UploadFilesResult&,
const std::string &));
52 MOCK_METHOD2(setAborted,
void(
const file_uploader_msgs::UploadFilesResult&,
const std::string &));
53 MOCK_METHOD2(setSucceeded,
void(
const file_uploader_msgs::UploadFilesResult&,
const std::string &));
55 MOCK_CONST_METHOD0(getGoalStatus, actionlib_msgs::GoalStatus());
57 MOCK_CONST_METHOD1(publishFeedback,
void(file_uploader_msgs::UploadFilesFeedback &));
70 goal(new file_uploader_msgs::UploadFilesGoal())
75 EXPECT_CALL(*upload_manager, IsAvailable()).WillRepeatedly(Return(isAvailable));
79 givenUploadManagerAvailability(
false);
83 givenUploadManagerAvailability(
true);
87 EXPECT_CALL(*upload_manager, IsAvailable()).Times(2).WillOnce(Return(
false)).WillOnce(Return(
true));
91 goal->files.push_back(
"test_file_name");
92 goal->upload_location =
"my/upload/dir";
93 EXPECT_CALL(*goal_handle, getGoal()).WillRepeatedly(Return(goal));
94 actionlib_msgs::GoalStatus goal_status;
95 goal_status.status = actionlib_msgs::GoalStatus::PENDING;
96 ON_CALL(*goal_handle, getGoalStatus()).WillByDefault(Return(goal_status));
100 auto upload_files_action = [outcome](
101 const std::vector<UploadDescription> & upload_desc,
102 const std::string & text,
103 const boost::function<void (const std::vector<UploadDescription>&)>& feedback_fn) {
105 feedback_fn(upload_desc);
108 EXPECT_CALL(*upload_manager, UploadFiles(_, _, _)).WillOnce(Invoke(upload_files_action));
113 givenUploadWithOutcome(Model::PutObjectOutcome(Model::PutObjectResult()));
118 givenUploadWithOutcome(Model::PutObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::INTERNAL_FAILURE,
false)));
122 actionlib_msgs::GoalStatus goal_status;
123 goal_status.status = status;
124 EXPECT_CALL(*goal_handle, getGoalStatus()).WillRepeatedly(Return(goal_status));
128 givenGoalHandleWithStatus(actionlib_msgs::GoalStatus::PREEMPTING);
132 givenGoalHandleWithStatus(actionlib_msgs::GoalStatus::PENDING);
136 EXPECT_CALL(*goal_handle, setRejected());
140 EXPECT_CALL(*goal_handle, setAccepted());
144 EXPECT_CALL(*upload_manager, CancelUpload());
148 EXPECT_CALL(*goal_handle, setSucceeded(_, _));
152 EXPECT_CALL(*goal_handle, setCanceled(_, _));
156 EXPECT_CALL(*goal_handle, setAborted(_, _));
162 givenUnAvailableUploadManager();
163 assertGoalIsRejected();
170 givenAvailableUploadManager();
171 assertGoalIsAccepted();
173 givenSuccessfullUpload();
174 assertGoalIsSuccess();
181 givenAvailableUploadManager();
182 assertGoalIsAccepted();
185 assertGoalIsAborted();
192 givenAvailableUploadManager();
193 assertGoalIsAccepted();
195 givenSuccessfullUpload();
196 givenGoalHandleCancelRequested();
197 assertGoalIsCanceled();
205 asssertUploadIsCanceled();
210 int main(
int argc,
char ** argv)
213 Aws::InitAPI(options);
215 ::testing::InitGoogleTest(&argc, argv);
216 auto result = RUN_ALL_TESTS();
217 Aws::ShutdownAPI(options);
int main(int argc, char **argv)
void givenUnAvailableUploadManager()
void assertGoalIsAborted()
void givenSuccessfullUpload()
void assertGoalIsAccepted()
TEST_F(S3FileUploaderActionServerHandlerTests, TestInactiveUploadManager)
void givenUploadManagerAvailability(bool isAvailable)
void assertGoalIsCanceled()
void givenGoalHandleWithStatus(int status)
void assertGoalIsSuccess()
void asssertUploadIsCanceled()
S3FileUploaderActionServerHandlerTests()
std::shared_ptr< MockS3UploadManager > upload_manager
void givenEventuallyAvailableUploadManager()
void assertGoalIsRejected()
static void UploadToS3(S3UploadManager &upload_manager, const std::string &bucket, T &goal_handle)
static void CancelUploadToS3(S3UploadManager &upload_manager)
void givenAvailableUploadManager()
boost::shared_ptr< file_uploader_msgs::UploadFilesGoal > goal
MockGoalHandle(const MockGoalHandle ©)
void givenGoalHandleCancelRequested()
std::shared_ptr< MockGoalHandle > goal_handle
void givenUploadWithOutcome(Model::PutObjectOutcome outcome)
void givenGoalHandlePending()