Snap for 5636702 from 774f9ade4bb611c51f26629df23dddc1d1a19fff to qt-c2f2-release
Change-Id: I1e7e37099c177f58aab38624fd0df4456d6b9799
diff --git a/src/faceauth_tests.cc b/src/faceauth_tests.cc
index 273cd5a..cd41d98 100644
--- a/src/faceauth_tests.cc
+++ b/src/faceauth_tests.cc
@@ -51,9 +51,6 @@
void FaceAuthTest::SetUpTestCase() {
srand(time(NULL));
- for (int i = 0; i <= MAX_NUM_PROFILES; ++i) {
- user_ids.push_back(rand());
- }
uart_printer = test_harness::TestHarness::MakeUnique();
client = nugget_tools::MakeNuggetClient();
@@ -115,7 +112,7 @@
static fa_result_t MakeResult(uint64_t session_id, int32_t error,
uint32_t output_data1 = 0,
uint32_t output_data2 = 0,
- uint32_t lockout_event = FACEAUTH_LOCKOUT_NOP) {
+ uint32_t output_data3 = 0) {
fa_result_t result;
memset(&result, 0, sizeof(fa_result_t));
result.version = 1;
@@ -123,7 +120,7 @@
result.error = error;
result.output.data.first = output_data1;
result.output.data.second = output_data2;
- result.lockout_event = lockout_event;
+ result.output.data.third = output_data3;
result.complete = 1;
result.crc = CalcCrc8(reinterpret_cast<const uint8_t*>(&result),
offsetof(struct fa_result_t, crc));
@@ -148,11 +145,11 @@
else
buffer.push_back(0);
}
- for (size_t i = 0; i < sizeof(fa_token_t); ++i) {
- if (token)
+
+ if (token) {
+ for (size_t i = 0; i < sizeof(fa_token_t); ++i) {
buffer.push_back(*(reinterpret_cast<const uint8_t*>(token) + i));
- else
- buffer.push_back(0);
+ }
}
return buffer;
@@ -172,7 +169,7 @@
EXPECT_EQ(r1.error, r2.error);
EXPECT_EQ(r1.output.data.first, r2.output.data.first);
EXPECT_EQ(r1.output.data.second, r2.output.data.second);
- EXPECT_EQ(r1.lockout_event, r2.lockout_event);
+ EXPECT_EQ(r1.output.data.third, r2.output.data.third);
EXPECT_EQ(r1.complete, r2.complete);
EXPECT_EQ(r1.crc, r2.crc);
}
@@ -181,7 +178,7 @@
const fa_embedding_t* embed,
const fa_token_t* token) {
vector<uint8_t> buffer_rx;
- buffer_rx.resize(1024);
+ buffer_rx.resize(512);
vector<uint8_t> buffer_tx = Task2Buffer(task, embed, token);
FaceAuthTest::client->CallApp(APP_ID_FACEAUTH_TEST, 1, buffer_tx, &buffer_rx);
@@ -195,6 +192,19 @@
}
void FaceAuthTest::SetUp() {
+ user_ids.clear();
+ for (int i = 0; i <= MAX_NUM_PROFILES; ++i) {
+ user_ids.push_back(rand());
+ }
+
+ fa_task_t task;
+ fa_embedding_t embed;
+ fa_token_t token;
+ memset(&task, 0, sizeof(task));
+ memset(&embed, 0, sizeof(embed));
+ memset(&token, 0, sizeof(token));
+ RunTask(task, &embed, &token);
+
for (int profiles = 1; profiles <= MAX_NUM_PROFILES; ++profiles) {
Run(MakeResult(0x0, FACEAUTH_SUCCESS),
MakeTask(0x0, profiles, FACEAUTH_CMD_ERASE));
@@ -208,7 +218,7 @@
Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_NOMATCH),
MakeTask(session_id, 0x1, FACEAUTH_CMD_COMP), MakeEmbedding(0x11));
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0x1),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x1),
MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11));
session_id++;
Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_MATCH),
@@ -226,12 +236,12 @@
uint64_t session_id = 0xFACE000022220000ull;
for (uint32_t i = 0; i < 20; ++i) {
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, profile1),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, profile1),
MakeTask(session_id, profile1, FACEAUTH_CMD_ENROLL),
MakeEmbedding((i == slot1) ? 0x11 : 0x0));
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, profile2),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, profile2),
MakeTask(session_id, profile2, FACEAUTH_CMD_ENROLL),
MakeEmbedding((i == slot2) ? 0xAA : 0x0));
}
@@ -254,12 +264,12 @@
uint64_t session_id = 0xFACE000033330000ull;
for (int i = 0; i < 20; ++i) {
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0x1),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x1),
MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0));
}
session_id++;
- Run(MakeResult(session_id, FACEAUTH_ERR_SFS_FULL, 0x1),
+ Run(MakeResult(session_id, FACEAUTH_ERR_SFS_FULL, 0, 0, 0x1),
MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0));
}
@@ -324,29 +334,21 @@
EXPECT_EQ(IsProfileLocked(6), false);
}
-TEST_F(FaceAuthTest, ValidProfileUserIDTest) {
- fa_token_t token;
+TEST_F(FaceAuthTest, ValidProfileIDTest) {
uint64_t session_id = 0xFACE000088880000ull;
session_id++;
- token = MakeToken(1);
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, 1),
- MakeTask(session_id, 0, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0), &token);
+ Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_ARGS),
+ MakeTask(session_id, 0, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0));
- for (int i = 1; i <= 6; ++i) {
+ for (int i = 1; i <= MAX_NUM_PROFILES; ++i) {
session_id++;
- token = MakeToken(i);
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, i),
- MakeTask(session_id, (i % 2) ? i : 0, FACEAUTH_CMD_ENROLL),
- MakeEmbedding(0x0), &token);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, i),
+ MakeTask(session_id, i, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0));
}
session_id++;
- token = MakeToken(2);
- Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_TOKEN),
- MakeTask(session_id, 3, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x0), &token);
- session_id++;
- Run(MakeResult(session_id, FACEAUTH_ERR_SFS_FULL),
- MakeTask(session_id, 0, FACEAUTH_CMD_ENROLL));
+ Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_ARGS),
+ MakeTask(session_id, MAX_NUM_PROFILES + 1, FACEAUTH_CMD_ENROLL));
}
TEST_F(FaceAuthTest, InvalidCommandTest) {
@@ -399,7 +401,7 @@
TEST_F(FaceAuthTest, EmbeddingVersionTest) {
uint64_t session_id = 0xFACE0000BBBB0000ull;
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, 1),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 1),
MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11));
session_id++;
Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_MATCH),
@@ -412,7 +414,7 @@
TEST_F(FaceAuthTest, FirmwareVersionTest) {
uint64_t session_id = 0xFACE0000CCCC0000ull;
session_id++;
- Run(MakeResult(session_id, FACEAUTH_SUCCESS, 1),
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 1),
MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11));
session_id++;
Run(MakeResult(session_id, FACEAUTH_ERR_VERSION, FACEAUTH_NOMATCH),
@@ -435,6 +437,136 @@
MakeEmbedding(0x11));
}
+TEST_F(FaceAuthTest, GetProfileInfoTest) {
+ uint64_t session_id = 0xFACE0000CCCC0000ull;
+ user_ids[1] = user_ids[4];
+ user_ids[2] = user_ids[4];
+
+ for (int i = 1; i <= MAX_NUM_PROFILES; ++i) {
+ session_id++;
+ fa_token_t token = MakeToken(i);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, i),
+ MakeTask(session_id, i, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+ }
+
+ union {
+ uint8_t map[8];
+ struct {
+ uint32_t first;
+ uint32_t second;
+ };
+ } expected = {0};
+
+ for (int i = 0; i < MAX_NUM_PROFILES; ++i) {
+ for (int j = 0; j < MAX_NUM_PROFILES; ++j) {
+ expected.map[i] |= ((user_ids[i + 1] == user_ids[j + 1]) << j);
+ }
+ }
+
+ for (int i = 1; i <= MAX_NUM_PROFILES; ++i) {
+ session_id++;
+ fa_token_t token = MakeToken(i);
+ expected.map[MAX_NUM_PROFILES] = expected.map[i - 1];
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, expected.first,
+ expected.second),
+ MakeTask(session_id, 1, FACEAUTH_CMD_GET_PROFILE_INFO),
+ MakeEmbedding(0x11), &token);
+ }
+
+ for (int i = 1; i <= MAX_NUM_PROFILES; ++i) {
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, expected.map[i - 1]),
+ MakeTask(session_id, i, FACEAUTH_CMD_GET_USER_INFO),
+ MakeEmbedding(0x11));
+ }
+}
+
+TEST_F(FaceAuthTest, EnrollShouldOnlyAcceptSameUser) {
+ uint64_t session_id = 0xFACE0000DDDD0000ull;
+ session_id++;
+
+ session_id++;
+ fa_token_t token = MakeToken(1);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x1),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+ session_id++;
+ token = MakeToken(2);
+ Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_TOKEN),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+ session_id++;
+ token = MakeToken(1);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x1),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+}
+
+TEST_F(FaceAuthTest, MigrateShouldOnlyAcceptSameUser) {
+ uint64_t session_id = 0xFACE0000DDDD0000ull;
+ session_id++;
+
+ session_id++;
+ fa_token_t token = MakeToken(1);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0x1),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_MIGRATE), MakeEmbedding(0x11),
+ &token);
+ session_id++;
+ token = MakeToken(2);
+ Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_TOKEN),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_MIGRATE), MakeEmbedding(0x11),
+ &token);
+ session_id++;
+ token = MakeToken(1);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0x1),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_MIGRATE), MakeEmbedding(0x11),
+ &token);
+}
+
+TEST_F(FaceAuthTest, SimpleAuthenticateMigrateFlow) {
+ uint64_t session_id = 0xFACE0000EEEE0000ull;
+ session_id++;
+
+ session_id++;
+ fa_token_t token = MakeToken(1);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x1),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+ session_id++;
+ token = MakeToken(2);
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 0, 0, 0x2),
+ MakeTask(session_id, 0x2, FACEAUTH_CMD_ENROLL), MakeEmbedding(0x11),
+ &token);
+
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_MATCH),
+ MakeTask(session_id, 0x1, FACEAUTH_CMD_COMP), MakeEmbedding(0x11));
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 3, 0, FACEAUTH_NOMATCH),
+ MakeTask(session_id, 0x3, FACEAUTH_CMD_MIGRATE), MakeEmbedding(0x11));
+
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_MATCH),
+ MakeTask(session_id, 0x2, FACEAUTH_CMD_COMP), MakeEmbedding(0x11));
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_ERR_INVALID_TOKEN),
+ MakeTask(session_id, 0x3, FACEAUTH_CMD_MIGRATE), MakeEmbedding(0x11));
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 4, 1, FACEAUTH_MATCH),
+ MakeTask(session_id, 0x4, FACEAUTH_CMD_MIGRATE, 1), MakeEmbedding(0x11));
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, 4, 2, FACEAUTH_MATCH),
+ MakeTask(session_id, 0x4, FACEAUTH_CMD_MIGRATE, 1), MakeEmbedding(0x11));
+
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_NOMATCH),
+ MakeTask(session_id, 0x3, FACEAUTH_CMD_COMP), MakeEmbedding(0x11));
+ session_id++;
+ Run(MakeResult(session_id, FACEAUTH_SUCCESS, FACEAUTH_MATCH),
+ MakeTask(session_id, 0x4, FACEAUTH_CMD_COMP), MakeEmbedding(0x11));
+}
+
TEST_F(FaceAuthTest, ExhaustiveMatchMismatchTest) {
FullMatchMismatchTest(1, 6, 0, 19);
FullMatchMismatchTest(2, 5, 1, 18);