| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- /*********************************************************************
- * _ _ _
- * _ __ | |_ _ | | __ _ | |__ ___
- * | '__|| __|(_)| | / _` || '_ \ / __|
- * | | | |_ _ | || (_| || |_) |\__ \
- * |_| \__|(_)|_| \__,_||_.__/ |___/
- *
- * www.rt-labs.com
- * Copyright 2018 rt-labs AB, Sweden.
- *
- * This software is dual-licensed under GPLv3 and a commercial
- * license. See the file LICENSE.md distributed with this software for
- * full license information.
- ********************************************************************/
- // TODO: Must be included first due to redefinition of atomics in
- // pf_types.h
- #include <gtest/gtest.h>
- #include "mocks.h"
- #include <string.h>
- struct pnal_eth_handle
- {
- const char * if_name;
- pnal_eth_callback_t * callback;
- void * arg;
- };
- uint8_t pnet_log_level;
- os_mutex_t * mock_mutex;
- mock_os_data_t mock_os_data;
- mock_lldp_data_t mock_lldp_data;
- mock_file_data_t mock_file_data;
- mock_fspm_data_t mock_fspm_data;
- pnal_eth_handle_t mock_eth_handle;
- void mock_clear (void)
- {
- memset (&mock_os_data, 0, sizeof (mock_os_data));
- memset (&mock_lldp_data, 0, sizeof (mock_lldp_data));
- memset (&mock_file_data, 0, sizeof (mock_file_data));
- memset (&mock_fspm_data, 0, sizeof (mock_fspm_data));
- mock_os_data.eth_status[1].operational_mau_type =
- PNAL_ETH_MAU_COPPER_100BaseTX_FULL_DUPLEX;
- mock_os_data.eth_status[1].running = true;
- }
- void mock_init (void)
- {
- mock_mutex = os_mutex_create();
- mock_clear();
- }
- uint32_t mock_os_get_current_time_us (void)
- {
- return mock_os_data.current_time_us;
- }
- uint32_t mock_pnal_get_system_uptime_10ms (void)
- {
- return mock_os_data.system_uptime_10ms;
- }
- pnal_eth_handle_t * mock_pnal_eth_init (
- const char * if_name,
- const pnal_cfg_t * pnal_cfg,
- pnal_eth_callback_t * callback,
- void * arg)
- {
- pnal_eth_handle_t * handle;
- handle = &mock_eth_handle;
- handle->if_name = if_name;
- handle->arg = arg;
- handle->callback = callback;
- mock_os_data.eth_if_handle = handle;
- return handle;
- }
- int mock_pnal_eth_get_status (
- const char * interface_name,
- pnal_eth_status_t * status)
- {
- /* TODO get loc_port_num from interface_name */
- *status = mock_os_data.eth_status[1];
- return 0;
- }
- int mock_pnal_get_port_statistics (
- const char * interface_name,
- pnal_port_stats_t * port_stats)
- {
- /* TODO get loc_port_num from interface_name */
- *port_stats = mock_os_data.port_statistics[1];
- return 0;
- }
- int mock_pnal_get_hostname (char * hostname)
- {
- hostname[0] = 'A';
- hostname[1] = '\0';
- return 0;
- }
- int mock_pnal_get_ip_suite (
- const char * interface_name,
- pnal_ipaddr_t * p_ipaddr,
- pnal_ipaddr_t * p_netmask,
- pnal_ipaddr_t * p_gw,
- const char ** p_device_name)
- {
- return 0;
- }
- int mock_pnal_set_ip_suite (
- const char * interface_name,
- const pnal_ipaddr_t * p_ipaddr,
- const pnal_ipaddr_t * p_netmask,
- const pnal_ipaddr_t * p_gw,
- const char * hostname,
- bool permanent)
- {
- mock_os_data.set_ip_suite_count++;
- return 0;
- }
- int mock_pnal_eth_send (pnal_eth_handle_t * handle, pnal_buf_t * p_buf)
- {
- memcpy (mock_os_data.eth_send_copy, p_buf->payload, p_buf->len);
- mock_os_data.eth_send_len = p_buf->len;
- mock_os_data.eth_send_count++;
- return p_buf->len;
- }
- int mock_pnal_get_macaddress (
- const char * interface_name,
- pnal_ethaddr_t * p_mac)
- {
- p_mac->addr[0] = 0x12;
- p_mac->addr[1] = 0x34;
- p_mac->addr[2] = 0x00;
- p_mac->addr[3] = 0x78;
- p_mac->addr[4] = 0x90;
- p_mac->addr[5] = 0xab;
- return 0;
- }
- int mock_pnal_udp_open (pnal_ipaddr_t addr, pnal_ipport_t port)
- {
- int ret = 2;
- return ret;
- }
- int mock_pnal_udp_sendto (
- uint32_t id,
- pnal_ipaddr_t dst_addr,
- pnal_ipport_t dst_port,
- const uint8_t * data,
- int size)
- {
- mock_os_data.udp_sendto_len = size;
- mock_os_data.udp_sendto_count++;
- return size;
- }
- void mock_set_pnal_udp_recvfrom_buffer (uint8_t * p_src, uint16_t len)
- {
- os_mutex_lock (mock_mutex);
- memcpy (mock_os_data.udp_recvfrom_buffer, p_src, len);
- mock_os_data.udp_recvfrom_length = len;
- mock_os_data.udp_recvfrom_count++;
- os_mutex_unlock (mock_mutex);
- }
- int mock_pnal_udp_recvfrom (
- uint32_t id,
- pnal_ipaddr_t * p_dst_addr,
- pnal_ipport_t * p_dst_port,
- uint8_t * data,
- int size)
- {
- int len;
- os_mutex_lock (mock_mutex);
- memcpy (
- data,
- mock_os_data.udp_recvfrom_buffer,
- mock_os_data.udp_recvfrom_length);
- len = mock_os_data.udp_recvfrom_length;
- mock_os_data.udp_recvfrom_length = 0;
- os_mutex_unlock (mock_mutex);
- return len;
- }
- void mock_pnal_udp_close (uint32_t id)
- {
- }
- int mock_pnal_get_interface_index (const char * interface_name)
- {
- return mock_os_data.interface_index;
- }
- int mock_pnal_save_file (
- const char * fullpath,
- const void * object_1,
- size_t size_1,
- const void * object_2,
- size_t size_2)
- {
- int pos = 0;
- if (size_1 + size_2 > sizeof (mock_os_data.file_content))
- {
- return -1;
- }
- if (strlen (fullpath) > sizeof (mock_os_data.file_fullpath))
- {
- return -1;
- }
- strcpy (mock_os_data.file_fullpath, fullpath);
- mock_os_data.file_size = size_1 + size_2;
- if (size_1 > 0)
- {
- memcpy (&mock_os_data.file_content[pos], object_1, size_1);
- pos += size_1;
- }
- if (size_2 > 0)
- {
- memcpy (&mock_os_data.file_content[pos], object_2, size_2);
- }
- return 0;
- }
- void mock_pnal_clear_file (const char * fullpath)
- {
- if (strcmp (fullpath, mock_os_data.file_fullpath) == 0)
- {
- strcpy (mock_os_data.file_fullpath, "");
- mock_os_data.file_size = 0;
- }
- }
- int mock_pnal_load_file (
- const char * fullpath,
- void * object_1,
- size_t size_1,
- void * object_2,
- size_t size_2)
- {
- int pos = 0;
- if (size_1 + size_2 > mock_os_data.file_size)
- {
- return -1;
- }
- if (strcmp (fullpath, mock_os_data.file_fullpath) != 0)
- {
- return -1;
- }
- if (size_1 > 0)
- {
- memcpy (object_1, &mock_os_data.file_content[pos], size_1);
- pos += size_1;
- }
- if (size_2 > 0)
- {
- memcpy (object_2, &mock_os_data.file_content[pos], size_2);
- }
- return 0;
- }
- int mock_pf_alarm_send_diagnosis (
- pf_ar_t * p_ar,
- uint32_t api_id,
- uint16_t slot_nbr,
- uint16_t subslot_nbr,
- pf_diag_item_t * p_item)
- {
- return 0;
- }
- void mock_pf_generate_uuid (
- uint32_t timestamp,
- uint32_t session_number,
- pnet_ethaddr_t mac_address,
- pf_uuid_t * p_uuid)
- {
- p_uuid->data1 = session_number;
- p_uuid->data2 = 0x1234;
- p_uuid->data3 = 0x5678;
- p_uuid->data4[0] = 0x01;
- p_uuid->data4[1] = 0x02;
- p_uuid->data4[2] = 0x03;
- p_uuid->data4[3] = 0x04;
- p_uuid->data4[4] = 0x05;
- p_uuid->data4[5] = 0x06;
- p_uuid->data4[6] = 0x07;
- p_uuid->data4[7] = 0x08;
- }
- void mock_pf_lldp_get_management_address (
- pnet_t * net,
- pf_lldp_management_address_t * p_man_address)
- {
- *p_man_address = mock_lldp_data.management_address;
- }
- int mock_pf_lldp_get_peer_management_address (
- pnet_t * net,
- int loc_port_num,
- pf_lldp_management_address_t * p_man_address)
- {
- *p_man_address = mock_lldp_data.peer_management_address;
- return mock_lldp_data.error;
- }
- void mock_pf_lldp_get_link_status (
- pnet_t * net,
- int loc_port_num,
- pf_lldp_link_status_t * p_link_status)
- {
- *p_link_status = mock_lldp_data.link_status;
- }
- int mock_pf_lldp_get_peer_link_status (
- pnet_t * net,
- int loc_port_num,
- pf_lldp_link_status_t * p_link_status)
- {
- *p_link_status = mock_lldp_data.peer_link_status;
- return mock_lldp_data.error;
- }
- int mock_pnal_snmp_init (pnet_t * pnet, const pnal_cfg_t * pnal_cfg)
- {
- return 0;
- }
- int mock_pf_file_save_if_modified (
- const char * directory,
- const char * filename,
- const void * p_object,
- void * p_tempobject,
- size_t size)
- {
- int result;
- /* Exit if any argument is invalid */
- if (size > sizeof (mock_file_data.object))
- {
- return -1;
- }
- if (filename == NULL || p_object == NULL || p_tempobject == NULL)
- {
- return -1;
- }
- if (strlen (filename) >= sizeof (mock_file_data.filename))
- {
- return -1;
- }
- /* Inject error? */
- if (mock_file_data.is_save_failing)
- {
- return -1;
- }
- /* Calculate return value */
- if (strcmp (filename, mock_file_data.filename) != 0)
- {
- result = 2; /* First saving of file */
- }
- else if (
- size == mock_file_data.size &&
- memcmp (p_object, mock_file_data.object, size) == 0)
- {
- result = 0; /* No update required */
- }
- else
- {
- result = 1; /* Updating file */
- }
- /* Store to fake file */
- strcpy (mock_file_data.filename, filename);
- mock_file_data.size = size;
- memcpy (mock_file_data.object, p_object, size);
- return result;
- }
- int mock_pf_file_save (
- const char * directory,
- const char * filename,
- const void * p_object,
- size_t size)
- {
- /* Exit if any argument is invalid */
- if (size > sizeof (mock_file_data.object))
- {
- return -1;
- }
- if (filename == NULL || p_object == NULL)
- {
- return -1;
- }
- if (strlen (filename) >= sizeof (mock_file_data.filename))
- {
- return -1;
- }
- /* Inject error? */
- if (mock_file_data.is_save_failing)
- {
- return -1;
- }
- /* Store to fake file */
- strcpy (mock_file_data.filename, filename);
- mock_file_data.size = size;
- memcpy (mock_file_data.object, p_object, size);
- return 0;
- }
- void mock_pf_file_clear (const char * directory, const char * filename)
- {
- if (strcmp (filename, mock_file_data.filename) == 0)
- {
- strcpy (mock_file_data.filename, "");
- mock_file_data.size = 0;
- }
- }
- int mock_pf_file_load (
- const char * directory,
- const char * filename,
- void * p_object,
- size_t size)
- {
- /* Exit if any argument is invalid */
- if (size != mock_file_data.size)
- {
- return -1;
- }
- if (filename == NULL || p_object == NULL)
- {
- return -1;
- }
- if (strcmp (filename, mock_file_data.filename) != 0)
- {
- return -1;
- }
- /* Inject error? */
- if (mock_file_data.is_load_failing)
- {
- return -1;
- }
- memcpy (p_object, mock_file_data.object, size);
- return 0;
- }
- void mock_pf_fspm_get_im_location (pnet_t * net, char * location)
- {
- snprintf (
- location,
- PNET_LOCATION_MAX_SIZE,
- "%-22s",
- mock_fspm_data.im_location);
- }
- void mock_pf_fspm_save_im_location (pnet_t * net, const char * location)
- {
- snprintf (
- mock_fspm_data.im_location,
- sizeof (mock_fspm_data.im_location),
- "%-22s",
- location);
- }
- void mock_pf_bg_worker_init (pnet_t * net)
- {
- return;
- }
- int mock_pf_bg_worker_start_job (pnet_t * net, pf_bg_job_t job_id)
- {
- return 0;
- }
|