1 /*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr/logging/log.h>
8 #include <stubs.h>
9
10 LOG_MODULE_DECLARE(lwm2m_engine_test);
11
12 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_rd_client_pause);
13 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_rd_client_resume);
14 DEFINE_FAKE_VALUE_FUNC(struct lwm2m_message *, find_msg, struct coap_pending *,
15 struct coap_reply *);
16 DEFINE_FAKE_VOID_FUNC(coap_pending_clear, struct coap_pending *);
17 DEFINE_FAKE_VOID_FUNC(lwm2m_reset_message, struct lwm2m_message *, bool);
18 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_send_message_async, struct lwm2m_message *);
19 DEFINE_FAKE_VOID_FUNC(lwm2m_registry_lock);
20 DEFINE_FAKE_VOID_FUNC(lwm2m_registry_unlock);
21 DEFINE_FAKE_VALUE_FUNC(bool, coap_pending_cycle, struct coap_pending *);
22 DEFINE_FAKE_VALUE_FUNC(size_t, coap_pendings_count, struct coap_pending *, size_t);
23 DEFINE_FAKE_VALUE_FUNC(int, generate_notify_message, struct lwm2m_ctx *, struct observe_node *,
24 void *);
25 DEFINE_FAKE_VALUE_FUNC(int64_t, engine_observe_shedule_next_event, struct observe_node *, uint16_t,
26 const int64_t);
27 DEFINE_FAKE_VALUE_FUNC(int, handle_request, struct coap_packet *, struct lwm2m_message *);
28 DEFINE_FAKE_VOID_FUNC(lwm2m_udp_receive, struct lwm2m_ctx *, uint8_t *, uint16_t,
29 struct sockaddr *);
30 DEFINE_FAKE_VALUE_FUNC(bool, lwm2m_rd_client_is_registred, struct lwm2m_ctx *);
31 DEFINE_FAKE_VOID_FUNC(lwm2m_engine_context_close, struct lwm2m_ctx *);
32 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_get_res_buf, const struct lwm2m_obj_path *, void **, uint16_t *,
33 uint16_t *, uint8_t *);
34 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_parse_peerinfo, char *, struct lwm2m_ctx *, bool);
35 DEFINE_FAKE_VALUE_FUNC(int, tls_credential_add, sec_tag_t, enum tls_credential_type, const void *,
36 size_t);
37 DEFINE_FAKE_VALUE_FUNC(int, tls_credential_delete, sec_tag_t, enum tls_credential_type);
38 DEFINE_FAKE_VALUE_FUNC(struct lwm2m_engine_obj_field *, lwm2m_get_engine_obj_field,
39 struct lwm2m_engine_obj *, int);
40 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_get_bool, const struct lwm2m_obj_path *, bool *);
41 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_delete_obj_inst, uint16_t, uint16_t);
42 DEFINE_FAKE_VOID_FUNC(lwm2m_clear_block_contexts);
43 DEFINE_FAKE_VALUE_FUNC(int, lwm2m_security_mode, struct lwm2m_ctx *);
44 DEFINE_FAKE_VALUE_FUNC(int, z_impl_zsock_setsockopt, int, int, int, const void *, socklen_t);
45 DEFINE_FAKE_VOID_FUNC(engine_update_tx_time);
46 DEFINE_FAKE_VALUE_FUNC(bool, coap_block_has_more, struct coap_packet *);
47 DEFINE_FAKE_VOID_FUNC(lwm2m_rd_client_hint_socket_state, struct lwm2m_ctx *,
48 enum lwm2m_socket_states);
49
50 static sys_slist_t obs_obj_path_list = SYS_SLIST_STATIC_INIT(&obs_obj_path_list);
lwm2m_obs_obj_path_list(void)51 sys_slist_t *lwm2m_obs_obj_path_list(void)
52 {
53 return &obs_obj_path_list;
54 }
55
56 static sys_slist_t engine_obj_inst_list = SYS_SLIST_STATIC_INIT(&engine_obj_inst_list);
lwm2m_engine_obj_inst_list(void)57 sys_slist_t *lwm2m_engine_obj_inst_list(void) { return &engine_obj_inst_list; }
58
59 struct zvfs_pollfd {
60 int fd;
61 short events;
62 short revents;
63 };
64
65 static short my_events;
66
set_socket_events(short events)67 void set_socket_events(short events)
68 {
69 my_events |= events;
70 }
71
clear_socket_events(void)72 void clear_socket_events(void)
73 {
74 my_events = 0;
75 }
76
z_impl_zsock_socket(int family,int type,int proto)77 int z_impl_zsock_socket(int family, int type, int proto)
78 {
79 return 0;
80 }
81
z_impl_zsock_close(int sock)82 int z_impl_zsock_close(int sock)
83 {
84 return 0;
85 }
86
87 #define PAIR_IN 10
88 #define PAIR_OUT 11
89
z_impl_zsock_socketpair(int family,int type,int proto,int * sv)90 int z_impl_zsock_socketpair(int family, int type, int proto, int *sv)
91 {
92 sv[0] = PAIR_IN;
93 sv[1] = PAIR_OUT;
94 return 0;
95 }
96
97 DEFINE_FAKE_VALUE_FUNC(int, z_impl_zsock_connect, int, const struct sockaddr *, socklen_t);
98
z_impl_zsock_sendto(int sock,const void * buf,size_t len,int flags,const struct sockaddr * dest_addr,socklen_t addrlen)99 ssize_t z_impl_zsock_sendto(int sock, const void *buf, size_t len, int flags,
100 const struct sockaddr *dest_addr, socklen_t addrlen)
101 {
102 if (sock == PAIR_OUT) {
103 return 1;
104 }
105 k_sleep(K_MSEC(1));
106 if (my_events & ZSOCK_POLLOUT) {
107 my_events = 0;
108 }
109 return 1;
110 }
111
z_impl_zsock_recvfrom(int sock,void * buf,size_t max_len,int flags,struct sockaddr * src_addr,socklen_t * addrlen)112 ssize_t z_impl_zsock_recvfrom(int sock, void *buf, size_t max_len, int flags,
113 struct sockaddr *src_addr, socklen_t *addrlen)
114 {
115 if (sock == PAIR_IN) {
116 return 1;
117 }
118
119 k_sleep(K_MSEC(1));
120 if (my_events & ZSOCK_POLLIN) {
121 my_events = 0;
122 return 1;
123 }
124 errno = EWOULDBLOCK;
125 return -1;
126 }
127
z_impl_zvfs_poll(struct zvfs_pollfd * fds,int nfds,int poll_timeout)128 int z_impl_zvfs_poll(struct zvfs_pollfd *fds, int nfds, int poll_timeout)
129 {
130 k_sleep(K_MSEC(1));
131 fds->revents = my_events;
132 return 0;
133 }
134
z_impl_zsock_fcntl_impl(int sock,int cmd,int flags)135 int z_impl_zsock_fcntl_impl(int sock, int cmd, int flags)
136 {
137 return 0;
138 }
139