Add mocking unit tests for rcl_yaml_param_parser (coverage part 3/3) (#772)
* Add mocking unit tests for rcl_yaml Signed-off-by: Stephen Brawner <brawner@gmail.com> * deallocate test_path Signed-off-by: Stephen Brawner <brawner@gmail.com> * Fix memory leaks Signed-off-by: Stephen Brawner <brawner@gmail.com>
This commit is contained in:
		
							parent
							
								
									08bbdde860
								
							
						
					
					
						commit
						b62b83b5cd
					
				
					 5 changed files with 494 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -25,6 +25,8 @@
 | 
			
		|||
#include "../src/impl/node_params.h"
 | 
			
		||||
#include "rcutils/filesystem.h"
 | 
			
		||||
 | 
			
		||||
#include "./mocking_utils/patch.hpp"
 | 
			
		||||
 | 
			
		||||
TEST(TestParse, parse_value) {
 | 
			
		||||
  rcutils_allocator_t allocator = rcutils_get_default_allocator();
 | 
			
		||||
  yaml_event_t event;
 | 
			
		||||
| 
						 | 
				
			
			@ -446,3 +448,73 @@ TEST(TestParse, parse_key_bad_args)
 | 
			
		|||
  EXPECT_TRUE(rcutils_error_is_set());
 | 
			
		||||
  rcutils_reset_error();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(TestParse, parse_file_events_mock_yaml_parser_parse) {
 | 
			
		||||
  char cur_dir[1024];
 | 
			
		||||
  rcutils_reset_error();
 | 
			
		||||
  EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024)) << rcutils_get_error_string().str;
 | 
			
		||||
 | 
			
		||||
  rcutils_allocator_t allocator = rcutils_get_default_allocator();
 | 
			
		||||
  char * test_path = rcutils_join_path(cur_dir, "test", allocator);
 | 
			
		||||
  char * path = rcutils_join_path(test_path, "correct_config.yaml", allocator);
 | 
			
		||||
  ASSERT_TRUE(NULL != path) << rcutils_get_error_string().str;
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    allocator.deallocate(test_path, allocator.state);
 | 
			
		||||
    allocator.deallocate(path, allocator.state);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  rcl_params_t * params_hdl = rcl_yaml_node_struct_init(allocator);
 | 
			
		||||
  ASSERT_NE(nullptr, params_hdl);
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    rcl_yaml_node_struct_fini(params_hdl);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  yaml_parser_t parser;
 | 
			
		||||
  ASSERT_NE(0, yaml_parser_initialize(&parser));
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    yaml_parser_delete(&parser);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  FILE * yaml_file = fopen(path, "r");
 | 
			
		||||
  ASSERT_NE(nullptr, yaml_file);
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    fclose(yaml_file);
 | 
			
		||||
  });
 | 
			
		||||
  yaml_parser_set_input_file(&parser, yaml_file);
 | 
			
		||||
 | 
			
		||||
  namespace_tracker_t ns_tracker;
 | 
			
		||||
  memset(&ns_tracker, 0, sizeof(namespace_tracker_t));
 | 
			
		||||
 | 
			
		||||
  auto mock = mocking_utils::patch(
 | 
			
		||||
    "lib:rcl_yaml_param_parser", yaml_parser_parse, [](yaml_parser_t *, yaml_event_t * event) {
 | 
			
		||||
      event->start_mark.line = 0u;
 | 
			
		||||
      event->type = YAML_NO_EVENT;
 | 
			
		||||
      return 1;
 | 
			
		||||
    });
 | 
			
		||||
  EXPECT_EQ(RCUTILS_RET_ERROR, parse_file_events(&parser, &ns_tracker, params_hdl));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(TestParse, parse_value_events_mock_yaml_parser_parse) {
 | 
			
		||||
  constexpr char node_name[] = "node name";
 | 
			
		||||
  constexpr char param_name[] = "param name";
 | 
			
		||||
  constexpr char yaml_value[] = "true";
 | 
			
		||||
  rcutils_allocator_t allocator = rcutils_get_default_allocator();
 | 
			
		||||
 | 
			
		||||
  rcl_params_t * params_st = rcl_yaml_node_struct_init(allocator);
 | 
			
		||||
  ASSERT_NE(params_st, nullptr);
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    rcl_yaml_node_struct_fini(params_st);
 | 
			
		||||
  });
 | 
			
		||||
  auto mock = mocking_utils::patch(
 | 
			
		||||
    "lib:rcl_yaml_param_parser", yaml_parser_parse, [](yaml_parser_t *, yaml_event_t * event) {
 | 
			
		||||
      event->start_mark.line = 0u;
 | 
			
		||||
      event->type = YAML_NO_EVENT;
 | 
			
		||||
      return 1;
 | 
			
		||||
    });
 | 
			
		||||
  EXPECT_FALSE(rcl_parse_yaml_value(node_name, param_name, yaml_value, params_st));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue