119 lines
3.9 KiB
C
119 lines
3.9 KiB
C
#include "unity.h"
|
|
#include "zigbee_zcl.h"
|
|
#include <stddef.h> // For NULL
|
|
|
|
void setUp(void) {
|
|
// Reset ZCL attributes before each test
|
|
zigbee_zcl_set_local_temperature(0);
|
|
zigbee_zcl_set_system_mode(0);
|
|
}
|
|
|
|
void tearDown(void) {
|
|
// Clean up after each test
|
|
}
|
|
|
|
void test_zigbee_zcl_init(void) {
|
|
TEST_ASSERT_TRUE(zigbee_zcl_init());
|
|
}
|
|
|
|
void test_zigbee_zcl_set_and_get_local_temperature(void) {
|
|
// Test setting and getting local temperature
|
|
zigbee_zcl_set_local_temperature(2500); // 25.00°C
|
|
TEST_ASSERT_EQUAL_INT16(2500, zigbee_zcl_get_local_temperature());
|
|
|
|
zigbee_zcl_set_local_temperature(-500); // -5.00°C
|
|
TEST_ASSERT_EQUAL_INT16(-500, zigbee_zcl_get_local_temperature());
|
|
|
|
zigbee_zcl_set_local_temperature(3000); // 30.00°C
|
|
TEST_ASSERT_EQUAL_INT16(3000, zigbee_zcl_get_local_temperature());
|
|
}
|
|
|
|
void test_zigbee_zcl_set_and_get_system_mode(void) {
|
|
// Test setting and getting valid system modes
|
|
zigbee_zcl_set_system_mode(0); // Off
|
|
TEST_ASSERT_EQUAL_INT8(0, zigbee_zcl_get_system_mode());
|
|
|
|
zigbee_zcl_set_system_mode(1); // Auto
|
|
TEST_ASSERT_EQUAL_INT8(1, zigbee_zcl_get_system_mode());
|
|
|
|
zigbee_zcl_set_system_mode(3); // Cool
|
|
TEST_ASSERT_EQUAL_INT8(3, zigbee_zcl_get_system_mode());
|
|
|
|
zigbee_zcl_set_system_mode(4); // Heat
|
|
TEST_ASSERT_EQUAL_INT8(4, zigbee_zcl_get_system_mode());
|
|
}
|
|
|
|
void test_zigbee_zcl_ignore_invalid_system_mode(void) {
|
|
// Test that invalid system modes are ignored
|
|
zigbee_zcl_set_system_mode(2); // Invalid mode
|
|
TEST_ASSERT_EQUAL_INT8(0, zigbee_zcl_get_system_mode()); // Should remain Off
|
|
|
|
zigbee_zcl_set_system_mode(5); // Invalid mode
|
|
TEST_ASSERT_EQUAL_INT8(0, zigbee_zcl_get_system_mode()); // Should remain Off
|
|
|
|
zigbee_zcl_set_system_mode(255); // Invalid mode
|
|
TEST_ASSERT_EQUAL_INT8(0, zigbee_zcl_get_system_mode()); // Should remain Off
|
|
}
|
|
|
|
void test_zigbee_zcl_handle_command_non_thermostat_cluster(void) {
|
|
// Test handling command for non-thermostat cluster
|
|
uint8_t payload[] = {0x01, 0x02, 0x03};
|
|
|
|
TEST_ASSERT_FALSE(zigbee_zcl_handle_command(
|
|
1, 0x0000, 0x00, payload, sizeof(payload)));
|
|
}
|
|
|
|
void test_zigbee_zcl_handle_command_thermostat_cluster(void) {
|
|
// Test handling command for thermostat cluster
|
|
uint8_t payload[] = {0x01, 0x02};
|
|
|
|
// Valid thermostat cluster command
|
|
TEST_ASSERT_TRUE(zigbee_zcl_handle_command(
|
|
1, 0x0201, 0x00, payload, sizeof(payload)));
|
|
|
|
// Test with different command ID
|
|
TEST_ASSERT_TRUE(zigbee_zcl_handle_command(
|
|
1, 0x0201, 0x01, payload, sizeof(payload)));
|
|
}
|
|
|
|
void test_zigbee_zcl_handle_command_null_payload(void) {
|
|
// Test handling command with null payload and zero length should fail
|
|
TEST_ASSERT_FALSE(zigbee_zcl_handle_command(
|
|
1, 0x0201, 0x00, NULL, 0));
|
|
|
|
// Test handling command with null payload and non-zero length should fail
|
|
TEST_ASSERT_FALSE(zigbee_zcl_handle_command(
|
|
1, 0x0201, 0x00, NULL, 5));
|
|
}
|
|
|
|
void test_zigbee_zcl_handle_schedule_command(void) {
|
|
// Test handling schedule commands
|
|
uint8_t payload[] = {0x01, 0x02, 0x03, 0x04};
|
|
|
|
// Test with payload
|
|
TEST_ASSERT_TRUE(zigbee_zcl_handle_schedule_command(
|
|
0x00, payload, sizeof(payload)));
|
|
|
|
// Test with null payload but zero length
|
|
TEST_ASSERT_TRUE(zigbee_zcl_handle_schedule_command(
|
|
0x01, NULL, 0));
|
|
|
|
// Test with null payload and non-zero length
|
|
TEST_ASSERT_FALSE(zigbee_zcl_handle_schedule_command(
|
|
0x02, NULL, 5));
|
|
}
|
|
|
|
int main(void) {
|
|
UNITY_BEGIN();
|
|
|
|
RUN_TEST(test_zigbee_zcl_init);
|
|
RUN_TEST(test_zigbee_zcl_set_and_get_local_temperature);
|
|
RUN_TEST(test_zigbee_zcl_set_and_get_system_mode);
|
|
RUN_TEST(test_zigbee_zcl_ignore_invalid_system_mode);
|
|
RUN_TEST(test_zigbee_zcl_handle_command_non_thermostat_cluster);
|
|
RUN_TEST(test_zigbee_zcl_handle_command_thermostat_cluster);
|
|
RUN_TEST(test_zigbee_zcl_handle_command_null_payload);
|
|
RUN_TEST(test_zigbee_zcl_handle_schedule_command);
|
|
|
|
return UNITY_END();
|
|
} |