test_astlpc.c (4e8264b705d3575bea8312d6467d5fd9fb440caf) | test_astlpc.c (3a540664c5fbf8cabeca0c1a1af27b1b979eb253) |
---|---|
1/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2 3#ifdef HAVE_CONFIG_H 4#include "config.h" 5#endif 6 | 1/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2 3#ifdef HAVE_CONFIG_H 4#include "config.h" 5#endif 6 |
7#define ASTLPC_VER_CUR 2 |
|
7#include "astlpc.c" 8 9#ifdef pr_fmt 10#undef pr_fmt 11#define pr_fmt(x) "test: " x 12#endif 13 14#include "libmctp-astlpc.h" --- 161 unchanged lines hidden (view full) --- 176 assert(ep->mctp); 177 178 /* Inject KCS registers */ 179 ep->mmio.kcs = kcs; 180 181 /* Initialise the binding */ 182 ep->astlpc = mctp_astlpc_init(mode, MCTP_BTU, lpc_mem, 183 &astlpc_direct_mmio_ops, &ep->mmio); | 8#include "astlpc.c" 9 10#ifdef pr_fmt 11#undef pr_fmt 12#define pr_fmt(x) "test: " x 13#endif 14 15#include "libmctp-astlpc.h" --- 161 unchanged lines hidden (view full) --- 177 assert(ep->mctp); 178 179 /* Inject KCS registers */ 180 ep->mmio.kcs = kcs; 181 182 /* Initialise the binding */ 183 ep->astlpc = mctp_astlpc_init(mode, MCTP_BTU, lpc_mem, 184 &astlpc_direct_mmio_ops, &ep->mmio); |
185 assert(ep->astlpc); |
|
184 185 return mctp_register_bus(ep->mctp, &ep->astlpc->binding, eid); 186} 187 188static void endpoint_destroy(struct astlpc_endpoint *ep) 189{ 190 mctp_astlpc_destroy(ep->astlpc); 191 mctp_destroy(ep->mctp); --- 515 unchanged lines hidden (view full) --- 707 708 /* Make sure it doesn't fail, bad command should be discarded */ 709 assert(rc == 0); 710 711 endpoint_destroy(&bmc); 712 free(lpc_mem); 713} 714 | 186 187 return mctp_register_bus(ep->mctp, &ep->astlpc->binding, eid); 188} 189 190static void endpoint_destroy(struct astlpc_endpoint *ep) 191{ 192 mctp_astlpc_destroy(ep->astlpc); 193 mctp_destroy(ep->mctp); --- 515 unchanged lines hidden (view full) --- 709 710 /* Make sure it doesn't fail, bad command should be discarded */ 711 assert(rc == 0); 712 713 endpoint_destroy(&bmc); 714 free(lpc_mem); 715} 716 |
717#define BUFFER_MIN ASTLPC_PACKET_SIZE(MCTP_PACKET_SIZE(MCTP_BTU)) 718 719static void astlpc_test_buffers_rx_offset_overflow(void) 720{ 721 struct mctp_astlpc_layout l = { 722 .rx = { UINT32_MAX, BUFFER_MIN }, 723 .tx = { control_size, BUFFER_MIN }, 724 }; 725 726 assert(!mctp_astlpc_layout_validate(&l)); 727} 728 729static void astlpc_test_buffers_tx_offset_overflow(void) 730{ 731 struct mctp_astlpc_layout l = { 732 .rx = { control_size, BUFFER_MIN }, 733 .tx = { UINT32_MAX, BUFFER_MIN }, 734 }; 735 736 assert(!mctp_astlpc_layout_validate(&l)); 737} 738 739static void astlpc_test_buffers_rx_size_overflow(void) 740{ 741 struct mctp_astlpc_layout l = { 742 .rx = { control_size + BUFFER_MIN, UINT32_MAX }, 743 .tx = { control_size, BUFFER_MIN }, 744 }; 745 746 assert(!mctp_astlpc_layout_validate(&l)); 747} 748 749static void astlpc_test_buffers_tx_size_overflow(void) 750{ 751 struct mctp_astlpc_layout l = { 752 .rx = { control_size, BUFFER_MIN }, 753 .tx = { control_size + BUFFER_MIN, UINT32_MAX }, 754 }; 755 756 assert(!mctp_astlpc_layout_validate(&l)); 757} 758 759static void astlpc_test_buffers_rx_window_violation(void) 760{ 761 struct mctp_astlpc_layout l = { 762 .rx = { LPC_WIN_SIZE - BUFFER_MIN + 1, BUFFER_MIN }, 763 .tx = { control_size, BUFFER_MIN }, 764 }; 765 766 assert(!mctp_astlpc_layout_validate(&l)); 767} 768 769static void astlpc_test_buffers_tx_window_violation(void) 770{ 771 struct mctp_astlpc_layout l = { 772 .rx = { control_size, BUFFER_MIN }, 773 .tx = { LPC_WIN_SIZE - BUFFER_MIN + 1, BUFFER_MIN }, 774 }; 775 776 assert(!mctp_astlpc_layout_validate(&l)); 777} 778 779static void astlpc_test_buffers_rx_size_fails_btu(void) 780{ 781 struct mctp_astlpc_layout l = { 782 .rx = { control_size, BUFFER_MIN - 1 }, 783 .tx = { control_size + BUFFER_MIN, BUFFER_MIN }, 784 }; 785 786 assert(!mctp_astlpc_layout_validate(&l)); 787} 788 789static void astlpc_test_buffers_tx_size_fails_btu(void) 790{ 791 struct mctp_astlpc_layout l = { 792 .rx = { control_size, BUFFER_MIN }, 793 .tx = { control_size + BUFFER_MIN, BUFFER_MIN - 1 }, 794 }; 795 796 assert(!mctp_astlpc_layout_validate(&l)); 797} 798 799static void astlpc_test_buffers_overlap_rx_low(void) 800{ 801 struct mctp_astlpc_layout l = { 802 .rx = { control_size, 2 * BUFFER_MIN }, 803 .tx = { control_size + BUFFER_MIN, 2 * BUFFER_MIN }, 804 }; 805 806 assert(!mctp_astlpc_layout_validate(&l)); 807} 808 809static void astlpc_test_buffers_overlap_tx_low(void) 810{ 811 struct mctp_astlpc_layout l = { 812 .rx = { control_size + BUFFER_MIN, 2 * BUFFER_MIN }, 813 .tx = { control_size, 2 * BUFFER_MIN }, 814 }; 815 816 assert(!mctp_astlpc_layout_validate(&l)); 817} 818 819static void astlpc_test_buffers_overlap_exact(void) 820{ 821 struct mctp_astlpc_layout l = { 822 .rx = { control_size, 2 * BUFFER_MIN }, 823 .tx = { control_size, 2 * BUFFER_MIN }, 824 }; 825 826 assert(!mctp_astlpc_layout_validate(&l)); 827} 828 829static void astlpc_test_buffers_overlap_control(void) 830{ 831 struct mctp_astlpc_layout l = { 832 .rx = { 0, BUFFER_MIN }, 833 .tx = { control_size + BUFFER_MIN, BUFFER_MIN }, 834 }; 835 836 assert(!mctp_astlpc_layout_validate(&l)); 837} 838 839static void astlpc_test_buffers_bad_host_proposal(void) 840{ 841 struct astlpc_endpoint bmc, host; 842 struct mctp_lpcmap_hdr *hdr; 843 uint8_t kcs[2] = { 0 }; 844 void *lpc_mem; 845 846 /* Test harness initialisation */ 847 lpc_mem = calloc(1, 1 * 1024 * 1024); 848 assert(lpc_mem); 849 850 /* BMC initialisation */ 851 endpoint_init(&bmc, 8, MCTP_BINDING_ASTLPC_MODE_BMC, &kcs, lpc_mem); 852 853 /* Host initialisation */ 854 endpoint_init(&host, 9, MCTP_BINDING_ASTLPC_MODE_HOST, &kcs, lpc_mem); 855 856 /* 857 * Now that the host has initialised the control area, break 858 * something before polling the BMC 859 */ 860 hdr = lpc_mem; 861 hdr->layout.rx_size = 0; 862 863 mctp_astlpc_poll(bmc.astlpc); 864 865 /* Make sure the BMC has not set the channel to active */ 866 assert(!(kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_CHANNEL_ACTIVE)); 867 868 endpoint_destroy(&host); 869 endpoint_destroy(&bmc); 870 free(lpc_mem); 871} 872 873static void astlpc_test_buffers_bad_bmc_proposal(void) 874{ 875 struct astlpc_endpoint bmc, host; 876 struct mctp_lpcmap_hdr *hdr; 877 uint8_t kcs[2] = { 0 }; 878 void *lpc_mem; 879 int rc; 880 881 /* Test harness initialisation */ 882 lpc_mem = calloc(1, 1 * 1024 * 1024); 883 assert(lpc_mem); 884 885 /* BMC initialisation */ 886 endpoint_init(&bmc, 8, MCTP_BINDING_ASTLPC_MODE_BMC, &kcs, lpc_mem); 887 888 /* 889 * Now that the BMC has initialised the control area, break something 890 * before initialising the host 891 */ 892 hdr = lpc_mem; 893 hdr->layout.rx_size = 0; 894 895 /* Host initialisation: Fails due to bad layout */ 896 rc = endpoint_init(&host, 9, MCTP_BINDING_ASTLPC_MODE_HOST, &kcs, 897 lpc_mem); 898 assert(rc < 0); 899 900 endpoint_destroy(&host); 901 endpoint_destroy(&bmc); 902 free(lpc_mem); 903} 904 905static void astlpc_test_buffers_bad_bmc_negotiation(void) 906{ 907 struct astlpc_endpoint bmc, host; 908 struct mctp_lpcmap_hdr *hdr; 909 uint8_t kcs[2] = { 0 }; 910 void *lpc_mem; 911 int rc; 912 913 /* Test harness initialisation */ 914 lpc_mem = calloc(1, 1 * 1024 * 1024); 915 assert(lpc_mem); 916 917 /* BMC initialisation */ 918 endpoint_init(&bmc, 8, MCTP_BINDING_ASTLPC_MODE_BMC, &kcs, lpc_mem); 919 920 /* Host initialisation */ 921 endpoint_init(&host, 9, MCTP_BINDING_ASTLPC_MODE_HOST, &kcs, lpc_mem); 922 923 mctp_astlpc_poll(bmc.astlpc); 924 925 /* 926 * Now that the BMC has initialised the control area, break something 927 * before polling the host 928 */ 929 hdr = lpc_mem; 930 hdr->layout.rx_size = 0; 931 932 rc = mctp_astlpc_poll(host.astlpc); 933 assert(rc < 0); 934 935 endpoint_destroy(&host); 936 endpoint_destroy(&bmc); 937 free(lpc_mem); 938} 939 |
|
715/* clang-format off */ 716#define TEST_CASE(test) { #test, test } 717static const struct { 718 const char *name; 719 void (*test)(void); 720} astlpc_tests[] = { 721 TEST_CASE(astlpc_test_simple_init), 722 TEST_CASE(astlpc_test_bad_version), --- 5 unchanged lines hidden (view full) --- 728 TEST_CASE(astlpc_test_host_before_bmc), 729 TEST_CASE(astlpc_test_simple_message_bmc_to_host), 730 TEST_CASE(astlpc_test_simple_message_host_to_bmc), 731 TEST_CASE(astlpc_test_packetised_message_bmc_to_host), 732 TEST_CASE(astlpc_test_simple_indirect_message_bmc_to_host), 733 TEST_CASE(astlpc_test_host_tx_bmc_gone), 734 TEST_CASE(astlpc_test_poll_not_ready), 735 TEST_CASE(astlpc_test_undefined_command), | 940/* clang-format off */ 941#define TEST_CASE(test) { #test, test } 942static const struct { 943 const char *name; 944 void (*test)(void); 945} astlpc_tests[] = { 946 TEST_CASE(astlpc_test_simple_init), 947 TEST_CASE(astlpc_test_bad_version), --- 5 unchanged lines hidden (view full) --- 953 TEST_CASE(astlpc_test_host_before_bmc), 954 TEST_CASE(astlpc_test_simple_message_bmc_to_host), 955 TEST_CASE(astlpc_test_simple_message_host_to_bmc), 956 TEST_CASE(astlpc_test_packetised_message_bmc_to_host), 957 TEST_CASE(astlpc_test_simple_indirect_message_bmc_to_host), 958 TEST_CASE(astlpc_test_host_tx_bmc_gone), 959 TEST_CASE(astlpc_test_poll_not_ready), 960 TEST_CASE(astlpc_test_undefined_command), |
961 TEST_CASE(astlpc_test_buffers_rx_offset_overflow), 962 TEST_CASE(astlpc_test_buffers_tx_offset_overflow), 963 TEST_CASE(astlpc_test_buffers_rx_size_overflow), 964 TEST_CASE(astlpc_test_buffers_tx_size_overflow), 965 TEST_CASE(astlpc_test_buffers_rx_window_violation), 966 TEST_CASE(astlpc_test_buffers_tx_window_violation), 967 TEST_CASE(astlpc_test_buffers_rx_size_fails_btu), 968 TEST_CASE(astlpc_test_buffers_tx_size_fails_btu), 969 TEST_CASE(astlpc_test_buffers_overlap_rx_low), 970 TEST_CASE(astlpc_test_buffers_overlap_tx_low), 971 TEST_CASE(astlpc_test_buffers_bad_host_proposal), 972 TEST_CASE(astlpc_test_buffers_bad_bmc_proposal), 973 TEST_CASE(astlpc_test_buffers_bad_bmc_negotiation), 974 TEST_CASE(astlpc_test_buffers_overlap_exact), 975 TEST_CASE(astlpc_test_buffers_overlap_control), |
|
736}; 737/* clang-format on */ 738 739#ifndef BUILD_ASSERT 740#define BUILD_ASSERT(x) \ 741 do { \ 742 (void)sizeof(char[0 - (!(x))]); \ 743 } while (0) --- 17 unchanged lines hidden --- | 976}; 977/* clang-format on */ 978 979#ifndef BUILD_ASSERT 980#define BUILD_ASSERT(x) \ 981 do { \ 982 (void)sizeof(char[0 - (!(x))]); \ 983 } while (0) --- 17 unchanged lines hidden --- |