From 4f87c52d5523a8c35f3ebf6190a611427e8b9845 Mon Sep 17 00:00:00 2001 From: HAHWUL Date: Tue, 14 Jan 2025 00:08:36 +0900 Subject: [PATCH] feat(analyzer): add YAML support for ZAP Sites Tree specification processing and testing Signed-off-by: HAHWUL --- .../specification/zap_sites_tree_spec.cr | 13 ++++++++ .../analyzers/specification/zap_sites_tree.cr | 30 +++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 spec/functional_test/testers/specification/zap_sites_tree_spec.cr diff --git a/spec/functional_test/testers/specification/zap_sites_tree_spec.cr b/spec/functional_test/testers/specification/zap_sites_tree_spec.cr new file mode 100644 index 00000000..c75d541a --- /dev/null +++ b/spec/functional_test/testers/specification/zap_sites_tree_spec.cr @@ -0,0 +1,13 @@ +require "../../func_spec.cr" + +extected_endpoints = [ + Endpoint.new("/v1/pets", "GET"), + Endpoint.new("/v1/pets", "POST", [Param.new("pet", "", "json")]), + Endpoint.new("/v1/pets/{petId}", "GET", [Param.new("petId", "", "path")]), + Endpoint.new("/v1/pets/{petId}", "PUT", [Param.new("petId", "", "path"), Param.new("pet", "", "json")]), +] + +FunctionalTester.new("fixtures/specification/zap/", { + :techs => 1, + :endpoints => extected_endpoints.size, +}, extected_endpoints).test_all diff --git a/src/analyzer/analyzers/specification/zap_sites_tree.cr b/src/analyzer/analyzers/specification/zap_sites_tree.cr index 818a5bd6..8b128964 100644 --- a/src/analyzer/analyzers/specification/zap_sites_tree.cr +++ b/src/analyzer/analyzers/specification/zap_sites_tree.cr @@ -11,12 +11,12 @@ module Analyzer::Specification if File.exists?(sites_tree) details = Details.new(PathInfo.new(sites_tree)) content = File.read(sites_tree, encoding: "utf-8", invalid: :skip) - json_obj = JSON.parse(content) + yaml_obj = YAML.parse(content) begin - children = json_obj["children"].as_h - if children.size > 0 - process_node(children) + children = yaml_obj.as_a + children.each do |child| + process_node(child, details) end rescue e @logger.debug "Exception of #{sites_tree}/paths" @@ -29,8 +29,26 @@ module Analyzer::Specification @result end - def process_node(children) - # TODO.. + def process_node(node, details) + puts 1 + if node.is_a?(Hash) && node.has_key?("url") && node.has_key?("method") + path = node["url"].as_s + method = node["method"].as_s.upcase || "GET" + if path != "" + puts path, method + end + end + + puts 2 + + if node.is_a?(Hash) && node.has_key?("children") + children = node["children"].as_a + if children.size > 0 + children.each do |child| + process_node(child, details) + end + end + end end end end