Skip to content

Commit 26f8b83

Browse files
committed
Making ReportTask non-moveable and adjusting where necessary. Fixing error logic to raise proper aws error and added test
1 parent 5a0a956 commit 26f8b83

File tree

3 files changed

+24
-58
lines changed

3 files changed

+24
-58
lines changed

devicedefender/include/aws/iotdevicedefender/DeviceDefender.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ namespace Aws
5151
public:
5252
~ReportTask();
5353
ReportTask(const ReportTask &) = delete;
54-
ReportTask(ReportTask &&) noexcept;
5554
ReportTask &operator=(const ReportTask &) = delete;
56-
ReportTask &operator=(ReportTask &&) noexcept;
5755

5856
/**
5957
* Initiates stopping of the Defender V1 task.
@@ -143,7 +141,7 @@ namespace Aws
143141
/**
144142
* Builds a device defender v1 task object from the set options.
145143
*/
146-
ReportTask Build() noexcept;
144+
std::shared_ptr<ReportTask> Build() noexcept;
147145

148146
private:
149147
Crt::Allocator *m_allocator;

devicedefender/source/DeviceDefender.cpp

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
* SPDX-License-Identifier: Apache-2.0.
44
*/
5+
#include "aws/common/error.h"
56
#include "aws/crt/Types.h"
67
#include "aws/iotdevice/device_defender.h"
78
#include <aws/common/clock.h>
@@ -60,45 +61,6 @@ namespace Aws
6061
}
6162
}
6263

63-
ReportTask::ReportTask(ReportTask &&toMove) noexcept
64-
: OnTaskCancelled(std::move(toMove.OnTaskCancelled)), cancellationUserdata(toMove.cancellationUserdata),
65-
m_allocator(toMove.m_allocator), m_status(toMove.m_status), m_taskConfig(std::move(toMove.m_taskConfig)),
66-
m_owningTask(toMove.m_owningTask), m_lastError(toMove.m_lastError),
67-
m_mqttConnection(toMove.m_mqttConnection), m_eventLoopGroup(toMove.m_eventLoopGroup)
68-
{
69-
toMove.m_taskConfig = m_taskConfig;
70-
toMove.m_owningTask = m_owningTask;
71-
m_owningTask = nullptr;
72-
toMove.m_status = ReportTaskStatus::Stopped;
73-
toMove.m_owningTask = nullptr;
74-
toMove.m_lastError = AWS_ERROR_UNKNOWN;
75-
}
76-
77-
ReportTask &ReportTask::operator=(ReportTask &&toMove) noexcept
78-
{
79-
if (this != &toMove)
80-
{
81-
this->~ReportTask();
82-
83-
OnTaskCancelled = std::move(toMove.OnTaskCancelled);
84-
cancellationUserdata = toMove.cancellationUserdata;
85-
m_allocator = toMove.m_allocator;
86-
m_status = toMove.m_status;
87-
m_taskConfig = toMove.m_taskConfig;
88-
m_owningTask = toMove.m_owningTask;
89-
m_lastError = toMove.m_lastError;
90-
91-
toMove.OnTaskCancelled = nullptr;
92-
toMove.cancellationUserdata = nullptr;
93-
toMove.m_allocator = nullptr;
94-
toMove.m_status = ReportTaskStatus::Stopped;
95-
toMove.m_owningTask = nullptr;
96-
toMove.m_lastError = AWS_ERROR_UNKNOWN;
97-
}
98-
99-
return *this;
100-
}
101-
10264
ReportTaskStatus ReportTask::GetStatus() noexcept { return this->m_status; }
10365

10466
int ReportTask::StartTask() noexcept
@@ -114,14 +76,17 @@ namespace Aws
11476
aws_event_loop_group_get_next_loop(m_eventLoopGroup.GetUnderlyingHandle())))
11577
{
11678
this->m_lastError = aws_last_error();
117-
aws_raise_error(this->m_lastError);
11879
}
11980
else
12081
{
12182
this->m_status = ReportTaskStatus::Running;
12283
return_code = AWS_OP_SUCCESS;
12384
}
12485
}
86+
else
87+
{
88+
aws_raise_error(AWS_ERROR_INVALID_STATE);
89+
}
12590
return return_code;
12691
}
12792

@@ -195,10 +160,9 @@ namespace Aws
195160
return *this;
196161
}
197162

198-
ReportTask ReportTaskBuilder::Build() noexcept
163+
std::shared_ptr<ReportTask> ReportTaskBuilder::Build() noexcept
199164
{
200-
201-
return ReportTask(
165+
return std::shared_ptr<ReportTask>(new ReportTask(
202166
m_allocator,
203167
m_mqttConnection,
204168
m_thingName,
@@ -207,7 +171,7 @@ namespace Aws
207171
m_taskPeriodSeconds,
208172
m_networkConnectionSamplePeriodSeconds,
209173
static_cast<OnTaskCancelledHandler &&>(m_onCancelled),
210-
m_cancellationUserdata);
174+
m_cancellationUserdata));
211175
}
212176

213177
} // namespace Iotdevicedefenderv1

devicedefender/tests/DeviceDefenderTest.cpp

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
* SPDX-License-Identifier: Apache-2.0.
44
*/
5+
#include "aws/common/error.h"
56
#include <aws/crt/Api.h>
67

78
#include <aws/iotdevicecommon/IotDevice.h>
@@ -61,15 +62,17 @@ static int s_TestDeviceDefenderResourceSafety(Aws::Crt::Allocator *allocator, vo
6162
.WithTaskCancelledHandler(onCancelled)
6263
.WithTaskCancellationUserData(&callbackSuccess);
6364

64-
Aws::Iotdevicedefenderv1::ReportTask task = taskBuilder.Build();
65+
std::shared_ptr<Aws::Iotdevicedefenderv1::ReportTask> task = taskBuilder.Build();
6566

66-
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Ready, (int)task.GetStatus());
67+
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Ready, (int)task->GetStatus());
6768

68-
ASSERT_SUCCESS(task.StartTask());
69-
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Running, (int)task.GetStatus());
70-
task.StopTask();
69+
ASSERT_SUCCESS(task->StartTask());
70+
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Running, (int)task->GetStatus());
71+
ASSERT_FAILS(task->StartTask());
72+
ASSERT_TRUE(aws_last_error() == AWS_ERROR_INVALID_STATE);
73+
task->StopTask();
7174

72-
ASSERT_TRUE(task.GetStatus() == Aws::Iotdevicedefenderv1::ReportTaskStatus::Stopped);
75+
ASSERT_TRUE(task->GetStatus() == Aws::Iotdevicedefenderv1::ReportTaskStatus::Stopped);
7376

7477
{
7578
std::unique_lock<std::mutex> lock(mutex);
@@ -83,7 +86,7 @@ static int s_TestDeviceDefenderResourceSafety(Aws::Crt::Allocator *allocator, vo
8386

8487
ASSERT_FALSE(mqttClient);
8588

86-
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Stopped, (int)task.GetStatus());
89+
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Stopped, (int)task->GetStatus());
8790
}
8891

8992
return AWS_ERROR_SUCCESS;
@@ -131,12 +134,13 @@ static int s_TestDeviceDefenderFailedTest(Aws::Crt::Allocator *allocator, void *
131134
.WithTaskPeriodSeconds((uint32_t)1UL)
132135
.WithReportFormat(Aws::Iotdevicedefenderv1::ReportFormat::AWS_IDDRF_SHORT_JSON);
133136

134-
Aws::Iotdevicedefenderv1::ReportTask task = taskBuilder.Build();
137+
std::shared_ptr<Aws::Iotdevicedefenderv1::ReportTask> task = taskBuilder.Build();
135138

136-
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Ready, (int)task.GetStatus());
139+
ASSERT_INT_EQUALS((int)Aws::Iotdevicedefenderv1::ReportTaskStatus::Ready, (int)task->GetStatus());
137140

138-
ASSERT_INT_EQUALS(AWS_OP_ERR, task.StartTask());
139-
ASSERT_INT_EQUALS(AWS_ERROR_IOTDEVICE_DEFENDER_UNSUPPORTED_REPORT_FORMAT, task.LastError());
141+
ASSERT_INT_EQUALS(AWS_ERROR_IOTDEVICE_DEFENDER_UNSUPPORTED_REPORT_FORMAT, task->LastError());
142+
ASSERT_FAILS(task->StartTask());
143+
ASSERT_TRUE(aws_last_error() == AWS_ERROR_INVALID_STATE);
140144

141145
mqttConnection->Disconnect();
142146
ASSERT_TRUE(mqttConnection);

0 commit comments

Comments
 (0)