aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDon Gagne <don@thegagnes.com>2014-09-13 10:05:07 -0700
committerDon Gagne <don@thegagnes.com>2014-09-13 10:05:07 -0700
commit21367222379d6ae3b1c5c774942ac2aac5ca32cb (patch)
tree6e7542213e30d06004f3c068fd6d21f6811a0dd4 /src
parent852b36661d5f03d76c8217444554122c3cadfba0 (diff)
parent46a9f616eba368bb864f4faf8e920dad7fd4ecc5 (diff)
downloadpx4-firmware-21367222379d6ae3b1c5c774942ac2aac5ca32cb.tar.gz
px4-firmware-21367222379d6ae3b1c5c774942ac2aac5ca32cb.tar.bz2
px4-firmware-21367222379d6ae3b1c5c774942ac2aac5ca32cb.zip
Merge pull request #1358 from DonLakeFlyer/FTP
Fix mavlink unit test
Diffstat (limited to 'src')
-rw-r--r--src/modules/mavlink/mavlink_ftp.cpp8
-rw-r--r--src/modules/mavlink/mavlink_ftp.h1
-rw-r--r--src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp48
3 files changed, 37 insertions, 20 deletions
diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp
index 64206ac54..cf5fae3b3 100644
--- a/src/modules/mavlink/mavlink_ftp.cpp
+++ b/src/modules/mavlink/mavlink_ftp.cpp
@@ -349,11 +349,15 @@ MavlinkFTP::_workList(PayloadHeader* payload)
}
break;
case DTYPE_DIRECTORY:
+ if (strcmp(entry.d_name, ".") == 0 || strcmp(entry.d_name, "..") == 0) {
+ // Don't bother sending these back
+ continue;
+ }
direntType = kDirentDir;
break;
default:
- direntType = kDirentUnknown;
- break;
+ // We only send back file and diretory entries, skip everything else
+ continue;
}
if (entry.d_type == DTYPE_FILE) {
diff --git a/src/modules/mavlink/mavlink_ftp.h b/src/modules/mavlink/mavlink_ftp.h
index 4892e548c..b52561e8a 100644
--- a/src/modules/mavlink/mavlink_ftp.h
+++ b/src/modules/mavlink/mavlink_ftp.h
@@ -159,7 +159,6 @@ private:
static const char kDirentFile = 'F'; ///< Identifies File returned from List command
static const char kDirentDir = 'D'; ///< Identifies Directory returned from List command
- static const char kDirentUnknown = 'U'; ///< Identifies Unknown entry returned from List command
/// @brief Maximum data size in RequestHeader::data
static const uint8_t kMaxDataLength = MAVLINK_MSG_FILE_TRANSFER_PROTOCOL_FIELD_PAYLOAD_LEN - sizeof(PayloadHeader);
diff --git a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp b/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp
index 3616db237..022041c74 100644
--- a/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp
+++ b/src/modules/mavlink/mavlink_tests/mavlink_ftp_test.cpp
@@ -164,31 +164,24 @@ bool MavlinkFtpTest::_list_test(void)
mavlink_file_transfer_protocol_t ftp_msg;
MavlinkFTP::PayloadHeader *reply;
- char response1[] = "D.|Dempty_dir|Ftest_238.data\t238|Ftest_239.data\t239|Ftest_240.data\t240";
+ char response1[] = "Dempty_dir|Ftest_238.data\t238|Ftest_239.data\t239|Ftest_240.data\t240";
char response2[] = "Ddev|Detc|Dfs|Dobj";
struct _testCase {
- const char *dir;
- char *response;
- bool success;
+ const char *dir; ///< Directory to run List command on
+ char *response; ///< Expected response entries from List command
+ int response_count; ///< Number of directories that should be returned
+ bool success; ///< true: List command should succeed, false: List command should fail
};
struct _testCase rgTestCases[] = {
- { "/bogus", nullptr, false },
- { "/etc/unit_test_data/mavlink_tests", response1, true },
- { "/", response2, true },
+ { "/bogus", nullptr, 0, false },
+ { "/etc/unit_test_data/mavlink_tests", response1, 4, true },
+ { "/", response2, 4, true },
};
for (size_t i=0; i<sizeof(rgTestCases)/sizeof(rgTestCases[0]); i++) {
const struct _testCase *test = &rgTestCases[i];
- uint8_t expected_data_size = strlen(test->response) + 1;
-
- char *ptr = strtok (test->response, "|");
- while (ptr != nullptr)
- {
- ptr = strtok (nullptr, "|");
- }
-
payload.opcode = MavlinkFTP::kCmdListDirectory;
payload.offset = 0;
@@ -203,8 +196,29 @@ bool MavlinkFtpTest::_list_test(void)
if (test->success) {
ut_compare("Didn't get Ack back", reply->opcode, MavlinkFTP::kRspAck);
- ut_compare("Incorrect payload size", reply->size, expected_data_size);
- ut_compare("Ack payload contents incorrect", memcmp(reply->data, test->response, expected_data_size), 0);
+ ut_compare("Incorrect payload size", reply->size, strlen(test->response) + 1);
+
+ // The return order of directories from the List command is not repeatable. So we can't do a direct comparison
+ // to a hardcoded return result string.
+
+ // Convert null terminators to seperator char so we can use strok to parse returned data
+ for (uint8_t j=0; j<reply->size-1; j++) {
+ if (reply->data[j] == 0) {
+ reply->data[j] = '|';
+ }
+ }
+
+ // Loop over returned directory entries trying to find then in the response list
+ char *dir;
+ int response_count = 0;
+ dir = strtok((char *)&reply->data[0], "|");
+ while (dir != nullptr) {
+ ut_assert("Returned directory not found in expected response", strstr(test->response, dir));
+ response_count++;
+ dir = strtok(nullptr, "|");
+ }
+
+ ut_compare("Incorrect number of directory entires returned", test->response_count, response_count);
} else {
ut_compare("Didn't get Nak back", reply->opcode, MavlinkFTP::kRspNak);
ut_compare("Incorrect payload size", reply->size, 2);