TEST(sml_number, parse_unsigned8) { hex2binary("6201", sml_buf_get_current_buf(buf)); u8 *n = sml_u8_parse(buf); TEST_ASSERT_EQUAL(1, *n); TEST_ASSERT_EQUAL(2, buf->cursor); sml_u8_free( n ); }
TEST(sml_value, parse_optional) { hex2binary("01", sml_buf_get_current_buf(buf)); sml_value *v = sml_value_parse(buf); TEST_ASSERT_NULL(v); TEST_ASSERT_EQUAL(1, buf->cursor); }
TEST(sml_number, parse_unsigned32_optional) { hex2binary("01", sml_buf_get_current_buf(buf)); u32 *n = sml_u32_parse(buf); TEST_ASSERT_NULL(n); TEST_ASSERT_EQUAL(1, buf->cursor); sml_u32_free( n ); }
TEST(sml_sequence, parse_octet_string) { hex2binary("720648616C6C6F0648616C6C6F", sml_buf_get_current_buf(buf)); sml_sequence *seq = sml_sequence_parse(buf, (void *) &sml_octet_string_parse, (void (*)(void *))&sml_octet_string_free); TEST_ASSERT_NOT_NULL(seq); TEST_ASSERT_EQUAL(2, seq->elems_len); }
TEST(sml_proc_par_value, parse_time) { hex2binary("72620472620265000000FF", sml_buf_get_current_buf(buf)); sml_proc_par_value *t = sml_proc_par_value_parse(buf); TEST_ASSERT_NOT_NULL(t); TEST_ASSERT_EQUAL(SML_PROC_PAR_VALUE_TAG_TIME, *(t->tag)); TEST_ASSERT_EQUAL(11, buf->cursor); }
TEST(sml_status, parse_not_unsigned) { hex2binary("5001", sml_buf_get_current_buf(buf)); sml_status *s = sml_status_parse(buf); TEST_ASSERT_NULL(s); TEST_ASSERT_TRUE(sml_buf_has_errors(buf)); }
TEST(sml_value, parse_integer64_fewer_bytes) { hex2binary("58FFFFFFFFFFFF0F", sml_buf_get_current_buf(buf)); sml_value *v = sml_value_parse(buf); TEST_ASSERT_EQUAL(-241, *(v->data.int64)); TEST_ASSERT_EQUAL((SML_TYPE_INTEGER | SML_TYPE_NUMBER_64), v->type); }
TEST(sml_value, parse_octet_string) { hex2binary("0648616C6C6F", sml_buf_get_current_buf(buf)); sml_value *v = sml_value_parse(buf); TEST_ASSERT_NOT_NULL(v); TEST_ASSERT_EQUAL(SML_TYPE_OCTET_STRING, v->type); expected_octet_string(v->data.bytes, "Hallo", 5); }
TEST(sml_value, parse_boolean) { hex2binary("4200", sml_buf_get_current_buf(buf)); sml_value *v = sml_value_parse(buf); TEST_ASSERT_NOT_NULL(v); TEST_ASSERT_EQUAL(SML_TYPE_BOOLEAN, v->type); TEST_ASSERT_FALSE(*(v->data.boolean)); }
TEST(sml_tree, parse_with_error_child) { hex2binary("730648616C6C6F0171720648616C6C6F0101", sml_buf_get_current_buf(buf)); sml_tree *t = sml_tree_parse(buf); TEST_ASSERT_NULL(t); sml_tree_free( t ); }
TEST(sml_status, parse_optional) { hex2binary("01", sml_buf_get_current_buf(buf)); sml_status *s = sml_status_parse(buf); TEST_ASSERT_NULL(s); TEST_ASSERT_FALSE(sml_buf_has_errors(buf)); TEST_ASSERT_EQUAL(1, buf->cursor); }
TEST(sml_tree, parse_with_child) { hex2binary("730648616C6C6F0171730648616C6C6F0101", sml_buf_get_current_buf(buf)); sml_tree *t = sml_tree_parse(buf); TEST_ASSERT_NOT_NULL(t); TEST_ASSERT_NOT_NULL(t->child_list[0]); TEST_ASSERT_EQUAL(1, t->child_list_len); }
TEST(sml_tree_path, parse) { hex2binary("720648616C6C6F0264", sml_buf_get_current_buf(buf)); sml_tree_path *t = sml_tree_path_parse(buf); TEST_ASSERT_NOT_NULL(t); TEST_ASSERT_EQUAL(2, t->path_entries_len); TEST_ASSERT_EQUAL(0, sml_octet_string_cmp_with_hex(t->path_entries[0], "48616C6C6F")); TEST_ASSERT_EQUAL(0, sml_octet_string_cmp_with_hex(t->path_entries[1], "64")); }
TEST(sml_status, parse_status8) { hex2binary("6201", sml_buf_get_current_buf(buf)); sml_status *s = sml_status_parse(buf); TEST_ASSERT_NOT_NULL(s); TEST_ASSERT_EQUAL(1, *(s->data.status8)); TEST_ASSERT_EQUAL((SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_8), s->type); }
TEST(sml_list, parse_two_entries) { hex2binary("727702610101010142000177026101010101420001", sml_buf_get_current_buf(buf)); sml_list *l = sml_list_parse(buf); TEST_ASSERT_FALSE(sml_buf_has_errors(buf)); TEST_ASSERT_NOT_NULL(l); TEST_ASSERT_NOT_NULL(l->next); TEST_ASSERT_EQUAL(0, sml_octet_string_cmp_with_hex(l->obj_name, "61")); }
TEST(sml_get_profile_pack_request, parse) { hex2binary("7901010101010101730648616C6C6F0648616C6C6F0648616C6C6F01", sml_buf_get_current_buf(buf)); sml_get_profile_pack_request *r = sml_get_profile_pack_request_parse(buf); TEST_ASSERT_NOT_NULL(r); TEST_ASSERT_NOT_NULL(r->object_list); TEST_ASSERT_NOT_NULL(r->object_list->next); TEST_ASSERT_NOT_NULL(r->object_list->next->next); TEST_ASSERT_NULL(r->object_list->next->next->next); sml_get_profile_pack_request_free( r ); }
TEST(sml_value, parse_unsigned32) { hex2binary("6500000001", sml_buf_get_current_buf(buf)); sml_value *v = sml_value_parse(buf); TEST_ASSERT_NOT_NULL(v); TEST_ASSERT_EQUAL(1, *(v->data.uint32)); TEST_ASSERT_EQUAL((SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32), v->type); TEST_ASSERT_EQUAL(5, buf->cursor); }
int sml_transport_write(int fd, sml_file *file) { unsigned char start_seq[] = {0x1b, 0x1b, 0x1b, 0x1b, 0x01, 0x01, 0x01, 0x01}; unsigned char end_seq[] = {0x1b, 0x1b, 0x1b, 0x1b, 0x1a}; sml_buffer *buf = file->buf; buf->cursor = 0; // add start sequence memcpy(sml_buf_get_current_buf(buf), start_seq, 8); buf->cursor += 8; // add file sml_file_write(file); // add padding bytes int padding = (buf->cursor % 4) ? (4 - buf->cursor % 4) : 0; if (padding) { // write zeroed bytes memset(sml_buf_get_current_buf(buf), 0, padding); buf->cursor += padding; } // begin end sequence memcpy(sml_buf_get_current_buf(buf), end_seq, 5); buf->cursor += 5; // add padding info buf->buffer[buf->cursor++] = (unsigned char) padding; // add crc checksum u16 crc = sml_crc16_calculate(buf->buffer, buf->cursor); buf->buffer[buf->cursor++] = (unsigned char) ((crc & 0xFF00) >> 8); buf->buffer[buf->cursor++] = (unsigned char) (crc & 0x00FF); size_t wr = write(fd, buf->buffer, buf->cursor); if (wr == buf->cursor) { return wr; } return 0; }
TEST(sml_number, parse_unsigned16) { hex2binary("630101", sml_buf_get_current_buf(buf)); u16 *n = sml_u16_parse(buf); TEST_ASSERT_EQUAL(257, *n); sml_u16_free( n ); }
TEST(sml_number, parse_int8) { hex2binary("52FF", sml_buf_get_current_buf(buf)); i8 *n = sml_i8_parse(buf); TEST_ASSERT_EQUAL(-1, *n); sml_i8_free( n ); }
TEST(sml_list, parse_optional) { hex2binary("01", sml_buf_get_current_buf(buf)); sml_list *l = sml_list_parse(buf); TEST_ASSERT_NULL(l); TEST_ASSERT_FALSE(sml_buf_has_errors(buf)); }
TEST(sml_number, parse_int32) { hex2binary("55FFFFEC78", sml_buf_get_current_buf(buf)); i32 *n = sml_i32_parse(buf); TEST_ASSERT_EQUAL(-5000, *n); sml_i32_free( n ); }
TEST(sml_number, parse_int16) { hex2binary("53EC78", sml_buf_get_current_buf(buf)); i16 *n = sml_i16_parse(buf); TEST_ASSERT_EQUAL(-5000, *n); sml_i16_free( n ); }
TEST(sml_number, parse_int64) { hex2binary("59FFFFFFFFFFFFFFFF", sml_buf_get_current_buf(buf)); i64 *n = sml_i64_parse(buf); TEST_ASSERT_EQUAL(-1, *n); sml_i64_free( n ); }
TEST(sml_number, parse_int64_fewer_bytes) { hex2binary("58FFFFFFFFFFEC78", sml_buf_get_current_buf(buf)); i64 *n = sml_i64_parse(buf); TEST_ASSERT_EQUAL(-5000, *n); sml_i64_free( n ); }
TEST(sml_number, parse_unsigned32) { hex2binary("6500000001", sml_buf_get_current_buf(buf)); u32 *n = sml_u32_parse(buf); TEST_ASSERT_EQUAL(1, *n); sml_u32_free( n ); }
TEST(sml_number, parse_unsigned32_fewer_bytes) { hex2binary("64010001", sml_buf_get_current_buf(buf)); u32 *n = sml_u32_parse(buf); TEST_ASSERT_EQUAL(65537, *n); sml_u32_free( n ); }
TEST(sml_number, parse_unsigned64_fewer_bytes) { hex2binary("67000000000001", sml_buf_get_current_buf(buf)); u64 *n = sml_u64_parse(buf); TEST_ASSERT_EQUAL(1, *n); sml_u64_free( n ); }