Skip to content

Commit 5c52800

Browse files
author
dave
committed
interim commit from macos, tests do not pass.
1 parent af2568f commit 5c52800

File tree

4 files changed

+117
-63
lines changed

4 files changed

+117
-63
lines changed

src/TaskManagerIO.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,14 @@ void TaskManager::dealWithInterrupt() {
177177
auto task = getTask(i);
178178
if(task->isInUse() && task->isEvent()) {
179179
task->processEvent();
180+
removeFromQueue(task);
181+
if(task->isRepeating()) {
182+
putItemIntoQueue(task);
183+
}
184+
else {
185+
task->clear();
186+
tm_internal::tmNotification(tm_internal::TM_INFO_TASK_FREE, TASKMGR_INVALIDID);
187+
}
180188
}
181189
}
182190
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
2+
#include <AUnit.h>
3+
#include <ExecWithParameter.h>
4+
#include "TaskManagerIO.h"
5+
#include "test_utils.h"
6+
7+
using namespace aunit;
8+
9+
bool taskWithinEvent;
10+
11+
class TestPolledEvent : public BaseEvent {
12+
private:
13+
int execCalls;
14+
int scheduleCalls;
15+
uint32_t interval;
16+
bool triggerNow;
17+
public:
18+
TestPolledEvent() {
19+
execCalls = scheduleCalls = 0;
20+
interval = 100000; // 100 millis
21+
triggerNow = false;
22+
taskWithinEvent = false;
23+
}
24+
25+
~TestPolledEvent() override = default;
26+
27+
void exec() override {
28+
execCalls++;
29+
taskManager.scheduleOnce(100, [] {
30+
taskWithinEvent = true;
31+
});
32+
setCompleted(true);
33+
}
34+
35+
uint32_t timeOfNextCheck() override {
36+
scheduleCalls++;
37+
setTriggered(triggerNow);
38+
return interval;
39+
}
40+
41+
void startTriggering() {
42+
triggerNow = true;
43+
interval = 10000;
44+
}
45+
46+
int getScheduleCalls() const { return scheduleCalls; }
47+
48+
int getExecCalls() const { return execCalls; }
49+
} polledEvent;
50+
51+
testF(TimingHelpFixture, testRepeatedRaisingOfEvent) {
52+
fail();
53+
}
54+
55+
testF(TimingHelpFixture, testInterruptTestStartsTask) {
56+
fail();
57+
}
58+
59+
typedef bool (*TMPredicate)();
60+
61+
bool runScheduleUntilMatchOrTimeout(TMPredicate predicate) {
62+
unsigned long startTime = millis();
63+
// wait until the predicate matches, or it takes too long.
64+
while (!predicate() && (millis() - startTime) < 1000) {
65+
taskManager.yieldForMicros(10000);
66+
}
67+
return predicate();
68+
}
69+
70+
testF(TimingHelpFixture, testRaiseEventStartTaskCompleted) {
71+
EnsureExecutionWithin timelyChecker(500);
72+
73+
//taskManager.registerEvent(&polledEvent);
74+
75+
assertTrue(runScheduleUntilMatchOrTimeout([] { return polledEvent.getScheduleCalls() >= 10; } ));
76+
77+
// and now we tell the event to trigger itself
78+
polledEvent.startTriggering();
79+
80+
// wait until the exec() method is called
81+
assertTrue(runScheduleUntilMatchOrTimeout([] { return polledEvent.getExecCalls() != 0; }));
82+
83+
// and then make sure that the task registed inside the event triggers
84+
assertTrue(runScheduleUntilMatchOrTimeout([] { return taskWithinEvent; }));
85+
86+
assertTrue(timelyChecker.ensureTimely());
87+
}

tests/taskMgrTests/taskManagerCoreTests.cpp

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
#include <AUnit.h>
3+
#include <ExecWithParameter.h>
34
#include "TaskManagerIO.h"
45
#include "test_utils.h"
56

@@ -151,66 +152,3 @@ testF(TimingHelpFixture, cancellingAJobAfterCreation) {
151152

152153
assertEqual(taskManager.getFirstTask(), NULL);
153154
}
154-
155-
class TestPolledEvent : public BaseEvent {
156-
private:
157-
int execCalls;
158-
int scheduleCalls;
159-
uint32_t interval;
160-
bool triggerNow;
161-
public:
162-
TestPolledEvent() {
163-
execCalls = scheduleCalls = 0;
164-
interval = 100000; // 100 millis
165-
triggerNow = false;
166-
}
167-
~TestPolledEvent() override = default;
168-
169-
void exec() override {
170-
execCalls++;
171-
}
172-
173-
uint32_t timeOfNextCheck() override {
174-
setTriggered(triggerNow);
175-
return interval;
176-
}
177-
178-
void startTriggering() {
179-
triggerNow = true;
180-
interval = 10000;
181-
}
182-
183-
int getScheduleCalls() const { return scheduleCalls; }
184-
int getExecCalls() const { return execCalls; }
185-
} polledEvent;
186-
187-
188-
189-
testF(TimingHelpFixture, testRaisingEventsWithTaskMgr) {
190-
unsigned long startTime = millis();
191-
192-
polledEvent.markTriggeredAndNotify();
193-
194-
taskManager.yieldForMicros(1000);
195-
196-
assertMoreOrEqual(1, polledEvent.getExecCalls());
197-
198-
// wait until the task is marked as scheduled.
199-
while(polledEvent.getScheduleCalls() < 10 && (millis() - startTime) < 1000) {
200-
taskManager.yieldForMicros(10000);
201-
}
202-
203-
// we must have called the schedule call at least 10 times.
204-
assertMoreOrEqual(10, polledEvent.getScheduleCalls());
205-
206-
polledEvent.startTriggering();
207-
208-
// wait until the task is marked as scheduled.
209-
while(polledEvent.getExecCalls() < 10 && (millis() - startTime) < 1000) {
210-
taskManager.yieldForMicros(10000);
211-
}
212-
213-
assertMoreOrEqual(10, polledEvent.getExecCalls());
214-
215-
assertLess(500UL, millis() - startTime);
216-
}

tests/taskMgrTests/test_utils.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#define TASKMANGERIO_TEST_UTILS_H
44

55
#include <AUnit.h>
6+
#include <IoLogging.h>
67

78
void dumpTasks();
89

@@ -20,6 +21,26 @@ extern uint8_t pinNo;
2021

2122
using namespace aunit;
2223

24+
class EnsureExecutionWithin {
25+
private:
26+
unsigned long startMillis;
27+
unsigned long maximumTime;
28+
public:
29+
explicit EnsureExecutionWithin(unsigned long maxWaiting) {
30+
startMillis = millis();
31+
maximumTime = maxWaiting;
32+
}
33+
bool ensureTimely() {
34+
if(millis() > (startMillis + maximumTime)) {
35+
serdebugF2("TEST EXECUTION OUT OF RANGE ", int(millis() - startMillis));
36+
return false;
37+
}
38+
39+
serdebugF2("Test execution within range: ", int(millis() - startMillis));
40+
return true;
41+
}
42+
};
43+
2344
class TimingHelpFixture : public TestOnce {
2445
protected:
2546
void setup() override {

0 commit comments

Comments
 (0)