defmodule YspMessageAnalysisTest do @moduledoc """ Test script for the enhanced YSP message analysis functionality. Usage: 1. Start IEx: iex -S mix 2. Load this module: c "test_analysis.exs" 3. Run tests: YspMessageAnalysisTest.run_tests() """ alias DaProductApp.Acquirer.YSP.{YspMessageFraming, YspProcessor} @your_hex_data "60007820000200723C478108C09206164854980600736740000000000000006800100512470700007512470710053105601100510000078200067820003935443435424631303442343132333435363731313233343536373839303132333435373834376666663838366663373133626531620264396632373031383039663130303730363031313230336130613830323966333730343166363135376264396633363032303335623935303530303830303430303030396130333235303931373963303130303966303230363030303030303030303030303566326130323033353638323032333830303966316130323033353639663033303630303030303030303030303039663333303365306530633839663334303334323033303039663335303132323966316530383332333333373333333033303330333138343037613030303030303030333130313039663039303230303936396634313034303030303033353139663236303834373732313533336161653835343265000630303030303101" def run_tests do IO.puts("=== YSP Enhanced Message Analysis Test ===\n") # Convert hex to binary binary_data = Base.decode16!(@your_hex_data) test_quick_summary(binary_data) IO.puts("\n" <> String.duplicate("=", 80) <> "\n") test_detailed_analysis(binary_data) IO.puts("\n" <> String.duplicate("=", 80) <> "\n") test_framed_message(binary_data) IO.puts("\n" <> String.duplicate("=", 80) <> "\n") test_compact_analysis(binary_data) :ok end defp test_quick_summary(binary_data) do IO.puts("šŸš€ TEST 1: Quick Message Summary") IO.puts("=" <> String.duplicate("-", 50)) YspProcessor.print_message_summary(binary_data) end defp test_detailed_analysis(binary_data) do IO.puts("šŸ“Š TEST 2: Detailed Field Analysis") IO.puts("=" <> String.duplicate("-", 50)) YspProcessor.analyze_message_fields(binary_data, show_raw: false) end defp test_framed_message(binary_data) do IO.puts("šŸ“¦ TEST 3: YSP Framed Message Analysis") IO.puts("=" <> String.duplicate("-", 50)) case YspMessageFraming.frame_message(binary_data) do {:ok, framed_data} -> IO.puts("āœ… Message framed successfully!") IO.puts("Original size: #{byte_size(binary_data)} bytes") IO.puts("Framed size: #{byte_size(framed_data)} bytes") IO.puts("") YspProcessor.analyze_message_fields(framed_data, show_raw: false) {:error, reason} -> IO.puts("āŒ Framing failed: #{inspect(reason)}") end end defp test_compact_analysis(binary_data) do IO.puts("šŸ” TEST 4: Compact Analysis (for logs)") IO.puts("=" <> String.duplicate("-", 50)) # Get analysis as string for logging analysis = YspProcessor.format_message_analysis(binary_data, show_raw: false) # Show first few lines lines = String.split(analysis, "\n") compact_lines = Enum.take(lines, 15) Enum.each(compact_lines, &IO.puts/1) if length(lines) > 15 do IO.puts("... (#{length(lines) - 15} more lines)") end IO.puts("\nšŸ“ Analysis exported for logging/storage:") IO.puts("Total lines: #{length(lines)}") IO.puts("Character count: #{String.length(analysis)}") end def test_with_different_formats do IO.puts("=== Format Comparison Test ===\n") binary_data = Base.decode16!(@your_hex_data) formats = [:compact, :detailed, :breakdown] Enum.each(formats, fn format -> IO.puts("Format: #{format}") IO.puts(String.duplicate("-", 30)) # Use the existing functions that work case format do :compact -> IO.puts(YspMessageFraming.format_iso_data_hex(binary_data, :compact)) :detailed -> IO.puts(YspMessageFraming.format_iso_data_hex(binary_data, :detailed)) :breakdown -> IO.puts(YspMessageFraming.format_iso_data_hex(binary_data, :breakdown)) end IO.puts("\n") end) end def analyze_real_message do IO.puts("=== Real Message Analysis ===") IO.puts("Analyzing your actual hex data from logs...\n") binary_data = Base.decode16!(@your_hex_data) # Show basic info IO.puts("šŸ“Š Message Info:") IO.puts(" Size: #{byte_size(binary_data)} bytes") IO.puts(" Hex length: #{String.length(@your_hex_data)} characters") IO.puts("") # Try to extract basic structure if byte_size(binary_data) >= 4 do <> = binary_data IO.puts(" MTI: #{mti}") IO.puts(" Remaining data: #{byte_size(rest)} bytes") if byte_size(rest) >= 8 do <> = rest bitmap_hex = Base.encode16(bitmap) IO.puts(" Primary Bitmap: #{bitmap_hex}") end end IO.puts("\nšŸ” Full Analysis:") IO.puts(String.duplicate("-", 60)) YspProcessor.print_message_summary(binary_data) end end