pebble/tests/fw/services/notifications/test_nexmo.c
2025-01-27 11:38:16 -08:00

155 lines
5.3 KiB
C

/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "clar.h"
#include "services/normal/notifications/ancs/nexmo.h"
#include "services/normal/notifications/ancs/ancs_notifications_util.h"
#include "services/normal/timeline/attributes_actions.h"
// Stubs
////////////////////////////////////////////////////////////////
#include "stubs_logging.h"
#include "stubs_passert.h"
#include "stubs_pbl_malloc.h"
// Fakes
////////////////////////////////////////////////////////////////
extern const char *NEXMO_REAUTH_STRING;
static AttributeList *s_expected_attributes = NULL;
static TimelineItemActionGroup *s_expected_actions = NULL;
static bool s_performed_store = false;
status_t ios_notif_pref_db_store_prefs(const uint8_t *app_id, int length, AttributeList *attr_list,
TimelineItemActionGroup *action_group) {
const int buf_size = 256;
uint8_t buf1[buf_size];
uint8_t buf2[buf_size];
attributes_actions_serialize_payload(attr_list, action_group, buf1, buf_size);
attributes_actions_serialize_payload(s_expected_attributes, s_expected_actions, buf2, buf_size);
cl_assert_equal_m(buf1, buf2, attributes_actions_get_serialized_payload_size(s_expected_attributes, s_expected_actions));
s_performed_store = true;
return S_SUCCESS;
}
static uint32_t s_expected_uid = 0;
static bool s_performed_dismiss = false;
void ancs_perform_action(uint32_t notification_uid, uint8_t action_id) {
cl_assert_equal_i(notification_uid, s_expected_uid);
cl_assert_equal_i(action_id, ActionIDNegative);
s_performed_dismiss = true;
}
void test_nexmo__initialize(void) {
s_expected_attributes = NULL;
s_expected_actions = NULL;
s_performed_store = false;
s_expected_uid = INVALID_UID;
s_performed_dismiss = false;
}
void test_nexmo__cleanup(void) {
}
void test_nexmo__is_reuath_sms(void) {
uint8_t expected_app_id_buf[128];
ANCSAttribute *expected_app_id = (ANCSAttribute *)&expected_app_id_buf;
expected_app_id->length = strlen(IOS_SMS_APP_ID);
memcpy(expected_app_id->value, IOS_SMS_APP_ID, strlen(IOS_SMS_APP_ID));
char valid_message[128];
strcpy(valid_message, "possible preamble ");
strcat(valid_message, NEXMO_REAUTH_STRING);
strcat(valid_message, " possible postamble");
uint8_t expected_message_buf[128];
ANCSAttribute *expected_message = (ANCSAttribute *)&expected_message_buf;
expected_message->length = strlen(valid_message);
memcpy(expected_message->value, valid_message, strlen(valid_message));
uint8_t bad_app_id_buf[128];
ANCSAttribute *bad_app_id = (ANCSAttribute *)&bad_app_id_buf;
bad_app_id->length = strlen(IOS_MAIL_APP_ID);
memcpy(bad_app_id->value, IOS_MAIL_APP_ID, strlen(IOS_MAIL_APP_ID));
const char *bad_string = "Phil was here";
uint8_t bad_message_buf[128];
ANCSAttribute *bad_message = (ANCSAttribute *)&bad_message_buf;
bad_message->length = strlen(bad_string);
memcpy(bad_message->value, bad_string, strlen(bad_string));
cl_assert(nexmo_is_reauth_sms(expected_app_id, expected_message));
cl_assert(!nexmo_is_reauth_sms(bad_app_id, expected_message));
cl_assert(!nexmo_is_reauth_sms(expected_app_id, bad_message));
cl_assert(!nexmo_is_reauth_sms(bad_app_id, bad_message));
}
void test_nexmo__handle_reuath_sms(void) {
// UID
const uint32_t uid = 42;
s_expected_uid = uid;
// App ID
uint8_t app_id_buf[128];
ANCSAttribute *app_id = (ANCSAttribute *)&app_id_buf;
app_id->length = strlen(IOS_SMS_APP_ID);
memcpy(app_id->value, IOS_SMS_APP_ID, strlen(IOS_SMS_APP_ID));
// Message
char valid_message[128];
strcpy(valid_message, "possible preamble ");
strcat(valid_message, NEXMO_REAUTH_STRING);
strcat(valid_message, " possible postamble");
uint8_t message_buf[128];
ANCSAttribute *message = (ANCSAttribute *)&message_buf;
message->length = strlen(valid_message);
memcpy(message->value, valid_message, strlen(valid_message));
// Existing prefs
iOSNotifPrefs existing_prefs = {
.attr_list = {
.num_attributes = 3,
.attributes = (Attribute[]) {
{ .id = AttributeIdTitle, .cstring = "Title" },
{ .id = AttributeIdBody, .cstring = "Body" },
{ .id = AttributeIdAppName, .cstring = "Awesome" },
},
},
};
// Make sure that the prefs we store are the existing ones + the reauth msg
AttributeList expected_attr_list = {
.num_attributes = 4,
.attributes = (Attribute[]) {
{ .id = AttributeIdTitle, .cstring = "Title" },
{ .id = AttributeIdBody, .cstring = "Body" },
{ .id = AttributeIdAppName, .cstring = "Awesome" },
{ .id = AttributeIdAuthCode, .cstring = valid_message },
},
};
s_expected_attributes = &expected_attr_list;
nexmo_handle_reauth_sms(uid, app_id, message, &existing_prefs);
cl_assert(s_performed_store);
cl_assert(s_performed_dismiss);
}