mirror of
https://github.com/google/pebble.git
synced 2025-03-22 03:32:20 +00:00
155 lines
5.3 KiB
C
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);
|
|
}
|